在Prometheus的報警系統中,是分為2個部分的, 規則是配置是在prometheus中的, prometheus組件完成報警推送給alertmanager的, alertmanager然后管理這些報警信息,包括靜默、抑制、聚合和通過電子郵件、on-call通知系統和聊天平台等方法發送通知。
主要步驟如下
- 安裝和部署alertmanager
- 在prometheus中配置alertmanager的地址信息。
- 在prometheus中設置報警規則
- 在alertmanager配置接受者信息等
安裝和部署alertmanager
整體來說,prometheus的所有套件都是比較簡單的,這里提供一個簡單部署方式。
# 進入下載目錄
[root@node00 ~]# cd /usr/src/
# 下載alertmanager
[root@node00 src]# wget https://github.com/prometheus/alertmanager/releases/download/v0.19.0/alertmanager-0.19.0.linux-amd64.tar.gz
# 解壓
[root@node00 src]# tar xf alertmanager-0.19.0.linux-amd64.tar.gz [root@node00 src]# ll total 126440 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 -rw-r--r-- 1 root root 24201990 Sep 3 11:39 alertmanager-0.19.0.linux-amd64.tar.gz -rw-r--r-- 1 root root 6930 Sep 25 04:33 a.txt -rw-r--r-- 1 root root 39965581 Sep 24 20:53 consul_1.6.1_linux_amd64.zip -rw-r--r-- 1 root root 4077560 Sep 10 20:20 consul-template_0.22.0_linux_amd64.tgz drwxr-xr-x. 2 root root 6 Nov 5 2016 debug drwxr-xr-x. 2 root root 6 Nov 5 2016 kernels -rw-r--r-- 1 root root 8083296 Sep 20 21:08 node_exporter-0.18.1.linux-amd64.tar.gz -rw-r--r-- 1 root root 53127635 Sep 20 05:05 prometheus-2.12.0.linux-amd64.tar.gz
# 部署到特定位置 [root@node00 src]# mv alertmanager-0.19.0.linux-amd64 /usr/local/prometheus/ [root@node00 src]# cd /usr/local/prometheus/ # 查看目錄情況 [root@node00 prometheus]# ll total 4 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 lrwxrwxrwx 1 prometheus prometheus 29 Sep 20 05:06 prometheus -> prometheus-2.12.0.linux-amd64 drwxr-xr-x 6 prometheus prometheus 4096 Sep 26 06:01 prometheus-2.12.0.linux-amd64
# 創建軟連接 [root@node00 prometheus]# ln -s alertmanager-0.19.0.linux-amd64 alertmanager
# 確認軟連接 [root@node00 prometheus]# ll total 4 lrwxrwxrwx 1 root root 31 Sep 27 03:12 alertmanager -> alertmanager-0.19.0.linux-amd64 drwxr-xr-x 2 3434 3434 93 Sep 3 11:39 alertmanager-0.19.0.linux-amd64 lrwxrwxrwx 1 prometheus prometheus 29 Sep 20 05:06 prometheus -> prometheus-2.12.0.linux-amd64 drwxr-xr-x 6 prometheus prometheus 4096 Sep 26 06:01 prometheus-2.12.0.linux-amd64 # 准備開機自啟配置文件 [root@node00 alertmanager]# cd /usr/lib/systemd/system/ [root@node00 system]# cat alertmanager.service [Unit] Description=alertmanager After=network.target [Service] User=prometheus Group=prometheus WorkingDirectory=/usr/local/prometheus/alertmanager ExecStart=/usr/local/prometheus/alertmanager/alertmanager --log.level=debug --log.format=json
# ExecStart=/usr/local/prometheus/alertmanager/alertmanager
[Install] WantedBy=multi-user.target
# 修改權限
[root@node00 alertmanager]# chown prometheus:prometheus /usr/local/prometheus/alertmanager -R
# 啟動 [root@node00 alertmanager]# systemctl restart alertmanager
# 查看狀態 [root@node00 alertmanager]# systemctl status alertmanager
# 開機自啟 [root@node00 system]# systemctl enable alertmanager
在prometheus集成alertmanager
部署完畢alertmanager, 需要告知prometheus告警信息推送的位置, 通過如下配置即可完成。相對比較簡單。
# /usr/local/prometheus/prometheus/prometheus.yml # 修改此文件中的alerting的配置如下配置 alerting: alertmanagers: - static_configs: - targets: - 192.168.100.10:9093
配置完畢后重啟prometheus服務。
創建報警規則
為了能先走通流程,這里的報警規則先弄一個簡單一點的。
[root@node00 prometheus]# vim prometheus.yml rule_files: - "rules/*rules.yml" # - "second_rules.yml" [root@node00 prometheus]# mkdir rules [root@node00 prometheus]# cat rules/node_rules.yml groups: - name: node-alert rules: - alert: disk-full expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) for: 1m labels: serverity: page annotations: summary: "{{ $labels.instance }} disk full " description: "{{ $labels.instance }} disk > {{ $value }} "
重啟prometheus服務,可以在web界面看到如下信息。
查看當前是否有報警信息
目前看是沒有磁盤滿的, 我們這里配合下觸發這個報警規則,
# 注意這個是在節點01上面執行的 [root@node01 ~]# df -h |grep "/$" /dev/mapper/centos-root 50G 1.5G 49G 3% / # 手工生成一個大文件 [root@node01 ~]# dd if=/dev/zero of=bigfile bs=1M count=40000 40000+0 records in 40000+0 records out 41943040000 bytes (42 GB) copied, 18.8162 s, 2.2 GB/s # 節點上面確認磁盤是超過我們之前的報警設置值了 [root@node01 ~]# df -h |grep "/$" /dev/mapper/centos-root 50G 41G 9.6G 81% /
等1分鍾后在此查看alert信息,如下。
配置消息接收
上面的消息信息已經從prometheus推送給alertmanager了, 我們已經可以在alertmanager的web管理界面看到對應的報警信息,但是我們還沒有配置如何讓alertmanager把這些信息推送我們的社交軟件上面去。
由於郵件系統大家用的比較多,這里就是用qq郵箱進行后續試驗。
[root@node00 alertmanager]# cat alertmanager.yml global: resolve_timeout: 5m ################################### smtp_auth_username: "1072892917@qq.com" smtp_auth_password: "這是你的QQ郵箱授權碼而不是密碼,切記切記,具體授權碼獲取看后面的本文末尾介紹有" #smtp_auth_secret: "" smtp_require_tls: false smtp_smarthost: "smtp.qq.com:465" smtp_from: "1072892917@qq.com" #################################### route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'email-zhaojiedi' receivers: - name: 'email-zhaojiedi' email_configs: - send_resolved: true to: 1072892917@qq.com inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
配置完畢alertmanager重啟alertmanager,可以收到如下郵件信息。
測試郵件發送
使用如下命令觸發報警
[root@node01 ~]# dd if=/dev/zero of=bigfile bs=1M count=40000
注意: 如果調試過程中有問題, 請查看/var/log/message信息,獲取alertmanager發送郵件的錯誤信息。
測試報警恢復通知
使用如下命令清理文件
[root@node01 ~]# >bigfile
可以收到如下郵件:
我在調試過程中常用錯誤
問題1:
does not advertise the STARTTLS extension:
解決方案:
smtp_require_tls: false即可。
問題2:
email.loginAuth auth: 535 Error
解決方案:
smtp_auth_password: 這個配置項設置為授權碼,而不是QQ郵箱登陸,詳細獲取授權碼參考地址: https://zhidao.baidu.com/question/878811848141402332.html
問題3:
一切配置正確,就是發不出去。
解決方案:
查看是否使用了25端口,默認雲廠商會禁用25端口, 可以向雲廠商申請解封25端口,或者使用465端口。
問題4:
報警消息能發送,但是報警恢復消息收不到。
解決方案:
缺少 send_resolved: true 配置文件, 請確保對應email_config配置文件,有此屬性。
其他
如果配置中有問題,可以給我留言。