Powrót do strony głównej

Alertmanager-evateam: integracja z EvaTeam

Wtyczka alertmanager-evateam automatyzuje tworzenie i aktualizację zadań w EvaTeam na podstawie alertów Alertmanager. Obsługuje elastyczną konfigurację za pomocą prefiksów eva__ w labels i annotations, natywną kompilację GraalVM. Instrukcja wdrażania, konfiguracji i testowania.

Wtyczka alertmanager-evateam dla EvaTeam i Prometheus
Advertisement 728x90

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:

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

Google AdInline article slot

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:

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}}

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

Advertisement 728x90

Czytaj dalej