目錄
前言
Alertmanager 用於發送告警, 是真正發送信息給用戶的模塊。
Alertmanager 會接受Prometheus發送過來的警告信息,再由Alertmanager來發送。
- Grouping—分組
防止告警風暴,達到告警收斂目的
設置時間段,對接收到的同類告警只發送一條
系統出問題同類告警只發送一條
配置文件配置
- Inhibition—抑制
防止告警風暴,達到告警收斂目的
同一時間內,對准備發送的告警事件的相關性,決定只發送一條
若A發送C不可達已經准備發送時,可配置其他關於C不可達事件不發送
配置文件配置
- Silences—沉默
臨時屏蔽,設置某個時間段內某類告警不發送
web界面配置
- Client behavior—客戶端
POST方法,兩個接口v1、v2
[{
"labels": {
"alertname": "<requiredAlertName>",
"<labelname>": "<labelvalue>",
...
},
"annotations": {
"<labelname>": "<labelvalue>",
},
"startsAt": "<rfc3339>",
"endsAt": "<rfc3339>",
"generatorURL": "<generator_url>"
},
...
]
關鍵key說明
labels:代表一個告警事件,用去去重
annotations:不代表一條告警,用於完善告警詳情
startAt:默認是接收告警事件的當前時間
endsAt:默認設置為可配置的超時時間,告警事件解決的時間
generatorURL:代表發送告警事件的客戶端
源碼安裝
[root@es2 ~]# tar xf alertmanager-0.19.0.linux-amd64.tar.gz
[root@es2 ~]# mv alertmanager-0.19.0.linux-amd64 /opt/alertmanager-0.19
[root@es2 ~]# cd /opt/alertmanager-0.19/
[root@es2 alertmanager-0.19]# mkdir bin config data logs
[root@es2 alertmanager-0.19]# mv alertmanager amtool bin/
[root@es2 alertmanager-0.19]# mv alertmanager.yml config/
[root@es2 alertmanager-0.19]# cp config/alertmanager.yml config/alertmanager.yml.default
配置
修改 /opt/alertmanager-0.19/config/alertmanager.yml
[root@es2 config]# cat alertmanager.yml
global:
smtp_smarthost: 'smtp.exmail.qq.com:25' # smtp地址
smtp_from: 'sijy@jubaozhu.com' # 誰發郵件
smtp_auth_username: 'sijy@jubaozhu.com' # 郵箱用戶
smtp_auth_password: 'xxxxx' # 郵箱密碼
smtp_require_tls: false
route:
group_by: ["instance"] # 分組名
group_wait: 30s # 當收到告警的時候,等待三十秒看是否還有告警,如果有就一起發出去
group_interval: 5m # 發送警告間隔時間
repeat_interval: 3h # 重復報警的間隔時間
receiver: mail # 全局報警組,這個參數是必選的,和下面報警組名要相同
receivers:
- name: 'mail' # 報警組名
email_configs:
- to: 'sijiayong000@163.com' # 發送給誰
啟動
nohup /opt/alertmanager-0.19/bin/alertmanager --log.level=info --log.format=json --web.listen-address="10.0.20.12:9093" --config.file="/opt/alertmanager-0.19/config/alertmanager.yml" --storage.path="/opt/alertmanager-0.19/data/" --data.retention=120h &>>/opt/alertmanager-0.19/logs/alertmanager.log &
--log.level
日志級別--log.format
日志輸出格式--web.listen-addres
監聽地址端口--config.file
配置配置文件--storage.path
配置數據保存目錄--data.retention
配置數據保留時間
啟動后即可訪問頁面
配置prometheus監控Alertmanager
因為后面會部署alertmanager集群,所以這里使用SRV解析的自動發現
修改prometheus配置
[root@es01 config]# cat prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- dns_sd_configs: # 同樣配置DNS自動發現
- names: ["_alertmanager._tcp_k8s.com."] # 加入SRV解析的自動發現
rule_files:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_srv'
metrics_path: "/metrics"
dns_sd_configs:
- names: ['_prometheus._tcp.k8s.com']
- job_name: 'alertmanager'
metrics_path: "/metrics"
dns_sd_configs:
- names: ['_alertmanager._tcp.k8s.com']
上面配置好后,在DNS上做好對應的SRV解析接口。
重新加載配置文件
檢查配置文件,並重新加載
# 檢查配置文件
[root@es01 config]# /opt/prometheus-2.14/bin/promtool check config /opt/prometheus-2.14/config/prometheus.yml
Checking /opt/prometheus-2.14/config/prometheus.yml
SUCCESS: 0 rule files found
# 重新加載配置文件
[root@es01 config]# curl -X POST httP://10.0.20.11:9090/-/reload
[root@es01 config]#
配置測試告警
修改prometheus配置
定義報警規則,把這些規則寫入到 rule_files:
配置下面
[root@es01 config]# cat prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- dns_sd_configs:
- names: ["_alertmanager._tcp.k8s.com"]
rule_files:
- "rules/node_alerts.yml" # 這里支持通配符,如 *.yml
- "rules/node_rules.yml" # 這個同樣也是,表示自定義永久固定查詢值
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_srv'
metrics_path: "/metrics"
dns_sd_configs:
- names: ['_prometheus._tcp.k8s.com']
- job_name: 'alertmanager'
metrics_path: "/metrics"
dns_sd_configs:
- names: ['_alertmanager._tcp.k8s.com']
然后創建對應的目錄和具體規則文件
[root@es01 config]# mkdir rules
[root@es01 config]# cat rules/node_alerts.yml
groups:
- name: node_alerts # 規則名稱
rules:
- alert: HighNodeCPU # 告警名稱
expr: instance:node_cpu:avg_rate5m > 4 # 告警條件
for: 1m # 查詢時間間隔
labels:
severity: warning # 告警級別
annotations: # 注釋
summary: High Node CPU for 1 hour # 發送告警的內容
console: Thank you Test
# 下面的和上面的都類似
- name: disk_alerts
rules:
- alert: DiskWillFillin4Hours
expr: predict_linear(node_filesystem_free_bytes[1h], 4*3600) < 0
for: 5m
labels:
severity: critical
annotations:
summmary: Disk on {{ $labels.instance }} will fill in approximately 4 hours.
- name: node_instance
rules:
- alert: InstanceDown
expr: up{job=~"node.*"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!
[root@es01 config]# cat rules/node_rules.yml
groups:
- name: node_rules # 規則名稱
interval: 10s # 查詢間隔
rules:
- record: instance:node_cpu:avg_rate5m # 查詢名稱,此名稱在prometheus中可直接查詢
expr: 100 - avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100 # 查詢語句
labels:
metric_type: aggragation # 增加的標簽,通過此規則查出來的metric值,會增加這個標簽
- record: instance:node_memory_usage:percentage
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
重新加載配置文件
檢查配置文件,並重新加載
# 檢查配置文件
[root@es01 config]# /opt/prometheus-2.14/bin/promtool check config /opt/prometheus-2.14/config/prometheus.yml
Checking /opt/prometheus-2.14/config/prometheus.yml
SUCCESS: 1 rule files found
Checking /opt/prometheus-2.14/config/rules/node_alerts.yml
SUCCESS: 3 rules found
# 重新加載配置文件
[root@es01 config]# curl -X POST httP://10.0.20.11:9090/-/reload
[root@es01 config]#
測試觸發告警
下載CPU壓測軟件下載地址:https://patrickmn.com/projects/cpuburn/
這個軟件能把CPU跑滿,之后prometheus會想Alertmanager發出告警,Alertmanager收到后會發送郵件。
root@es2 ~]# wget https://cdn.pmylund.com/files/tools/cpuburn/linux/cpuburn-1.0-amd64.tar.gz
--2019-11-27 10:44:33-- https://cdn.pmylund.com/files/tools/cpuburn/linux/cpuburn-1.0-amd64.tar.gz
Resolving cdn.pmylund.com (cdn.pmylund.com)... 13.35.50.33, 13.35.50.98, 13.35.50.4, ...
Connecting to cdn.pmylund.com (cdn.pmylund.com)|13.35.50.33|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 414161 (404K) [application/x-gzip]
Saving to: ‘cpuburn-1.0-amd64.tar.gz’
100%[================================================================================================================>] 414,161 372KB/s in 1.1s
2019-11-27 10:44:37 (372 KB/s) - ‘cpuburn-1.0-amd64.tar.gz’ saved [414161/414161]
[root@es2 ~]# tar xf cpuburn-1.0-amd64.tar.gz
[root@es2 ~]# ls
cpuburn cpuburn-1.0-amd64.tar.gz
[root@es2 ~]# cd cpuburn
[root@es2 cpuburn]# ls
cpuburn LICENSE README
[root@es2 cpuburn]# ./cpuburn
Burning 4 CPUs/cores
10 seconds
20 seconds
30 seconds
查看prometheus中alert
然后去alertmanager頁面查看:
當Alertmanager收到此警告后,等待三十秒,當沒有其他警告接入的時候,會把此警告信息通過郵件的形式發出。