集成 Alertmanager 与 EvaTeam:用于任务自动化的 alertmanager-evateam 插件
alertmanager-evateam 插件确保了 Prometheus 或 VictoriaMetrics 的 Alertmanager 与 EvaTeam 跟踪器之间的直接集成。当触发告警时,EvaTeam 项目中会自动创建任务。当告警解决时,会添加评论或更新状态。该方案已在生产环境部署超过六个月,表现出稳定无故障的运行状态。
该插件使用 Java 语言和 Quarkus 框架实现,并通过 GraalVM 进行原生编译,最大限度地减少了资源消耗并加快了启动速度。
集成工作流
告警处理方案包含以下阶段:
- 收集 Prometheus 或 VictoriaMetrics 指标。
- Alertmanager 评估规则,生成告警,并通过 webhook_config 将其发送到插件端点。
- 插件解析告警 JSON,在 EvaTeam 中创建新任务或更新现有任务。
- 如果 send_resolved: true,则添加解决评论或更改任务状态。
关键机制在于任务参数是通过告警标签和注释中的 eva__ 前缀定义的。这允许在每个告警规则级别自定义行为,而无需更改插件配置。
通过容器部署
镜像可在 Docker Hub 上获取。快速测试:
podman run -it --rm --name alertmanager-evateam \
-p 8080:8080 \
hubbitus/alertmanager-evateam:latest
对于开发,_DEV.scripts/prometheus-alertmanager-grafana 目录中提供了 prometheus + alertmanager + grafana 堆栈,支持 podman-compose 或 docker-compose。
Alertmanager 中的配置
添加接收器:
receivers:
- name: 'data-evateam'
webhook_configs:
- url: 'https://alertmanager-evateam.your.domain'
send_resolved: true
对于通用值,使用 alert_relabel_configs:
alerting:
alert_relabel_configs:
- target_label: eva__project
replacement: data-alerts
- target_label: eva__field__issue_type_name
replacement: Task
关键控制字段
eva__project:EvaTeam 项目密钥(例如 data-alerts)。eva__field__issue_type_name:任务类型(Task, Incident)。eva__field__<field>:任意字段(assignee, priority, cf_env)。eva__identification_field_name:用于搜索现有任务的字段(默认 cf_alert_id)。eva__identification_field_value:标识符模板 (${context.alert.hashCode()})。eva__bql_to_find_issue_for_update:用于更新任务的 BQL 查询。eva__comment_in_present_issues:评论模板。
告警规则示例:
- 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}}
处理带有特殊字符和模板的字段
对于带有空格或斜杠的字段名,应用配对:
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'
模板使用上下文:eva__field__tags: '["severity:${context.field("severity")}"]'。AlertContext 中变量完整列表。
EvaTeam API 特性
EvaTeam API 非常灵活:它接受任何字段的 kwargs,没有严格的模式。但是,验证较弱——字段名中的拼写错误会被忽略且不报错。必须测试:在生产环境之前验证带有目标字段的任务创建。
从源代码构建和测试
构建:
./gradlew build
java -jar build/quarkus-app/quarkus-run.jar
原生构建:
./gradlew build -Dquarkus.native.enabled=true \
-Dquarkus.package.jar.enabled=false \
-Dquarkus.native.container-build=true
测试(单元 + 集成,需要活的 EvaTeam):
./gradlew test --info
./gradlew testNative --info
关键要点
- 自动化完整周期:从 Alertmanager 告警到 EvaTeam 任务,并在解决时更新。
- 通过标签/注释中的 eva__ 前缀灵活配置,无需编辑插件。
- GraalVM 原生构建,资源消耗低。
- 由于 EvaTeam API 验证较弱,需要彻底测试。
- 适用于生产环境:稳定运行六个月。
— Editorial Team
暂无评论。