Prometheus 監(jiān)控系統(tǒng)入門學(xué)習(xí)

學(xué)習(xí)目標(biāo)
能夠安裝prometheus服務(wù)器
能夠通過安裝node_exporter監(jiān)控遠(yuǎn)程linux
能夠通過安裝mysqld_exporter監(jiān)控遠(yuǎn)程mysql數(shù)據(jù)庫
能夠安裝grafana
能夠在grafana添加prometheus數(shù)據(jù)源
能夠在grafana添加監(jiān)控cpu負(fù)載的圖形
能夠在grafana圖形顯示mysql監(jiān)控?cái)?shù)據(jù)
能夠通過grafana+onealert實(shí)現(xiàn)報警
任務(wù)背景
某某某公司是一家電商網(wǎng)站,由于公司的業(yè)務(wù)快速發(fā)展,公司要求對現(xiàn)有機(jī)器進(jìn)行業(yè)務(wù)監(jiān)控,責(zé)成運(yùn)維部門來實(shí)施這個項(xiàng)目。
任務(wù)要求
1)部署監(jiān)控服務(wù)器,實(shí)現(xiàn)7x24實(shí)時監(jiān)控
2)針對公司的業(yè)務(wù)及研發(fā)部門設(shè)計(jì)監(jiān)控系統(tǒng),對監(jiān)控項(xiàng)和觸發(fā)器拿出合理意見
3)做好問題預(yù)警機(jī)制,對可能出現(xiàn)的問題要及時告警并形成嚴(yán)格的處理機(jī)制
4)做好監(jiān)控告警系統(tǒng),要求可以實(shí)現(xiàn)告警分級
一級報警 電話通知
二級報警 微信通知
三級報警 郵件通知
5)處理好公司服務(wù)器異地集中監(jiān)控問題,K8S內(nèi)部使用的監(jiān)控系統(tǒng)就是普羅米修斯
任務(wù)分析
為什么要監(jiān)控?
答: 實(shí)時收集數(shù)據(jù),通過報警及時發(fā)現(xiàn)問題,及時處理。數(shù)據(jù)為優(yōu)化也可以提供依據(jù)。
監(jiān)控四要素:
監(jiān)控對象 [主機(jī)狀態(tài) 服務(wù) 資源 頁面,url]
用什么監(jiān)控 [zabbix-server zabbix-agent] => 普羅米修斯監(jiān)控
什么時間監(jiān)控 [7x24 5x8]
報警給誰 [管理員]
一、Prometheus概述
Prometheus(由go語言(golang)開發(fā))是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合。適合監(jiān)控docker容器。因?yàn)閗ubernetes(俗稱k8s)的流行帶動了prometheus的發(fā)展。
https://prometheus.io/docs/introduction/overview/
二、時間序列數(shù)據(jù)
1、什么是序列數(shù)據(jù)
時間序列數(shù)據(jù)(TimeSeries Data) : 按照時間順序記錄系統(tǒng)、設(shè)備狀態(tài)變化的數(shù)據(jù)被稱為時序數(shù)據(jù)。
應(yīng)用的場景很多, 如:
無人駕駛車輛運(yùn)行中要記錄的經(jīng)度,緯度,速度,方向,旁邊物體的距離等等。每時每刻都要將數(shù)據(jù)記錄下來做分析。
某一個地區(qū)的各車輛的行駛軌跡數(shù)據(jù)
傳統(tǒng)證券行業(yè)實(shí)時交易數(shù)據(jù)
實(shí)時運(yùn)維監(jiān)控?cái)?shù)據(jù)等
2、時間序列數(shù)據(jù)特點(diǎn)
性能好
關(guān)系型數(shù)據(jù)庫對于大規(guī)模數(shù)據(jù)的處理性能糟糕。NOSQL可以比較好的處理大規(guī)模數(shù)據(jù),讓依然比不上時間序列數(shù)據(jù)庫。
存儲成本低
高效的壓縮算法,節(jié)省存儲空間,有效降低IO
Prometheus有著非常高效的時間序列數(shù)據(jù)存儲方法,每個采樣數(shù)據(jù)僅僅占用3.5byte左右空間,上百萬條時間序列,30秒間隔,保留60天,大概花了200多G(來自官方數(shù)據(jù))
3、Prometheus的主要特征
多維度數(shù)據(jù)模型
靈活的查詢語言
不依賴分布式存儲,單個服務(wù)器節(jié)點(diǎn)是自主的
以HTTP方式,通過pull模型拉去時間序列數(shù)據(jù)
也可以通過中間網(wǎng)關(guān)支持push模型
通過服務(wù)發(fā)現(xiàn)或者靜態(tài)配置,來發(fā)現(xiàn)目標(biāo)服務(wù)對象
支持多種多樣的圖表和界面展示
4、普羅米修斯原理架構(gòu)圖

三、實(shí)驗(yàn)環(huán)境準(zhǔn)備

1. 靜態(tài)ip(要求能上外網(wǎng))
2. 主機(jī)名

3. 時間同步(時間同步一定要確認(rèn)一下)
4. 關(guān)閉防火墻,selinux

1、安裝prometheus
從 https://prometheus.io/download/ 下載相應(yīng)版本,安裝到服務(wù)器上
官網(wǎng)提供的是二進(jìn)制版,解壓就能用,不需要編譯

2、prometheus界面
通過瀏覽器訪問http://服務(wù)器IP:9090就可以訪問到prometheus的主界面

默認(rèn)只監(jiān)控了本機(jī)一臺,點(diǎn)Status --》點(diǎn)Targets --》可以看到只監(jiān)控了本機(jī)

3、主機(jī)數(shù)據(jù)展示
通過http://服務(wù)器IP:9090/metrics可以查看到監(jiān)控的數(shù)據(jù)

在web主界面可以通過關(guān)鍵字查詢監(jiān)控項(xiàng)

4、監(jiān)控遠(yuǎn)程Linux主機(jī)
① 在遠(yuǎn)程linux主機(jī)(被監(jiān)控端agent1)上安裝node_exporter組件
下載地址: https://prometheus.io/download/

擴(kuò)展: nohup命令: 如果把啟動node_exporter的終端給關(guān)閉,那么進(jìn)程也會隨之關(guān)閉。nohup命令會幫你解決這個問題。
② 通過瀏覽器訪問http://被監(jiān)控端IP:9100/metrics就可以查看到node_exporter在被監(jiān)控端收集的監(jiān)控信息

③ 回到prometheus服務(wù)器的配置文件里添加被監(jiān)控機(jī)器的配置段

④ 回到web管理界面 --》點(diǎn)Status --》點(diǎn)Targets --》可以看到多了一臺監(jiān)控目標(biāo)

練習(xí): 加上本機(jī)prometheus的監(jiān)控
答: 在本機(jī)安裝node_exporter,也使用上面的方式監(jiān)控起來。
5、監(jiān)控遠(yuǎn)程MySQL
① 在被管理機(jī)agent1上安裝mysqld_exporter組件
下載地址: https://prometheus.io/download/


② 回到prometheus服務(wù)器的配置文件里添加被監(jiān)控的mariadb的配置段

③ 回到web管理界面 --》點(diǎn)Status --》點(diǎn)Targets --》可以看到監(jiān)控mariadb了


四、Grafana可視化圖形工具
1、什么是Grafana
Grafana是一個開源的度量分析和可視化工具,可以通過將采集的數(shù)據(jù)分析,查詢,然后進(jìn)行可視化的展示,并能實(shí)現(xiàn)報警。

網(wǎng)址: https://grafana.com/
2、使用Grafana連接Prometheus
① 在grafana服務(wù)器上安裝grafana
下載地址:https://grafana.com/grafana/download

② 通過瀏覽器訪問 http:// grafana服務(wù)器IP:3000就到了登錄界面,使用默認(rèn)的admin用戶,admin密碼就可以登陸了

③ 下面我們把prometheus服務(wù)器收集的數(shù)據(jù)做為一個數(shù)據(jù)源添加到grafana,讓grafana可以得到prometheus的數(shù)據(jù)。




④ 然后為添加好的數(shù)據(jù)源做圖形顯示




⑤ 保存

⑥ 最后在dashboard可以查看到

⑦ 匹配條件顯示


3、Grafana圖形顯示MySQL監(jiān)控?cái)?shù)據(jù)
① 在grafana上修改配置文件,并下載安裝mysql監(jiān)控的dashboard(包含相關(guān)json文件,這些json文件可以看作是開發(fā)人員開發(fā)的一個監(jiān)控模板)
參考網(wǎng)址: https://github.com/percona/grafana-dashboards

② 在grafana圖形界面導(dǎo)入相關(guān)json文件


③ 點(diǎn)import導(dǎo)入后,報prometheus數(shù)據(jù)源找不到,因?yàn)檫@些json文件里默認(rèn)要找的就是叫Prometheus的數(shù)據(jù)源,但我們前面建立的數(shù)據(jù)源卻是叫prometheus_data(坑啊)
那么請自行把原來的prometheus_data源改名為Prometheus即可(注意:第一個字母P是大寫)
然后再回去刷新,就有數(shù)據(jù)了(如下圖所示)

④ 過段時間再看,就會有數(shù)據(jù)了(如下圖所示)

4、Grafana+onealert報警
prometheus報警需要使用alertmanager這個組件,而且報警規(guī)則需要手動編寫(對運(yùn)維來說不友好)。所以我這里選用grafana+onealert報警。
注意: 實(shí)現(xiàn)報警前把所有機(jī)器時間同步再檢查一遍.
① 先在onealert里添加grafana應(yīng)用(申請onealert賬號在zabbix已經(jīng)講過)


② 配置通知策略

③ 在grafana增加通知通道



④ 現(xiàn)在可以去設(shè)置一個報警來測試了(這里以我們前面加的cpu負(fù)載監(jiān)控來做測試)




⑤ 保存后就可以測試了
如果agent1上的cpu負(fù)載還沒有到0.5,你可以試試0.1,或者運(yùn)行一些程序把a(bǔ)gent1負(fù)載調(diào)大。最終能測試報警成功。

最終的郵件報警效果:

測試mysql鏈接數(shù)報警





5、總結(jié)報警不成功的可能原因
各服務(wù)器之間時間不同步,這樣時序數(shù)據(jù)會出問題,也會造成報警出問題
必須寫通知內(nèi)容,留空內(nèi)容是不會發(fā)報警的
修改完報警配置后,記得要點(diǎn)右上角的保存
保存配置后,需要由OK狀態(tài)變?yōu)閍lerting狀態(tài)才會報警(也就是說,你
配置保存后,就已經(jīng)是alerting狀態(tài)是不會報警的)
grafana與onealert通信有問題
來自twt社區(qū)會員分享,版權(quán)歸原作者所有
有收獲,點(diǎn)個在看?


