# 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년부터 열려 있는 버그, 업데이트가 드뭄.
기타 옵션으로는 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 인스턴스에서의 통합 테스트. CI는 Jira 라이선스 제한으로 테스트를 실행하지 않음 — 배포된 서버에서 수동 실행이 필요합니다.
개선 가능: 임시 라이선스나 모의 서버를 사용한 CI 테스트 통합.
주요 기능
- 필드 유연성:
jira__접두어와 템플릿을 통한 임의의 사용자 정의 필드, 레이블, 컴포넌트. - 중복 제거: 댓글 옵션이 있는 기존 이슈 JQL 검색.
- 자동화: 자동 티켓으로 DevOps/SRE/ITSM의 MTTR 단축.
- 프로덕션 준비 완료: 데이터 플랫폼에서 2년간 프로덕션 사용.
- 오픈소스: Apache 2.0, GitHub에서 이슈/PR 관리.
— Editorial Team
아직 댓글이 없습니다.