Integracja Alertmanager z EvaTeam: wtyczka alertmanager-evateam do automatyzacji zadań
Wtyczka alertmanager-evateam zapewnia bezpośrednią integrację Alertmanager z Prometheus lub VictoriaMetrics z systemem śledzenia zadań EvaTeam. Po uruchomieniu alertu automatycznie tworzone jest zadanie w projekcie EvaTeam. Gdy alert zostaje rozwiązany, dodawany jest komentarz lub aktualizowany status. Rozwiązanie działa w środowisku produkcyjnym od ponad pół roku, wykazując stabilność bez awarii.
Implementacja w Java z frameworkiem Quarkus i natywną kompilacją GraalVM minimalizuje zużycie zasobów i przyspiesza uruchamianie.
Zasada działania integracji
Schemat przetwarzania alertów obejmuje następujące etapy:
- Zbieranie metryk przez Prometheus lub VictoriaMetrics.
- Alertmanager ocenia reguły, generuje alert i kieruje go przez webhook_config na endpoint wtyczki.
- Wtyczka parsuje JSON alertu, tworzy nowe zadanie w EvaTeam lub aktualizuje istniejące.
- Przy send_resolved: true dodawany jest komentarz o rozwiązaniu lub zmieniany jest status zadania.
Kluczowy mechanizm — parametry zadań są określane przez prefiks eva__ w labels i annotations alertu. Pozwala to dostosować zachowanie na poziomie każdej reguły alertowania bez zmian w konfiguracji wtyczki.
Wdrożenie poprzez kontenery
Obrazy są dostępne na Docker Hub. Szybki test:
podman run -it --rm --name alertmanager-evateam \
-p 8080:8080 \
hubbitus/alertmanager-evateam:latest
Do rozwoju dostarczony jest stack prometheus + alertmanager + grafana w katalogu _DEV.scripts/prometheus-alertmanager-grafana z podman-compose lub docker-compose.
Konfiguracja w Alertmanager
Dodaj odbiorcę (receiver):
receivers:
- name: 'data-evateam'
webhook_configs:
- url: 'https://alertmanager-evateam.your.domain'
send_resolved: true
Do wartości ogólnych użyj alert_relabel_configs:
alerting:
alert_relabel_configs:
- target_label: eva__project
replacement: data-alerts
- target_label: eva__field__issue_type_name
replacement: Task
Główne pola sterujące
eva__project: klucz projektu EvaTeam (np. data-alerts).eva__field__issue_type_name: typ zadania (Task, Incident).eva__field__<pole>: dowolne pola (assignee, priority, cf_env).eva__identification_field_name: pole do wyszukiwania istniejącego zadania (domyślnie cf_alert_id).eva__identification_field_value: szablon identyfikatora (${context.alert.hashCode()}).eva__bql_to_find_issue_for_update: zapytanie BQL do aktualizacji zadania.eva__comment_in_present_issues: szablon komentarza.
Przykład reguły alertu:
- name: DATA
rules:
- alert: DataTest0
expr: 'promhttp_metric_handler_requests_total > 1'
labels:
severity: warning
eva__field__severity: High
annotations:
eva__project: data-alerts
eva__field__issue_type_name: Task
eva__field__cf_env: PROD
summary: DataTest0 summary
description: |
Some description VALUE: {{$value}}
Przetwarzanie pól ze znakami specjalnymi i szablonizacja
Do nazw pól ze spacjami lub ukośnikami zastosuj pary:
annotations:
eva__field__name__1: 'Component/s'
eva__field__value__1: 'DQ-issues+alerts, DevOps+infrastructure'
eva__field__name__result: 'Wynik końcowy'
eva__field__value__result: 'Some result description'
Szablony używają context: eva__field__tags: '["severity:${context.field("severity")}"]'. Pełna lista zmiennych w AlertContext.
Specyfika API EvaTeam
API EvaTeam jest elastyczne: przyjmuje kwargs dla dowolnych pól bez ścisłego schematu. Jednak walidacja jest słaba — literówki w nazwach pól są ignorowane bez błędów. Obowiązkowe testowanie: sprawdź tworzenie zadań z docelowymi polami przed produkcją.
Kompilacja i testowanie ze źródeł
Kompilacja:
./gradlew build
java -jar build/quarkus-app/quarkus-run.jar
Kompilacja natywna:
./gradlew build -Dquarkus.native.enabled=true \
-Dquarkus.package.jar.enabled=false \
-Dquarkus.native.container-build=true
Testy (jednostkowe + integracyjne, wymagają żywego EvaTeam):
./gradlew test --info
./gradlew testNative --info
Co ważne
- Automatyzuje pełny cykl: od alertu Alertmanager do zadania w EvaTeam z aktualizacją przy rozwiązaniu.
- Elastyczna konfiguracja przez prefiksy eva__ w labels/annotations bez poprawek wtyczki.
- Natywna kompilacja GraalVM dla niskiego zużycia zasobów.
- Wymaga dokładnego testowania ze względu na słabą walidację API EvaTeam.
- Nadaje się do produkcji: stabilna praca przez pół roku.
— Editorial Team
Brak komentarzy.