Prometheus Alertmanager 연동 - 모바일 알림
Prometheus Alertmanager의 알림을 Echobell로 보내고, 서버 및 인프라 장애에 대해 푸시 알림이나 전화 알림을 받으세요.
Alertmanager와 함께 사용하는 Prometheus는 널리 쓰이는 오픈 소스 모니터링 및 알림 스택입니다. Alertmanager를 Echobell과 연동하면 알림 규칙이 실행될 때마다 즉시 모바일 알림(긴급 알림이나 전화 형식 알림 포함)을 받을 수 있습니다.
사전 준비 사항
- 채널을 하나 이상 만들어 둔 Echobell 계정
- 실행 중인 Prometheus + Alertmanager 환경
- Alertmanager 설정 파일(alertmanager.yml)을 편집할 수 있는 권한
설정 개요
- Echobell 채널 만들기
- 알림 템플릿 구성하기(선택 사항인 링크 템플릿 포함)
- 연동 방식 선택하기:
- Alertmanager의 웹훅 리시버를 이용한 Webhook 방식(권장)
- Alertmanager의 이메일 리시버를 이용한 이메일 방식(대안)
- 알림 규칙 만들거나 업데이트하기
- 테스트하고 다듬기
단계별 가이드
Echobell 채널 만들기
- Echobell 앱을 엽니다
- 새 채널을 만듭니다(예: "Prometheus Alerts")
- 쉽게 구분할 수 있도록 색상을 선택합니다
알림 템플릿 구성하기
Alertmanager의 Webhook 페이로드에는 status, commonLabels, commonAnnotations, externalURL과 alerts 배열 같은 구조화된 필드가 들어 있습니다. Echobell 템플릿에서 이러한 필드를 직접 참조할 수 있습니다.
권장 템플릿은 다음과 같습니다.
제목 템플릿:
{{commonLabels.alertname}} - {{status}}
본문 템플릿:
🔔 Alert: {{commonLabels.alertname}}
📊 Severity: {{commonLabels.severity}}
🖥️ Instance: {{alerts[0].labels["instance"]}}
⏰ Starts: {{alerts[0].startsAt}}
ℹ️ Summary: {{commonAnnotations.summary}}
🧾 Description: {{commonAnnotations.description}}
선택 사항인 링크 템플릿(고급 설정):
{{alerts[0].generatorURL || externalURL}}
이렇게 하면 알림 기록 안에서 알림이 발생한 그래프나 대시보드로 바로 이동하는 링크가 표시됩니다. generatorURL이 없는 경우에는 externalURL이 대신 사용됩니다.
연동 방식 A — Webhook(권장)
- Echobell 채널의 트리거 항목에서 Webhook URL을 복사합니다
- Alertmanager에서 해당 URL로 요청을 보내는 웹훅 리시버를 추가합니다
최소한의 alertmanager.yml 예시:
route:
receiver: echobell-webhook
receivers:
- name: echobell-webhook
webhook_configs:
- url: "https://hook.echobell.one/t/<channel-token>"
send_resolved: true
http_config:
follow_redirects: true참고 사항:
- send_resolved: true로 설정하면 알림이 해제될 때(status가 resolved로 바뀔 때)도 알림을 보냅니다
- Echobell은 JSON 본문을 그대로 읽으므로 위 템플릿이 정상적으로 렌더링됩니다
연동 방식 B — 이메일(대안)
이메일 방식을 선호하거나 반드시 이메일을 사용해야 한다면, Alertmanager의 이메일 리시버를 사용해 채널에 연결된 이메일 주소로 보내세요.
- Echobell의 트리거 섹션에서 채널의 이메일 주소를 복사합니다
- Alertmanager에서 이메일 리시버를 구성하고 간단한 템플릿을 사용합니다
예시 설정:
receivers:
- name: echobell-email
email_configs:
- to: "PASTE_CHANNEL_EMAIL_ADDRESS"
send_resolved: true
subject: "{{ .CommonLabels.alertname }} - {{ .Status }}"
html: |
<p><strong>Summary:</strong> {{ .CommonAnnotations.summary }}</p>
<p>{{ .CommonAnnotations.description }}</p>
<p>
<a href='{{ (index .Alerts 0).GeneratorURL }}' target='_blank' rel='noopener'>Open in Prometheus</a>
</p>이메일 트리거용 Echobell 템플릿에서는 Echobell이 자동으로 제공하는 subject, text, html 같은 변수를 사용할 수 있습니다.
알림 규칙 예시 만들기
전체 흐름을 테스트해 볼 수 있는 간단한 규칙 예시입니다.
groups:
- name: example
rules:
- alert: HighCPU
expr: avg(rate(process_cpu_seconds_total[5m])) > 0.8
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage"
description: "CPU has been over 80% for 2 minutes"이 알림이 실행되면 Alertmanager가 설정된 리시버로 이벤트를 보내고, Echobell이 해당 채널의 구독자에게 알림을 전달합니다.
연동 테스트하기
- 임계값을 일시적으로 낮추거나 금방 실행되는 테스트 알림을 만듭니다
- 알림이 실행될 때 Echobell 알림이 도착하는지 확인합니다
- 링크 템플릿을 사용한다면 기록을 열고 링크를 눌러 봅니다
- 알림을 해제한 뒤 해제 알림이 도착하는지 확인합니다(활성화한 경우)
알림 유형 선택하기
- 긴급: 심각한 운영 환경 장애, 즉시 호출이 필요한 인시던트
- 전화: 잠을 깨우거나 집중 모드를 반드시 뚫어야 하는 중대한 장애
- 일반: 일상적인 알림, 경고, 참고용 공지
모범 사례
- 템플릿은 간결하면서도 필요한 정보를 담으세요(알림 이름, 심각도, 인스턴스, 요약)
- 링크 템플릿을 사용해 관련 그래프나 대시보드로 바로 이동하세요
- Alertmanager에서 알림을 그룹화하고 라우팅해 불필요한 소음과 알림 피로를 줄이세요
- severity 레이블을 포함하고, 긴급도에 맞는 Echobell 알림 유형을 사용하세요
- Echobell Webhook URL은 비밀 정보처럼 보호하고, 노출되었다면 교체하세요
문제 해결
Echobell에 알림이 도착하지 않는다면:
- Webhook URL이나 채널 이메일 주소가 올바른지 확인하세요
- Echobell 채널이 활성 상태이고 구독자가 있는지 확인하세요
- Alertmanager 로그에 전송 오류가 없는지 확인하세요
- alertmanager.yml의 라우트가 실제로 의도한 리시버를 가리키는지 확인하세요
- 간단한 일회성 알림 규칙으로 테스트해 보세요
- 이메일을 사용한다면 SMTP 설정이 정상 작동하고 메일이 전달되는지 확인하세요
개인정보 보호와 데이터 처리
Echobell은 개인정보 보호를 최우선으로 합니다:
- 알림 내용은 사용자의 기기에만 남습니다
- 서버에는 최소한의 설정 데이터만 저장됩니다
- Webhook URL과 채널 이메일 주소는 비밀 정보로 취급해야 합니다
- Echobell은 알림 페이로드를 서버에 보관하지 않습니다