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 으로 알람 받음