環境準備:
| 主機名稱 | IP | 安裝組件 |
| Prometheus | 192.168.1.1 | NodeEXporter、cAdvisor、Prometheus Server、Grafana |
| node1 | 192.168.1.2 | NodeEXporter、cAdvisor |
| node2 | 192.168.1.4 | NodeEXporter、cAdvisor |
注意事項:
全部關閉防火墻,禁用selinux,
需要部署的組件:
Prometheus Server: 普羅米修斯的主服務器,
NodeEXporter: 負責收集Host硬體資訊和作業系統資訊,
cAdvisor: 負責收集Host上運行的容器資訊,
Grafana: 負責展示普羅米修斯監控界面,
1、3個節點,全部部署node-EXporter,和cAdvisor.
//部署node-EXporter,收集硬體和系統資訊,
docker run -d -p 9100:9100 --name exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
效果圖:http://192.168.1.1:9100/ http://192.168.1.2:9100/ http://192.168.1.4:9100/

PS:注意,這里使用了--net=host不等于host網路,作用是Prometheus Server可以直接與Node-EXporter通信,
//部署安裝cAdvisor,收集節點容器資訊,
docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor訪問測驗:http://IP:8080/
2、在Prometheus上部署Prometheus Server服務,
在部署prometheus之前,我們需要對它的組態檔進行修改,所以我們先運行一個容器,先將其組態檔拷貝出來,
#運行普羅米修斯容器 [root@Prometheus ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus WARNING: Published ports are discarded when using host network mode 0015d42a6f0348ff5ba6c0dd7e51cf9bac8656be346b6f433293754002012e8c #copy組態檔到宿主機 [root@Prometheus ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./
#修改宿主機copy的組態檔
[root@Prometheus ~]# vim prometheus.yml
static_configs:
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.5:8080','192.168.1.5:9100','192.168.1.6:8080','192.168.1.6:9100']
PS: 這里指定了prometheus的監控項,包括它也會監控自己收集到的資料,
//重新運行prometheus容器,并且掛載修改的yml檔案
[root@Prometheus ~]# docker rm -f prometheus prometheus [root@Prometheus ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus WARNING: Published ports are discarded when using host network mode 2857c1a73e934ad117f0bb6be59c3cec6efe701b776df59df8f54248bcd539d2
#測驗訪問:IP:9090
三、在prometheus主機上,部署grafana服務,用來展示prometheus收集到的資料,
[root@Prometheus ~]# mkdir grafana-storage [root@Prometheus ~]# chmod 777 -R grafana-storage/ [root@Prometheus ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana b95a4c30105ed9a0b8448da49efd4e11e4505f04e2f7a4b454f0e9910bbc4e48 #上述命令中的“-e”選項是為了設定默認的登錄用戶admin,密碼為“123.com”, #如果啟動容器的程序中,提示iptables等相關的錯誤資訊, #則需要執行命令systemctl restart docker,重啟docker服務,然后重新運行容器 #但是需要注意,若運行容器時沒有增加“--restart=always”選項的話, #那么在重啟docker服務后,還需將所有容器手動重啟, #重啟所有容器命令“docker ps -a -q | xargs docker start”
#訪問測驗:IP:3000

//設定Grafana,添加資料來源(prometheus)



PS:看到這個提示,說明prometheus和grafana服務的是正常連接的,此時,雖然grafana收集到了資料,但怎么顯示它,仍然是個問題,grafana支持自定義顯示資訊,不過要自定義起來非常麻煩,不過好在,grafana官方為我們提供了一些模板,來供我們使用,
https://grafana.com/grafana/dashboards

匯入模板用兩種方法:JSON、id!
JSON如下:




效果圖:

四、配置AlertManager
接下來,我們需要啟動 AlertManager 來接受 Prometheus 發送過來的報警資訊,并執行各種方式的告警,同樣以 Docker 方式啟動AlertManager,最簡單的啟動命令如下
#運行報警郵件管理容器 [root@Prometheus ~]# docker run --name alertmanager -d -p9093:9093 prom/alertmanager:latest #copy組態檔 [root@Prometheus ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml . #講原來的yml改名稱,修改剛copy的組態檔 [root@Prometheus ~]# cp alertmanager.yml alertmanager.ymlbak
這里 AlertManager 默認啟動的埠為 9093,啟動完成后,瀏覽器訪問http://:9093 可以看到默認提供的 UI 頁面,不過現在是沒有任何告警資訊的,因為我們還沒有配置報警規則來觸發報警,
AlertManager 配置郵件告警
AlertManager 默認組態檔為 alertmanager.yml,在容器內路徑為/etc/alertmanager/alertmanager.ymldocker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/
簡單介紹一下主要配置的作用:那么,我們就來配置一下使用 Email 方式通知報警資訊,這里以 QQ 郵箱為例,當然在配置QQ郵箱之前,需要我們登錄QQ郵箱,打開SMTP服務,并獲取授權碼,
- global: 全域配置,包括報警解決后的超時時間、SMTP 相關配置、各種渠道通知的 API 地址等等
- route: 用來設定報警的分發策略,它是一個樹狀結構,按照深度優先從左向右的順序進行匹配,
- receivers: 配置告警訊息接受者資訊,例如常用的 email、wechat、slack、webhook 等訊息通知方式,
- inhibit_rules: 抑制規則配置,當存在與另一組匹配的警報(源)時,抑制規則將禁用與一組匹配的警報(目標),
#寫入自己的QQ郵箱與效驗碼 [root@Prometheus ~]# vim /root/alertmanager.yml global: resolve_timeout: 5m smtp_from: '[email protected]' smtp_smarthost: 'smtp.qq.com:465' smtp_auth_username: '[email protected]' smtp_auth_password: 'rxtfqkwfafoidcea' smtp_require_tls: false smtp_hello: 'qq.com' route: group_by: ['alertname'] group_wait: 5s group_interval: 5s repeat_interval: 5m receiver: 'email' receivers: - name: 'email' email_configs: - to: '[email protected]' send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
#重新運行 [root@Prometheus ~]# docker rm -f alertmanager alertmanager [root@Prometheus ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager 8c56092d9ef2946f88c10e2e648e62df33bbbc2ac8d9cd503c8700e4445686a0
//訪問查看

五、Prometheus 配置 AlertManager 告警規則
接下來,我們需要在 Prometheus 配置 AlertManager 服務地址以及告警規則,新建報警規則檔案 node-up.rules 如下
[root@Prometheus ~]# mkdir -p prometheus/rules
[root@Prometheus ~]# cd prometheus/rules/
[root@Prometheus rules]# vim node-up.rules
[root@Prometheus rules]# cat node-up.rules
groups:
- name: node-up
rules:
- alert: node-up
expr: up{job="prometheus"} == 0
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止運行超過 15s!"
然后,修改 prometheus.yml 組態檔,添加 rules 規則檔案
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.1:9093
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/usr/local/prometheus/rules/*.rules"
# - "first_rules.yml"
# - "second_rules.yml"

[root@Prometheus rules]# docker rm -f prometheus [root@Prometheus rules]# docker run -d -p 9090:9090 -v/root/prometheus.yml:/etc/prometheus/prometheus.yml -v/root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
此時在prometheus主頁上可以看到相應規則

觸發報警發送 Email
然后開始模擬node1節點 exporter組件失敗
[root@node1 ~]# docker stop exporter exporter

切換到QQ郵箱

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264109.html
標籤:其他
上一篇:「SOL」重建計劃(BZOJ)

