Alertmanager + Slack 구축하기
시스템 모니터링 중 발생하는 경보를 Slack 채널로 실시간으로 알림 받기 위해 Prometheus와 Alertmanager를 설정하고 Slack과 통합한다.
개발환경
항목 | 설정 |
Monitoring | - Prometheus (image: prom/prometheus)
- Grafana (image: grafana/grafana)
- Alertmanager (image: prom/alertmanager) |
Prometheus Exporter | - Nginx Exporter (image: nginx/nginx-prometheus-exporter)
- Node Exporter
- MySQL Exporter (image: prom/mysqld-exporter)
- Redis Exporter (image: oliver006/redis_exporter) |
Dash Board | - Nginx 대시보드
- Spring Boot 대시보드 템플릿 (ID: 4701)
- MySQL 대시보드 템플릿 (ID: 7362)
- Redis 대시보드 템플릿 (ID: 763) |
디렉토리 구조 및 파일
/coupon-project/_monitoring/
├── docker-compose.yml
│
├── alertmanager/config/
│ └── alertmanager.yml
│
└── prometheus/config/
├── prometheus.yml
└── alerts.yml
YAML
복사
파일명 | 설명 |
docker-compose.yml | Docker Compose 설정 파일, Prometheus와 Alertmanager 컨테이너를 정의 |
alertmanager.yml | Alertmanager의 설정 파일
Slack과 같은 외부 서비스와의 통합 및 알림 경로를 설정 |
prometheus.yml | Prometheus 설정 파일
Alertmanager와의 연동, 데이터 수집 타겟 설정 및 경고 규칙 파일 연결 설정 |
alerts.yml | Prometheus의 경고 규칙 파일
조건에 따라 알림을 발생시키는 규칙(예: CPU 사용률 초과)을 정의 |
구축
Slack Webhook 생성
0.
채널 먼저 생성
1.
슬랙에서 채널 > tools & settings > Manage apps
2.
webHooks 검색 > Incoming WebHooks > Add to Slack 클릭 한다.
3.
post to Channel 채널을 지정한다. Add Incoming WebHooks integration 버튼을 눌러 슬랙 앱을 설정한 슬랙 채널과 연결한다.
4.
WebHook URL을 확인한다. WebHook URL은 사용자 채널마다 모두 다르게 고유한 값으로 생성된다. Alertmanager 설정에서 웹 후크 URL을 사용하니 복사해둔다.
5.
슬랙 앱에서 실제로 경보를 받을 슬랙 채널인 coupon-alert 채널에 수신 웹후크(incoming-webHook)가 설정됐는지 확인한다.
// 설정 이후에는 Manage > Custom Integrations > Incoming WebHooks 클릭
Configuration 탭 > 연필 클릭 > WebHook URL 확인 가능
Alertmanager 설정
Slack과 Alertmanager를 통합하려면 alertmanager.yml 파일에 Slack Webhook URL과 Slack 채널을 설정해야 한다.
•
alertmanager.yml
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
route:
receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'
slack_configs:
- channel: '#coupon-alert'
send_resolved: true
YAML
복사
항목 | 설명 |
resolve_timeout | 알림이 해결된 후 제거하기까지의 시간 |
global.slack_api_url | Slack Webhook URL.
Slack에서 발급받은 Webhook URL을 입력 |
route.receiver | 알림을 전달받을 수신자 이름 |
receivers.name | Slack 알림 수신자 이름 정의 |
slack_configs.channel | 알림을 보낼 Slack 채널 이름. #을 붙여서 채널 이름을 입력 |
slack_configs.send_resolved | 문제가 해결된 후에도 Slack에 알림을 보낼지 여부를 설정 |
변경 사항
•
YOUR/SLACK/WEBHOOK 부분은 Slack에서 발급받은 Webhook URL
•
#coupon-alert 부분은 알림을 수신할 Slack 채널 이름
Docker-compose 설정
docker-compose.yml에 Alertmanager 컨테이너 설정을 추가한다.
•
docker-compose.yml
alertmanager:
image: prom/alertmanager
container_name: alertmanager
networks:
- coupon-network
volumes:
- ./alertmanager/config:/etc/alertmanager
ports:
- 9093:9093
command:
- '--config.file=/etc/alertmanager/alertmanager.yml'
restart: always
environment:
- TZ=Asia/Seoul
restart: always
YAML
복사
Prometheus 설정
prometheus.yml 파일에 Alertmanager를 정의한다.
•
prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093'
rule_files:
- "alerts.yml"
YAML
복사
항목 | 설명 |
alerting | Prometheus가 알림을 전송할 Alertmanager의 정보를 설정 |
└ alertmanagers | Alertmanager의 대상 정보를 정의 |
└ static_configs | Alertmanager 인스턴스의 고정적인(target) 구성 정보를 지정 |
└ targets | Alertmanager의 네트워크 주소와 포트를 설정 |
rule_files | Prometheus가 로드할 알림 규칙 파일을 정의 |
└ 파일 경로 | 알림 규칙이 정의된 YAML 파일의 경로를 지정 |
AlertRule 설정
특정 조건에서 Alertmanager로 알림을 보낼 수 있도록 알림 규칙 파일을 alerts.yml 작성한다.
•
alerts.yml (예시)
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: node_cpu_seconds_total > 0.8
for: 1m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "The CPU usage has exceeded 80% for the past minute."
YAML
복사
테스트 및 확인
1.
Prometheus 웹 UI > Alerts 메뉴 확인
Prometheus의 Alerts 메뉴에서 작성한 알림 규칙을 확인한다. 예시에서는 example 규칙(HighCPUUsage)이 설정되어 있다.
2.
curl 명령어를 사용해 Alertmanager로 테스트 알림을 전송한다.
curl -XPOST http://localhost:9093/api/v2/alerts -H "Content-Type: application/json" -d '
[
{
"labels": {
"alertname": "TestAlert",
"severity": "warning"
},
"annotations": {
"summary": "This is a test alert",
"description": "Testing the Alertmanager v2 API"
},
"startsAt": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"
}
]'
Bash
복사
필드 | 설명 |
alertname | 알림 이름 |
severity | 심각도: critical, warning, info |
summary | 요약 |
description | 설명 |
3.
Alertmanager 웹 UI에서 전송된 테스트 알림을 확인한다.
이 알림은 설정한 수신자(slack-notifications)에 따라 Slack으로도 전송된다.
4.
설정한 Slack 채널에 테스트 알림(TestAlert)이 표시된다.
알림이 표시 되는데 약간의 지연이 있을 수 있다.
마무리
Slack과 Alertmanager 통합으로 실시간 경보 시스템을 성공적으로 구축하였다. Prometheus에서 알림 조건을 설정하고, 경보를 Slack 채널로 전달하여 운영 환경에서 발생하는 문제를 신속히 대응할 수 있게 되었다. 이로써 모니터링 효율성이 대폭 향상되었다. 이후는 알림 규칙(Alerting Rules) 작성해보자.
Related Posts
Search