三臺docker主機(centos7):
docker01:172.16.1.30
部署服務:Prometheus server,Grafana,Node Exporter,cAdvrisor
docker02:172.16.1.31
部署服務:Node Exporter,cAdvrisor
docker03:172.16.1.32
部署服務:Node Exporter,cAdvrisorcss
注意:由於是測試環境,因此暫時關閉防火牆,禁用selinux,若是是對外網發佈的服務器,不能夠關閉防火牆,能夠設置firewalld及iptables規則。html
1,部署Node Export(收集dockerhost信息)
#三臺dockerhost都須要依次部署:node
(1)下載鏡像prom/node-exporter鏡像: [root@sqm-docker02 ~]# docker pull prom/node-exporter
(2)運行Node Exporter容器(掛載系統目錄) [root@sqm-docker02 ~]# docker run -d -p 9100:9100 -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)($|/)"
#查看容器是否正常運行:
linux
三臺都部署完成後,登陸web網頁進入驗證:
輸入URL(三臺主機的均可以):http://172.16.1.30:9100/
web
進來之後,能夠看到信息全是代碼,很是的不友好,由於咱們尚未部署圖形化(Grafana)。docker
2,部署cAdvisor(收集container信息)
#依次在三臺dockerhost上分別部署vim
(1)下載google/cadvisor鏡像 [root@sqm-docker01 ~]# docker pull google/cadvisor
(2)運行cAdvisor鏡像: [root@sqm-docker01 ~]# 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
//查看容器是否正常運行:
centos
登錄web網頁驗證:
URL:http://172.16.1.30:8080
能夠檢測到dockerhost的各類信息。服務器
3,部署Prometheus server:(普羅米修斯的主服務)
只部署在docker01上:測試
(1)下載Prometheus鏡像: [root@sqm-docker01 ~]# docker pull prom/prometheus
(2)獲取普羅米修斯的配置文件,先運行一個基於普羅米修斯的鏡像: [root@sqm-docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
(3)拷貝prometheus容器內配置文件到當前目錄下: [root@sqm-docker01 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml /root/
修改該.yml文件: [root@sqm-docker01 ~]# vim prometheus.yml
添加本機和另外兩臺docker主機上服務的監控地址:端口
(4)刪除剛剛建立的Prometheus容器(只爲拷貝配置文件)
[root@sqm-docker01 ~]# docker stop prometheus [root@sqm-docker01 ~]# docker rm prometheus
(5)運行一個Prometheus容器: [root@sqm-docker01 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus
//查看容器是否正常運行:
登錄Prometheus web頁面:
URL:http://172.16.1.30:9090
確保監控到剛剛配置文件中添加三臺dockerhost的主機及端口,而且狀態爲up。
4,部署Grafana:(提供友好的圖形化界面)
在Prometheus server上進行部署:
(1)下載Grafana鏡像: [root@sqm-docker01 ~]# docker pull grafana/grafana
(2)運行Grafana:(設置登錄密碼爲123.com) [root@sqm-docker01 ~]# mkdir grafana-storage [root@sqm-docker01 ~]# chmod 777 -R grafana-storage/ [root@sqm-docker01 ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
若是出現以上報錯,須要從新加載進程,而且重啓docker服務。
確保容器已經運行:
訪問web界面(圖形化):
URL:http://172.16.1.30:3000
默認用戶名:admin 密碼:123.com
登錄界面以下:
(3)接下來咱們在圖形化web界面上進行部署:
點擊首頁上名稱爲「add data source」圖標---------->選擇「Prometheus」點擊進入到如下界面
設置成功後,接下來進入Grafana的官網: https://grafana.com/
下載監控模板
下載成功後,回到Grafana管理的圖形化界面。
點擊導入剛剛下載的josn文件:
、
導入成功後,能夠看到如下監控界面:
固然你也能夠導入其餘模板,能夠在剛纔的官網上下載其餘模板。
確定是在Prometheus server進行部署啦
(1)下載Alertmanager告警鏡像 [root@sqm-docker01 ~]# docker pull prom/alertmanager
(2)運行alertmanager: [root@sqm-docker01 ~]# docker run --name alertmanager -d -p 9093:9093 prom/alertmanager
測試可否訪問web界面:
URL:http://172.16.1.30:9093/
(3)拷貝它配置文件:
若是不知道它的配置文件路徑,則須要進入容器進行查看:[root@sqm-docker01 ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/
刪除剛剛建立的容器:(只爲了拷貝配置文件)
[root@sqm-docker01 ~]# docker stop alertmanager [root@sqm-docker01 ~]# docker rm alertmanager
修改該.yml配置文件: [root@sqm-docker01 ~]# vim alertmanager.yml
設置實現報警的郵箱信息:
注意:上面定義的smtp郵件協議,qq郵箱是465,若是填寫的是其餘郵箱,則須要填寫相對應的smtp端口號。
(4)從新運行容器: [root@sqm-docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
//確保容器正常運行:
(5)設置Alertmanager報警規則: [root@sqm-docker01 ~]# mkdir -p prometheus/rules [root@sqm-docker01 ~]# cd prometheus/rules/
編寫規則文件:
[root@sqm-docker01 rules]# vim node-up.rules
以上是本身自定義編寫的,固然也能夠登錄Prometheus官網,搜索規則模板進行編寫:
//接下來修改普羅米修斯配置文件: [root@sqm-docker01 ~]# vim prometheus.yml
刪除剛剛運行的普羅米修斯容器:
[root@sqm-docker01 ~]# docker stop prometheus prometheus [root@sqm-docker01 ~]# docker rm prometheus prometheus
//須要從新運行容器,將規則目錄掛載到容器中: [root@sqm-docker01 ~]# 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
確保容器正常運行後,登錄網頁進行查看:
確保可以看到剛纔編寫的規則。
(6)測試郵箱報警:
接下來模擬其中一臺主機上的某個服務宕機掉,驗證qq郵箱是否可以收到郵件:
[root@sqm-docker01 ~]# docker stop cadvisor cadvisor
登錄Prometheus界面能夠看到該服務down:
當服務宕機後,郵箱收到該報警郵件,提示爲「FIRING」
若是當你的服務又恢復了正常運行,依而後觸發報警規則,會給你發送郵件,提示容器已修復「RESOLVED」(以下圖)
(7)搭建報警信息模板:
[root@sqm-docker01 ~]# mkdir alertmanager-tmpl [root@sqm-docker01 ~]# cd alertmanager-tmpl/ [root@sqm-docker01 alertmanager-tmpl]# vim email.tmpl
編寫模板腳本:(填寫報警的qq郵箱)
{{ define "email.from" }}1234567890@qq.com{{ end }}
{{ define "email.to" }}1234567890@qq.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警級別: {{ .Labels.severity }} 級<br>
告警類型: {{ .Labels.alertname }}<br>
故障主機: {{ .Labels.instance }}<br>
告警主題: {{ .Annotations.summary }}<br>
觸發時間: {{ .StartsAt.Format "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
//修改alertmanager配置文件: [root@sqm-docker01 ~]# vim alertmanager.yml
#注意縮進:
//刪除原來的容器: [root@sqm-docker01 ~]# docker stop alertmanager [root@sqm-docker01 ~]# docker rm alertmanager
//從新運行容器(從新掛載文件) [root@sqm-docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
確保容器已正常運行:
接下來停掉一個容器,模擬宕機:
狀態爲down:
//qq郵箱收到報警郵件:
//一樣的,若是當你的服務恢復了正常運行後,也會發送報警郵件:
至此普羅米修斯監控部署完畢,而且成功實現郵箱報警。。。
———————— 本文至此結束,感謝閱讀 ————————