Zpět na domů

Alertmanager-evateam: integrace s EvaTeam

Plugin alertmanager-evateam automatizuje vytváření a aktualizaci úkolů v EvaTeam na základě alertů Alertmanager. Podporuje flexibilní nastavení prostřednictvím prefixů eva__ v labels a annotations, nativní sestavu GraalVM. Návod k nasazení, konfiguraci a testování.

Plugin alertmanager-evateam pro EvaTeam a Prometheus
Advertisement 728x90

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:

Google AdInline article slot
  • 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.

Google AdInline article slot

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:

Google AdInline article slot
- 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

Advertisement 728x90

Číst dál