# Alertmanager mit Jira integrieren: Flexibles Webhook-Plugin auf Quarkus
Alertmanager-jira ist ein Open-Source-Webhook-Plugin für Alertmanager (Prometheus, VictoriaMetrics), das Issues in Jira erstellt und verwaltet. Es unterstützt die Zuweisung von Assignees, benutzerdefinierte Felder, Vorlagen für Beschreibungen und Duplikatenerkennung über JQL. Auf Quarkus aufgebaut, wird es über Docker/Podman bereitgestellt. Dieses Tool behebt die Einschränkungen von Alternativen wie jiralert und bietet volle Kontrolle über Tickets ohne benutzerdefinierte Skripte.
Probleme mit bestehenden Lösungen
Jiralert von prometheus-community erstellt Issues basierend auf group_key, verwendet Go-Templates und unterstützt Auto-Resolution. In der Praxis hat es jedoch folgende Einschränkungen:
- Minimale Konfiguration: einfache YAML-Templates, keine Unterstützung für benutzerdefinierte Felder oder dynamische JQL-Abfragen.
- Lange group_key-Hashes zerstören die Jira-Benutzeroberfläche.
- Langsame Entwicklung: offene Bugs seit 2018, seltene Updates.
Andere Optionen umfassen Enterprise-Lösungen wie PagerDuty oder benutzerdefinierte Skripte. Alertmanager-jira bietet Flexibilität: Standardwerte für Projekte/Issue-Typen, Überschreibungen in Alerts und Kommentare zu bestehenden Tickets.
Bereitstellung in einem Container
Das Projekt enthält Docker-Images auf hub.docker.com. Beispielstart mit Podman (ähnlich wie 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 konfigurieren
Fügen Sie einen Receiver in alertmanager.yml hinzu:
receivers:
- name: 'jira'
webhook_configs:
- url: 'http://your-host:8080'
send_resolved: true
Alerts in Prometheus/VictoriaMetrics konfigurieren
Jira-Felder werden mit dem Präfix jira__ in Labels/Annotations von Rules gesetzt. Groovy SimpleTemplate-Templates werden unterstützt.
Beispiel 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}'
Standardwerte in prometheus.yml über 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
Überschreibungen in spezifischen Alerts haben Vorrang. Templates:
${context.alert.fingerprint}— Alert-Hash.${context.jiraProject.name}— Projekt-Metadaten.- JQL für Suche:
labels = "alert[${context.alert.hashCode()}]") AND statusCategory != Done.
Technische Umsetzung
Aufgebaut auf Java + Groovy (Quarkus), Atlassian Jira SDK. Tests: Unit-Tests für Parsing, Integrationstests auf einer externen Jira-Instanz. CI führt keine Tests aus aufgrund von Jira-Lizenzbeschränkungen – erfordert manuelle Ausführungen auf einem bereitgestellten Server.
Mögliche Verbesserungen: Tests in CI integrieren mit temporären Lizenzen oder Mock-Servern.
Wichtige Funktionen
- Flexibilität bei Feldern: beliebige benutzerdefinierte Felder, Labels, Komponenten über
jira__-Präfix und Templates. - Deduplizierung: JQL-Suche nach bestehenden Issues mit Kommentaroption.
- Automatisierung: reduziert MTTR in DevOps/SRE/ITSM durch Auto-Tickets.
- Produktionsreif: 2 Jahre in Produktion auf einer Datenplattform.
- Open-Source: Apache 2.0, GitHub für Issues/PRs.
— Editorial Team
Noch keine Kommentare.