返回首页

Alertmanager-evateam:与 EvaTeam 的集成

alertmanager-evateam 插件基于 Alertmanager 警报在 EvaTeam 中自动化任务创建和更新。支持通过标签和注解中的 eva__ 前缀进行灵活配置,原生 GraalVM 构建。部署、配置和测试说明。

EvaTeam 和 Prometheus 的 alertmanager-evateam 插件
Advertisement 728x90

集成 Alertmanager 与 EvaTeam:用于任务自动化的 alertmanager-evateam 插件

alertmanager-evateam 插件确保了 Prometheus 或 VictoriaMetrics 的 Alertmanager 与 EvaTeam 跟踪器之间的直接集成。当触发告警时,EvaTeam 项目中会自动创建任务。当告警解决时,会添加评论或更新状态。该方案已在生产环境部署超过六个月,表现出稳定无故障的运行状态。

该插件使用 Java 语言和 Quarkus 框架实现,并通过 GraalVM 进行原生编译,最大限度地减少了资源消耗并加快了启动速度。

集成工作流

告警处理方案包含以下阶段:

Google AdInline article slot
  • 收集 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。

Google AdInline article slot

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:评论模板。

告警规则示例:

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

处理带有特殊字符和模板的字段

对于带有空格或斜杠的字段名,应用配对:

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

Advertisement 728x90

继续阅读