返回首页

Alertmanager-jira:将告警与 Jira 集成

Alertmanager-jira — 用于将 Prometheus/VictoriaMetrics 告警与 Jira 集成的 webhook 插件。支持灵活字段配置、模板和去重。在 Docker 中部署,为 SRE 团队提供配置示例。

Alertmanager-jira Webhook for Jira:完整指南
Advertisement 728x90

将 Alertmanager 与 Jira 集成:基于 Quarkus 的灵活 Webhook 插件

Alertmanager-jira 是 Alertmanager(Prometheus、VictoriaMetrics)的开源 Webhook 插件,用于在 Jira 中创建和管理问题。它支持分配经办人、自定义字段、描述模板,以及通过 JQL 进行重复检测。基于 Quarkus 构建,可通过 Docker/Podman 部署。该工具解决了 jiralert 等替代方案的局限性,提供对工单的完全控制,而无需自定义脚本。

现有解决方案的问题

prometheus-community 的 Jiralert 根据 group_key 创建问题,使用 Go 模板,并支持自动解决。然而,在实际使用中,它存在以下局限性:

  • 配置简单:仅基本 YAML 模板,不支持自定义字段或动态 JQL 查询。
  • 过长的 group_key 哈希会破坏 Jira 的 UI。
  • 开发缓慢:自 2018 年起有未修复的 bug,更新不频繁。

其他选项包括 PagerDuty 等企业解决方案或自定义脚本。Alertmanager-jira 提供灵活性:项目/问题类型的默认值、在告警中的覆盖,以及对现有工单的评论。

Google AdInline article slot

在容器中部署

项目在 hub.docker.com 上提供 Docker 镜像。使用 Podman(类似于 Docker)的示例启动命令:

podman run -it --rm --name alertmanager-jira \
    --env JIRA_URL=https://your-jira.com \
    --env JIRA_USERNAME=service-account \
    --env JIRA_PASSWORD=your-token \
    -p 8080:8080 \
        hubbitus/alertmanager-jira:latest

配置 Alertmanager

在 alertmanager.yml 中添加一个接收器:

receivers:
  - name: 'jira'
    webhook_configs:
      - url: 'http://your-host:8080'
        send_resolved: true

在 Prometheus/VictoriaMetrics 中配置告警

使用规则的标签/注解中的 jira__ 前缀设置 Jira 字段。支持 Groovy SimpleTemplate 模板。

Google AdInline article slot

示例 prometheus-rules.yml:

groups:
- name: example
  rules:
  - alert: HighCPU
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
    for: 1m
    labels:
      severity: critical
      jira__field__severity: High
    annotations:
      summary: "High CPU on {{ $labels.instance }}"
      description: "CPU usage above 80%."
      jira__project_key: OPS
      jira__issue_type_name: Incident
      jira__field__assignee: oncall-sre
      jira__field__labels: 'monitoring, cpu, alert'
      jira__field__component_s: 'DevOps+infrastructure, DQ-issues+alerts'
      jira__field__name__1: 'Custom Field'
      jira__field__value__1: 'Some dynamic value: ${context.alert.severity}'

在 prometheus.yml 中通过 alert_relabel_configs 设置默认值:

alerting:
  alert_relabel_configs:
    - source_labels: [__alert_severity]
      target_label: jira__field__severity
      regex: critical;High
    - target_label: jira__project_key
      replacement: OPS

特定告警中的覆盖优先。模板:

Google AdInline article slot
  • ${context.alert.fingerprint} —— 告警哈希。
  • ${context.jiraProject.name} —— 项目元数据。
  • 搜索用的 JQL:labels = "alert[${context.alert.hashCode()}]") AND statusCategory != Done

技术实现

基于 Java + Groovy(Quarkus)和 Atlassian Jira SDK 构建。测试:解析的单元测试、在外部 Jira 实例上的集成测试。由于 Jira 许可限制,CI 不运行测试——需要在部署的服务器上手工运行。

可能的改进:使用临时许可或模拟服务器将测试集成到 CI 中。

主要特性

  • 字段灵活性:通过 jira__ 前缀和模板支持任意自定义字段、标签、组件。
  • 去重:使用 JQL 搜索现有问题,并支持评论选项。
  • 自动化:通过自动工单减少 DevOps/SRE/ITSM 中的 MTTR。
  • 生产就绪:已在数据平台上生产运行 2 年。
  • 开源:Apache 2.0 许可,GitHub 用于问题/PR。

— Editorial Team

Advertisement 728x90

继续阅读