Alertmanager 와 EvaTeam 연동: 작업 자동화를 위한 alertmanager-evateam 플러그인
alertmanager-evateam 플러그인은 Prometheus 또는 VictoriaMetrics 의 Alertmanager 와 EvaTeam 트래커 간의 직접적인 연동을 보장합니다. 알람이 발생하면 EvaTeam 프로젝트에 작업이 자동으로 생성됩니다. 알람이 해결되면 댓글이 추가되거나 상태가 업데이트됩니다. 이 솔루션은 6 개월 이상 프로덕션 환경에서 배포되어 오류 없이 안정성을 입증했습니다.
Java 로 구현되었으며 Quarkus 프레임워크와 네이티브 GraalVM 컴파일을 사용하여 리소스 소비를 최소화하고 시작 속도를 가속화했습니다.
연동 워크플로우
알람 처리 스키마는 다음 단계를 포함합니다:
- 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 디렉토리에 podman-compose 또는 docker-compose 를 위한 prometheus + alertmanager + grafana 스택이 제공됩니다.
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: 댓글 템플릿.
알람 규칙 예시:
- 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 유효성 검사가 약하므로 철저한 테스트가 필요합니다.
- 프로덕션에 적합: 6 개월 동안 안정적으로 작동.
— Editorial Team
아직 댓글이 없습니다.