Integrace Alertmanageru s EvaTeam: plugin alertmanager-evateam pro automatizaci úkolů
Plugin alertmanager-evateam zajišťuje přímou integraci Alertmanageru z Prometheus nebo VictoriaMetrics s trackerem EvaTeam. Při spuštění alertu se automaticky vytvoří úkol v projektu EvaTeam. Při vyřešení alertu se přidá komentář nebo aktualizuje status. Řešení je nasazeno v produkčním prostředí již více než půl roku a vykazuje stabilitu bez výpadků.
Implementace v Javě s frameworkem Quarkus a nativní compilací GraalVM minimalizuje spotřebu zdrojů a urychluje start.
Princip fungování integrace
Schéma zpracování alertů zahrnuje následující kroky:
- Sběr metrik Prometheus nebo VictoriaMetrics.
- Alertmanager vyhodnotí pravidla, vygeneruje alert a odešle jej přes webhook_config na endpoint pluginu.
- Plugin parsuje JSON alertu, vytvoří nový úkol v EvaTeam nebo aktualizuje existující.
- Při send_resolved: true se přidá komentář o vyřešení nebo změní status úkolu.
Klíčovým mechanismem je, že parametry úkolů jsou určeny přes prefix eva__ v labels a annotations alertu. To umožňuje přizpůsobit chování na úrovni každého alerting rule bez změn v konfiguraci pluginu.
Nasazení přes kontejnery
Obrazy jsou dostupné na Docker Hub. Rychlý test:
podman run -it --rm --name alertmanager-evateam \
-p 8080:8080 \
hubbitus/alertmanager-evateam:latest
Pro vývoj je poskytnut stack prometheus + alertmanager + grafana v adresáři _DEV.scripts/prometheus-alertmanager-grafana s podman-compose nebo docker-compose.
Nastavení v Alertmanageru
Přidejte receiver:
receivers:
- name: 'data-evateam'
webhook_configs:
- url: 'https://alertmanager-evateam.your.domain'
send_resolved: true
Pro obecné hodnoty použijte alert_relabel_configs:
alerting:
alert_relabel_configs:
- target_label: eva__project
replacement: data-alerts
- target_label: eva__field__issue_type_name
replacement: Task
Hlavní řídicí pole
eva__project: klíč projektu EvaTeam (např. data-alerts).eva__field__issue_type_name: typ úkolu (Task, Incident).eva__field__<pole>: libovolná pole (assignee, priority, cf_env).eva__identification_field_name: pole pro vyhledání existujícího úkolu (výchozí cf_alert_id).eva__identification_field_value: šablona identifikátoru (${context.alert.hashCode()}).eva__bql_to_find_issue_for_update: BQL dotaz pro aktualizaci úkolu.eva__comment_in_present_issues: šablona komentáře.
Příklad pravidla 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}}
Zpracování polí se speciálními znaky a šablonování
Pro názvy polí s mezerami nebo lomítky použijte páry:
annotations:
eva__field__name__1: 'Component/s'
eva__field__value__1: 'DQ-issues+alerts, DevOps+infrastructure'
eva__field__name__result: 'Konečný výsledek'
eva__field__value__result: 'Some result description'
Šablony používají context: eva__field__tags: '["severity:${context.field("severity")}"]'. Úplný seznam proměnných v AlertContext.
Specifika API EvaTeam
API EvaTeam je flexibilní: přijímá kwargs pro libovolná pole bez striktního schématu. Validace je však slabá – překlepy v názvech polí jsou ignorovány bez chyb. Povinné testování: před produkčním nasazením ověřte vytváření úkolů s cílovými poli.
Sestavení a testování ze zdrojových kódů
Sestavení:
./gradlew build
java -jar build/quarkus-app/quarkus-run.jar
Nativní sestavení:
./gradlew build -Dquarkus.native.enabled=true \
-Dquarkus.package.jar.enabled=false \
-Dquarkus.native.container-build=true
Testy (unit + integrační, vyžadují živý EvaTeam):
./gradlew test --info
./gradlew testNative --info
Co je důležité
- Automatizuje celý cyklus: od alertu Alertmanageru po úkol v EvaTeam s aktualizací při vyřešení.
- Flexibilní nastavení přes eva__-prefixy v labels/annotations bez úprav pluginu.
- Nativní compilace GraalVM pro nízkou spotřebu zdrojů.
- Vyžaduje důkladné testování kvůli slabé validaci API EvaTeam.
- Vhodné pro produkci: stabilní provoz půl roku.
— Editorial Team
Zatím žádné komentáře.