Retour à l'accueil

Alertmanager-evateam : intégration avec EvaTeam

Le plugin alertmanager-evateam automatise la création et les mises à jour de tâches dans EvaTeam en fonction des alertes Alertmanager. Prend en charge une configuration flexible via les préfixes eva__ dans les labels et annotations, build natif GraalVM. Instructions de déploiement, de configuration et de test.

plugin alertmanager-evateam pour EvaTeam et Prometheus
Advertisement 728x90

Intégration d'Alertmanager avec EvaTeam : Le plugin alertmanager-evateam pour l'automatisation des tâches

Le plugin alertmanager-evateam assure une intégration directe entre Alertmanager (de Prometheus ou VictoriaMetrics) et le gestionnaire de tâches EvaTeam. Lorsqu'une alerte se déclenche, une tâche est automatiquement créée dans le projet EvaTeam. Lorsque l'alerte est résolue, un commentaire est ajouté ou le statut est mis à jour. La solution est déployée en production depuis plus de six mois, démontrant une stabilité sans faille.

Implémenté en Java avec le framework Quarkus et une compilation native GraalVM, il minimise la consommation de ressources et accélère le démarrage.

Flux d'intégration

Le schéma de traitement des alertes comprend les étapes suivantes :

Google AdInline article slot
  • Collecte des métriques Prometheus ou VictoriaMetrics.
  • Alertmanager évalue les règles, génère une alerte et l'envoie via webhook_config vers le point de terminaison du plugin.
  • Le plugin analyse le JSON de l'alerte, crée une nouvelle tâche dans EvaTeam ou met à jour une existante.
  • Si send_resolved: true, un commentaire de résolution est ajouté ou le statut de la tâche change.

Le mécanisme clé est que les paramètres de la tâche sont définis via le préfixe eva__ dans les labels et annotations de l'alerte. Cela permet de personnaliser le comportement au niveau de chaque règle d'alerte sans modifier la configuration du plugin.

Déploiement via Conteneurs

Les images sont disponibles sur Docker Hub. Test rapide :

podman run -it --rm --name alertmanager-evateam \
    -p 8080:8080 \
    hubbitus/alertmanager-evateam:latest

Pour le développement, une pile prometheus + alertmanager + grafana est fournie dans le répertoire _DEV.scripts/prometheus-alertmanager-grafana avec podman-compose ou docker-compose.

Google AdInline article slot

Configuration dans Alertmanager

Ajoutez un receiver :

receivers:
  - name: 'data-evateam'
    webhook_configs:
      - url: 'https://alertmanager-evateam.your.domain'
        send_resolved: true

Pour les valeurs communes, utilisez alert_relabel_configs :

alerting:
  alert_relabel_configs:
    - target_label: eva__project
      replacement: data-alerts
    - target_label: eva__field__issue_type_name
      replacement: Task

Champs de Contrôle Clés

  • eva__project: Clé du projet EvaTeam (par ex. data-alerts).
  • eva__field__issue_type_name: Type de tâche (Task, Incident).
  • eva__field__<field>: Champs arbitraires (assignee, priority, cf_env).
  • eva__identification_field_name: Champ pour rechercher des tâches existantes (par défaut cf_alert_id).
  • eva__identification_field_value: Modèle d'identifiant (${context.alert.hashCode()}).
  • eva__bql_to_find_issue_for_update: Requête BQL pour mettre à jour la tâche.
  • eva__comment_in_present_issues: Modèle de commentaire.

Exemple de règle d'alerte :

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

Gestion des Champs avec Caractères Spéciaux et Templating

Pour les noms de champs contenant des espaces ou des slashes, appliquez des paires :

annotations:
  eva__field__name__1: 'Component/s'
  eva__field__value__1: 'DQ-issues+alerts, DevOps+infrastructure'
  eva__field__name__result: 'Final Result'
  eva__field__value__result: 'Some result description'

Les modèles utilisent le contexte : eva__field__tags: '["severity:${context.field("severity")}"]'. Liste complète des variables dans AlertContext.

Spécificités de l'API EvaTeam

L'API EvaTeam est flexible : elle accepte les kwargs pour tous les champs sans schéma strict. Cependant, la validation est faible — les erreurs de frappe dans les noms de champs sont ignorées sans erreur. Tests obligatoires : vérifiez la création de tâches avec les champs cibles avant la production.

Construction et Tests depuis la Source

Build :

./gradlew build
java -jar build/quarkus-app/quarkus-run.jar

Build natif :

./gradlew build -Dquarkus.native.enabled=true \
    -Dquarkus.package.jar.enabled=false \
    -Dquarkus.native.container-build=true

Tests (unitaires + intégration, nécessitent un EvaTeam actif) :

./gradlew test --info
./gradlew testNative --info

Points Clés à Retenir

  • Automatise le cycle complet : de l'alerte Alertmanager à la tâche EvaTeam avec mises à jour lors de la résolution.
  • Configuration flexible via les préfixes eva__ dans les labels/annotations sans édition du plugin.
  • Build natif GraalVM pour une faible consommation de ressources.
  • Nécessite des tests approfondis en raison de la validation faible de l'API EvaTeam.
  • Adapté à la production : fonctionnement stable depuis six mois.

— Editorial Team

Advertisement 728x90

Lire ensuite