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 :
- 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.
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 :
- 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
Aucun commentaire pour le moment.