PMM alertmanager 로 알람받기
지난 글에서 MySQL 에서 생기는 일들을 모니터링 하는 PMM 구축 방법에 대해 소개해드렸습니다.
https://kimdubi.github.io/mysql/mysql_pmm/
그러나 모니터링 서버가 있어도 바로 이슈를 전달 받지 못하면 아무 소용이 없겠죠?
그래서 이번 글에서는 alertmanager 를 통해서 PMM에서 감지 된 이슈들을 sms으로 받는 방법에 대해 소개해드리겠습니다.
alertmanager 란?
prometheus 를 통해 수집된 metric에서 사전에 설정해둔 alert rule 에 해당하는
이벤트가 발생하면 alertmanager 에게 알림이 가고
alertmanager는 이 알람을 email,slack, web-hook 등 다양한 방법으로 전달하는 역할을 합니다.
사실 dashboard 역할을 하는 grafana도 4.x 버전대 부터는 이 알람기능이 추가 되었는데요
UI상에서 정말 쉽게 알람 설정을 할 수 있다는 장점이 있지만
host 마다, metric 마다 일일이 설정해야 한다는 단점이 있어 모니터링 해야하는 대상이 많을 땐 역시 alertmanager 가 더 좋은 것 같습니다.
alertmanager 설정
prometheus, grafana 설치한 서버에 설치했음
alertmanager 다운로드
wget [https://github.com/prometheus/alertmanager/releases/download/v0.5.1/alertmanager-0.5.1.linux-amd64.tar.gz](https://github.com/prometheus/alertmanager/releases/download/v0.5.1/alertmanager-0.5.1.linux-amd64.tar.gz) &
- prometheus.yml 설정
global:
scrape_interval: 1m
scrape_timeout : 1s
### 기존 설정에 아래 rule_files 위치 설정 추가
rule_files:
- /engn001/alertmanager/alert.rules
scrape_configs:
- job_name: linux
static_configs:
- targets: ['172.17.0.3:9100']
.
.
.
- alertmanager.yaml
$ vi /engn001/alertmanager-0.5.1.linux-amd64/alertmanager.yaml
global:
slack_api_url: 'https://hooks.slack.com/services/xxxxxxxx'
route:
receiver: 'slack id'
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
routes:
- receiver: 'slack id'
group_wait: 10s
match_re:
service: mysql
receivers:
- name: 'slack id'
slack_configs:
- channel: '#slack channel'
=> smtp , web-hook을 통한 slack, 핸드폰 문자 등 여러 방법으로 이벤트를 받아볼 수 있으나
smtp 메일은 거의 확인을 안할테고..
핸드폰 문자는 webhook 서버를 따로 구축하고 sms 서비스를 이용하는 등 손이 많이 가서
간단한 slack webhook을 사용해봤습니다.
alertmanager 설정은 아래 링크 참고!!
https://prometheus.io/docs/alerting/configuration/
alert rule 설정
$ vi /engn001/alertmanager-0.5.1.linux-amd64/alert.rules
ALERT LinuxMemory
IF (round(((node_memory_MemTotal - (node_memory_MemFree + node_memory_Buffers + node_memory_Cached)) / node_memory_MemTotal) * 100) > 90 ) and (node_memory_MemFree + node_memory_Buffers + node_memory_Cached < 1073741824)
FOR 1m
ANNOTATIONS {summary="Linux Memory Usage is at {{$value}}%"}
.
.
.
ALERT MySQLRestarted
IF mysql_global_status_uptime < 300
FOR 1m
LABELS {severity="warning"}
ANNOTATIONS {summary="MySQL DB Server has been Restarted!!"}
=> 알람 받을 이벤트에 대한 rule 설정하는 부분
prometheus 수집 데이터들만 가능하며 alertmanager, prometheus 버전에 따라 alert rule 설정 방법이 다를 수 있음
alert rule 예제는 아래 참고!!
https://awesome-prometheus-alerts.grep.to/rules
alertmanager, prometheus 기동
/engn001/prometheus/prometheus -config.file=/engn001/prometheus/prometheus.yml -alertmanager.url=http://localhost:9093 &
/engn001/alertmanager/alertmanager -config.file=/engn001/alertmanager/alertmanager.yaml &
alertmanager 동작 확인
MySQL restarted 이벤트 발생
alertmanager 감지 후 알람 발송
slack에서 알람 수신 => alertmanager 감지 후 알람 발송
=> slack 으로 알람 받음