Volver al inicio

Alertmanager-evateam: integración con EvaTeam

plugin alertmanager-evateam automatiza la creación y actualización de tareas en EvaTeam basadas en alertas de Alertmanager. Soporta configuración flexible mediante prefijos eva__ en etiquetas y anotaciones, compilación nativa de GraalVM. Instrucciones de implementación, configuración y pruebas.

plugin alertmanager-evateam para EvaTeam y Prometheus
Advertisement 728x90

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:

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

Google AdInline article slot

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:

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

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

Advertisement 728x90

Leer después