将 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 提供灵活性:项目/问题类型的默认值、在告警中的覆盖,以及对现有工单的评论。
在容器中部署
项目在 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 模板。
示例 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
特定告警中的覆盖优先。模板:
${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
暂无评论。