1. Prometheus의 Alertmanager 플러그인 설치
# alertmanager 설치 파일 다운로드
# cd ~/Downloads
# wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
# tar -xzvf alertmanager-0.25.0.linux-amd64.tar.gz
# rm -rf alertmanager-0.25.0.linux-amd64.tar.gz
# alertmanager 유저 추가
# useradd --no-create-home --shell /bin/false alertmanager
# alertmanager의 디렉토리를 opt 하위로 이동 및 관리 편의를 위한 logs, conf, bin, data 디렉토리 생성
# mv ~/Downloads/alertmanager-0.25.0.linux-amd64 /opt/alertmanager
# mkdir /opt/alertmanager/logs /opt/alertmanager/conf /opt/alertmanager/bin /opt/alertmanager/data
# mv /opt/alertmanager/alertmanager.yml /opt/alertmanager/conf
# mv /opt/alertmanager/alertmanager /opt/alertmanager/bin/
# mv /opt/alertmanager/amtool /opt/alertmanager/bin/
# alertmanager HOME 디렉토리 권한 부여
# chown -R alertmanager:alertmanager /opt/alertmanager
# vi /etc/sysconfig/alertmanager 로 'alertmanager' 환경변수 위한 파일 생성
# /etc/sysconfig/alertmanager 파일
ALERTMANAGER_USER=alertmanager
ALERTMANAGER_GROUP=alertmanager
ALERTMANAGER_HOME=/opt/alertmanager
LOG_DIR=/opt/alertmanager/logs
DATA_DIR=/opt/alertmanager/data
CONF_DIR=/opt/alertmanager/conf
CONF_FILE=/opt/alertmanager/conf/alertmanager.yml
# Only used on systemd systems
PID_FILE_DIR=/var/run/alertmanager
# alertmanager service 등록
# vi /usr/lib/systemd/system/alertmanager.service 로 'alertmanager.service' 파일 생성
# alertmanager.service 파일 내용
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target
[Service]
EnvironmentFile=/etc/sysconfig/alertmanager
PIDFile=/var/run/alertmanager.pid
User=alertmanager
Group=alertmanager
Type=simple
Restart=always
WorkingDirectory=/opt/alertmanager
RuntimeDirectory=alertmanager
RuntimeDirectoryMode=0750
ExecStart=/opt/alertmanager/bin/alertmanager \
--config.file=${CONF_FILE} \
--storage.path=${DATA_DIR}/ \
--cluster.listen-address= \
[Install]
WantedBy=multi-user.target
- alertmanager가 정상 설치 되었는지 확인하기 위해 alertmanager 웹 콘솔 접속하기
# alertamanger.service 가동
systemctl start alertmanager.service
alertmanager 서버를 작동시킨 후, {alertamanger 를 설치한 IP}:9093 (Default Port) 로 접속하면, alertmanager 가 정상 설치 및 정상 가동 되었다면 아래와 같은 화면을 볼 수 있다.
- 프로메테우스의 alert 시스템을 설치한 'alertmanager' 로 등록하기
# vi /opt/prometheus/conf/prometheus.yml 로 prometheus.yml 파일 수정
# /opt/prometheus/conf/prometheus.yml 파일의 'alerting:' 부분
alerting:
alertmanagers:
- static_configs:
- targets: ["your_alertmanager_IP:9093"]
# promtool check config <config-files> 로 prometheus.yml 검증하기
# /opt/prometheus/bin/promtool check config /opt/prometheus/conf/prometheus.yml
# 변경된 prometheus.yml 적용하기 위해 프로메테우스 서버 재시작 하기
# systemctl restart prometheus.service
2. 프로메테우스의 rules.yml 설정
# 프로메테우스가 설치되어 있는 경로로 이동
# cd /opt/prometheus
# 'rules' 라는 디렉토리 생성 - rule과 관련된 yml 파일들을 따로 모아두기 위함.
# mkdir rules
# 'rules' 디렉토리가 root 계정으로 생성되었으므로, 권한 부여하기
chown -R prometheus:prometheus /opt/prometheus/
- rules.yml 생성 (여기서는 이름을 'test-rules.yml' 로 지정하겠다.)
# vi /opt/prometheus/rules/test-rules.yml 로 'test-rules.yml' 생성
# /opt/prometheus/rules/test-rules.yml 파일
groups:
- name: custom_rules
rules:
- record: node_memory_MemFree_percent
expr: 100 - (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes)
- record: node_filesystem_free_percent
expr: 100 * node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}
- name: alert_rules
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Instance [{{ $labels.instance }}] down"
description: "[{{ $labels.instance }}] of job [{{ $labels.job }}] has been down for more than 1 minute."
- alert: DiskSpaceFree10Percent
expr: node_filesystem_free_percent <= 10
labels:
severity: warning
annotations:
summary: "Instance [{{ $labels.instance }}] has 10% or less Free disk space"
description: "[{{ $labels.instance }}] has only {{ $value }}% or less free."
- 생성한 rule 파일을 prometheus 에 인식시키기.
rule 파일의 syntax error 등이 없는 지, 다음 명령어를 통해 확인한다.
# 생성한 rule 파일에 prometheus로 소유권 변경
chown prometheus:prometheus /opt/prometheus/rules/test-rules.yml
# 프로메테우스 설치 경로의 'promtool' 명령어 통해 확인
# promtoll check rules { rule.yml의 경로 }
# /opt/prometheus/bin/promtool check rules /opt/prometheus/rules/test-rules.yml
# vi /opt/prometheus/conf/prometheus.yml 수행하여 아래 문구 추가
# /opt/prometheus/conf/prometheus.yml 파일
rule_files:
- "/opt/prometheus/rules/test-rules.yml"
# prometheus.yml 변경사항 적용 위한 프로메테우스 재시작
# systemctl restart prometheus.service
- prometheus 서버에 rules가 적용되었는지 확인하기
3. alertmanager.yml 설정
- alertmanager.yml 파일 내용 작성
# /opt/alertmanager/conf/alertmanager.yml 파일
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'Receiver Name'
receivers:
- name: 'Receiver Name'
email_configs:
- to: 'your-email@yourdomain.com'
from: 'Prometheus_Alert@yourdomain.com'
smarthost: 'your_smtp_server_IP:your_smtp_port'
auth_username: 'your_smtp_auth_username'
auth_password: 'your_smtp_auth_password'
require_tls: false # 디폴트가 true인데, 테스트하려는 smtp 서버가 tls 인증을 지원하지 않는 경우, false로 지정해야 메일이 성공적으로 발송된다.
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
global : Alertmanager 전반에 적용되는 설정
- resolve_timeout : alert이 EndsAt(해당 사안 종료 시각)을 명시하지 않을 경우, 이 옵션으로 설정해놓은 시간이 지나면, alert을 Alertmanager에서 Resolve 처리하게 된다. 기본값은 5m
- smtp_* : Alertmanager가 이메일 알림을 보낼 때 사용하는 SMTP 서버와 인증 정보를 global로도 박을 수 있다. receiver의 대상 메일 서버가 하나인 경우 주로 global로 박아서 사용하게 될 것이다.
구체적인 내용은 '참고'의 프로메테우스 공식 문서 참고. - slack_* : Alertmanager가 Slack 메시지를 보낼 때 사용하는 webhook URL과 인증 토큰을 설정.
구체적인 내용은 '참고'의 프로메테우스 공식 문서 참고. - pagerduty_* : Alertmanager가 PagerDuty 알림을 보낼 때 사용하는 인증 토큰을 설정.
구체적인 내용은 '참고'의 프로메테우스 공식 문서 참고.
route : alert 라우팅 규칙을 정의
- receiver : alert을 수신하는 대상을 지정. 여러 대상 지정 가능
- group_by : alert을 그룹화하는 기준을 설정. alert이 발생한 대상에 대한 label 등을 기준으로 그룹화 하는 설정
- group_wait : alert 그룹에 대한 notification 을 다시 보내기 전, 얼마나 기다려야 하는지를 설정. 기본값은 30s
만약 이 시간 내에 [group_by] 의 동일한 label을 가진 다른 alert이 발생한다면, 해당 그룹에 추가하고, 다시 또 다른 alert 오는지 대기했다가, 없을 경우에 지금까지 온 해당 그룹의 모든 alert 을 notify 한다. - group_interval : 아직 resolved 되지 않은 alert에 대해 반복 알림(notification)을 보내기 전, 대기하는 시간을 설정.
기본값은 5m - repeat_interval : 반복적으로 알림을 보내는 경우, 알림을 보내는 간격을 설정. 기본값은 3h
receivers : 알림(notification)을 수신하는 대상의 정보를 정의
- email_configs : 이메일로 알림을 보내는 경우 사용되는 SMTP 서버 및 수신자 정보를 설정
- webhook_configs : 웹훅을 사용하여 알림을 보내는 경우, 웹훅 End point 와 인증 정보를 설정
- pagerduty_configs : PagerDuty 알림을 수신하는 경우, 서비스와 인증 토큰을 설정
- slack_configs : Slack 메시지를 수신하는 경우, 웹훅 URL과 인증 토큰을 설정
inhibit_rules: source_match 에서 지정한 label에 해당하는 label을 가진 alert이 이미 있다면, target_match 에서 지정한 label에 해당하는 label을 가진 alert에 대한 notification 은 하지 않도록 지정하는 설정
- source_match : 이 단락에 명시된 조건을 충족하면, inhibit_rule 을 적용하게 된다. 따라서 이 단락에 명시된 조건에 해당하는 alert만 notify 한다.
- target_match : 이 단락에 명시된 조건의 alert은 notify 되지 않는다.
- equal : 동일한 alert을 평가하는 기준으로, 위 예시에서는 alert의 이름과 해당 alert이 발생한 instance가 동일하다면, 동일한 alert으로 보고, severity 가 warning인 alert은 무시하고, severity가 critical 인 alert만 notify 하게 된다.
- alertmanager.yml 파일 검증
작성한 alertmanager.yml 파일의 syntax error 등은 없는지 확인한다.
# amtool check-config {alertmanager.yml의 경로}
# /opt/alertmanager/bin/amtool check-config /opt/alertmanager/conf/alertmanager.yml
# alertmanager.yml 적용시키기 위해 alertmanager 재시작하기
# systemctl restart alertmanager.service
- alertmanager.yml 파일 적용이 되었는지 프로메테우스 콘솔 창에서 확인
참고
https://prometheus.io/docs/alerting/latest/alertmanager/
https://godekdls.github.io/Prometheus/alerting.configuration/
https://medium.com/techno101/how-to-send-a-mail-using-prometheus-alertmanager-7e880a3676db
https://awesome-prometheus-alerts.grep.to/rules.html#windows-server
-> Alert rules 작성 예시 참고하기 좋은 사이트!
'Observability' 카테고리의 다른 글
[Prometheus] node_exporter와 Windows_exporter 에 적용시키는 샘플 rules.yml (0) | 2023.03.31 |
---|---|
[Prometheus] Node Exporter 를 CentOS 7 서버에 설치하기 (0) | 2023.03.16 |
[Grafana] CentOS 7 에서 Grafana(Prometheus 데이터를 시각화해주는 서버) 설치하고 프로메테우스와 연동하기 (0) | 2023.03.16 |
[Prometheus] CentOS 7 에서 프로메테우스(Prometheus) 설치 및 기본 설정, 실행 (0) | 2023.03.14 |
최근댓글