Integración de Alertmanager con EvaTeam: El plugin alertmanager-evateam para automatización de tareas
El plugin alertmanager-evateam garantiza una integración directa entre Alertmanager de Prometheus o VictoriaMetrics y el tracker EvaTeam. Cuando se dispara una alerta, se crea automáticamente una tarea en el proyecto de EvaTeam. Cuando la alerta se resuelve, se añade un comentario o se actualiza el estado. La solución lleva desplegada en producción más de seis meses, demostrando estabilidad sin fallos.
Implementado en Java usando el framework Quarkus y compilación nativa GraalVM, minimiza el consumo de recursos y acelera el inicio.
Flujo de Integración
El esquema de procesamiento de alertas incluye las siguientes etapas:
- Recopilación de métricas de Prometheus o VictoriaMetrics.
- Alertmanager evalúa las reglas, genera una alerta y la envía vía webhook_config al endpoint del plugin.
- El plugin analiza el JSON de la alerta, crea una nueva tarea en EvaTeam o actualiza una existente.
- Si send_resolved: true, se añade un comentario de resolución o cambia el estado de la tarea.
El mecanismo clave es que los parámetros de la tarea se definen mediante el prefijo eva__ en las etiquetas y anotaciones de la alerta. Esto permite personalizar el comportamiento a nivel de cada regla de alerta sin cambios en la configuración del plugin.
Despliegue mediante Contenedores
Las imágenes están disponibles en Docker Hub. Prueba rápida:
podman run -it --rm --name alertmanager-evateam \
-p 8080:8080 \
hubbitus/alertmanager-evateam:latest
Para desarrollo, se proporciona un stack prometheus + alertmanager + grafana en el directorio _DEV.scripts/prometheus-alertmanager-grafana con podman-compose o docker-compose.
Configuración en Alertmanager
Añade un receiver:
receivers:
- name: 'data-evateam'
webhook_configs:
- url: 'https://alertmanager-evateam.your.domain'
send_resolved: true
Para valores comunes, usa alert_relabel_configs:
alerting:
alert_relabel_configs:
- target_label: eva__project
replacement: data-alerts
- target_label: eva__field__issue_type_name
replacement: Task
Campos de Control Clave
eva__project: Clave del proyecto EvaTeam (ej. data-alerts).eva__field__issue_type_name: Tipo de tarea (Task, Incident).eva__field__<field>: Campos arbitrarios (assignee, priority, cf_env).eva__identification_field_name: Campo para buscar tareas existentes (por defecto cf_alert_id).eva__identification_field_value: Plantilla de identificador (${context.alert.hashCode()}).eva__bql_to_find_issue_for_update: Consulta BQL para actualizar la tarea.eva__comment_in_present_issues: Plantilla de comentario.
Ejemplo de regla de alerta:
- 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}}
Manejo de Campos con Caracteres Especiales y Plantillas
Para nombres de campos con espacios o barras, aplica pares:
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'
Las plantillas usan contexto: eva__field__tags: '["severity:${context.field("severity")}"]'. Lista completa de variables en AlertContext.
Especificaciones de la API de EvaTeam
La API de EvaTeam es flexible: acepta kwargs para cualquier campo sin un esquema estricto. Sin embargo, la validación es débil: los errores tipográficos en los nombres de los campos se ignoran sin errores. Pruebas obligatorias: verifica la creación de tareas con los campos objetivo antes de producción.
Construcción y Pruebas desde el Código Fuente
Construir:
./gradlew build
java -jar build/quarkus-app/quarkus-run.jar
Construcción nativa:
./gradlew build -Dquarkus.native.enabled=true \
-Dquarkus.package.jar.enabled=false \
-Dquarkus.native.container-build=true
Pruebas (unitarias + integración, requieren EvaTeam activo):
./gradlew test --info
./gradlew testNative --info
Conclusiones Clave
- Automatiza el ciclo completo: desde la alerta de Alertmanager hasta la tarea en EvaTeam con actualizaciones al resolverse.
- Configuración flexible mediante prefijos eva__ en etiquetas/anotaciones sin editar el plugin.
- Construcción nativa GraalVM para bajo consumo de recursos.
- Requiere pruebas exhaustivas debido a la validación débil de la API de EvaTeam.
- Apto para producción: operación estable durante seis meses.
— Editorial Team
Aún no hay comentarios.