Prometheus 監控系統實戰
目錄
-
學習目標
-
任務背景
-
任務要求
-
任務分析
-
Prometheus 實戰
學習目標
如下:
-
能夠安裝 prometheus 服務器
-
能夠通過安裝 node_exporter 監控遠程 linux
-
能夠通過安裝 mysqld_exporter 監控遠程 mysql 數據庫
-
能夠安裝 grafana
-
能夠在 grafana 添加 prometheus 數據源
-
能夠在 grafana 添加監控 cpu 負載的圖形
-
能夠在 grafana 圖形顯示 mysql 監控數據
-
能夠通過 grafana+onealert 實現報警
任務背景
某某某公司是一家電商網站,由於公司的業務快速發展,公司要求對現有機器進行業務監控,責成運維部門來實施這個項目。
任務要求
如下:
-
部署監控服務器,實現 7x24 實時監控
-
針對公司的業務及研發部門設計監控系統,對監控項和觸發器拿出合理意見
-
做好問題預警機制,對可能出現的問題要及時告警並形成嚴格的處理機制
-
做好監控告警系統,要求可以實現告警分級,一級報警:電話通知;二級報警:微信通知;三級報警:郵件通知
-
處理好公司服務器異地集中監控問題,K8S 內部使用的監控系統就是普羅米修斯
任務分析
爲什麼要監控?答:實時收集數據,通過報警及時發現問題,及時處理。數據爲優化也可以提供依據。
監控四要素:
-
監控對象 [主機狀態 服務 資源 頁面,url]
-
用什麼監控 [zabbix-server zabbix-agent] => 普羅米修斯監控
-
什麼時間監控 [7x24 5x8]
-
報警給誰 [管理員]
Prometheus 實戰
| Prometheus 概述
Prometheus(由 go 語言開發)是一套開源的監控 & 報警 & 時間序列數據庫的組合。適合監控 docker 容器。因爲 kubernetes 的流行帶動了 prometheus 的發展。
https://prometheus.io/docs/introduction/overview/
| 時間序列數據
①什麼是序列數據
時間序列數據(TimeSeries Data):按照時間順序記錄系統、設備狀態變化的數據被稱爲時序數據。
應用的場景很多,如:
-
無人駕駛車輛運行中要記錄的經度,緯度,速度,方向,旁邊物體的距離等等。每時每刻都要將數據記錄下來做分析。
-
某一個地區的各車輛的行駛軌跡數據
-
傳統證券行業實時交易數據
-
實時運維監控數據等
②時間序列數據特點
性能好:關係型數據庫對於大規模數據的處理性能糟糕。NOSQL 可以比較好的處理大規模數據,讓依然比不上時間序列數據庫。
存儲成本低:高效的壓縮算法,節省存儲空間,有效降低 IO。
Prometheus 有着非常高效的時間序列數據存儲方法,每個採樣數據僅僅佔用 3.5byte 左右空間,上百萬條時間序列,30 秒間隔,保留 60 天,大概花了 200 多 G(來自官方數據)。
③Prometheus 的主要特徵
如下:
-
多維度數據模型
-
靈活的查詢語言
-
不依賴分佈式存儲,單個服務器節點是自主的
-
以 HTTP 方式,通過 pull 模型拉去時間序列數據
-
也可以通過中間網關支持 push 模型
-
通過服務發現或者靜態配置,來發現目標服務對象
-
支持多種多樣的圖表和界面展示
④普羅米修斯架構原理
如下圖:
| 實驗環境準備
1️⃣靜態 ip(要求能上外網)
2️⃣主機名
3️⃣時間同步(時間同步一定要確認一下)
4️⃣關閉防火牆,selinux
①安裝 prometheus
從官網下載相應版本,安裝到服務器上:
https://prometheus.io/download/
官網提供的是二進制版,解壓就能用,不需要編譯。
②Prometheus 界面
通過瀏覽器訪問 http:// 服務器 IP:9090 就可以訪問到 Prometheus 的主界面:
默認只監控了本機一臺,點 Status→點 Targets→可以看到只監控了本機:
③主機數據展示
通過 http:// 服務器 IP:9090/metrics 可以查看到監控的數據:
在 web 主界面可以通過關鍵字查詢監控項:
④監控遠程 Linux 主機
在遠程 linux 主機(被監控端 agent1)上安裝 node_exporter 組件。
下載地址:
https://prometheus.io/download/
擴展:nohup 命令。如果把啓動 node_exporter 的終端給關閉,那麼進程也會隨之關閉。nohup 命令會幫你解決這個問題。
通過瀏覽器訪問 http:// 被監控端 IP:9100/metrics 就可以查看到 node_exporter 在被監控端收集的監控信息:
回到 Prometheus 服務器的配置文件裏添加被監控機器的配置段:
回到 web 管理界面→點 Status→點 Targets→可以看到多了一臺監控目標:
練習:加上本機 prometheus 的監控。答:在本機安裝 node_exporter,也使用上面的方式監控起來。
⑤監控遠程 MySQL
在被管理機 agent1 上安裝 mysqld_exporter 組件:
回到 Prometheus 服務器的配置文件裏添加被監控的 mariadb 的配置段:
回到 web 管理界面→點 Status→點 Targets→可以看到監控 mariadb 了:
| Grafana 可視化圖形工具
①什麼是 Grafana
Grafana 是一個開源的度量分析和可視化工具,可以通過將採集的數據分析,查詢,然後進行可視化的展示,並能實現報警。
網址:
https://grafana.com/
②使用 Grafana 連接 Prometheus
在 grafana 服務器上安裝 grafana,下載地址:
https://grafana.com/grafana/download
通過瀏覽器訪問 http:// grafana 服務器 IP:3000 就到了登錄界面,使用默認的 admin 用戶,admin 密碼就可以登陸了。
下面我們把 Prometheus 服務器收集的數據做爲一個數據源添加到 grafana,讓 grafana 可以得到 Prometheus 的數據。
然後爲添加好的數據源做圖形顯示:
點擊保存:
最後在 dashboard 可以查看到:
匹配條件顯示:
③Grafana 圖形顯示 MySQL 監控數據
在 grafana 上修改配置文件, 並下載安裝 mysql 監控的 dashboard(包含相關 json 文件,這些 json 文件可以看作是開發人員開發的一個監控模板)。
參考網址:
https://github.com/percona/grafana-dashboards
在 grafana 圖形界面導入相關 json 文件:
點 import 導入後,報 prometheus 數據源找不到,因爲這些 json 文件裏默認要找的就是叫 Prometheus 的數據源,但我們前面建立的數據源卻是叫 prometheus_data(坑啊)。
那麼請自行把原來的 prometheus_data 源改名爲 Prometheus 即可(注意:第一個字母 P 是大寫)。
然後再回去刷新,就有數據了,如下圖所示:
過段時間再看,就會有數據了,如下圖所示:
④Grafana+onealert 報警
Prometheus 報警需要使用 alertmanager 這個組件,而且報警規則需要手動編寫(對運維來說不友好)。所以我這裏選用 grafana+onealert 報警。注意:實現報警前把所有機器時間同步再檢查一遍。
先在 onealert 裏添加 grafana 應用:
配置通知策略:
在 grafana 增加通知通道:
現在可以去設置一個報警來測試了(這裏以我們前面加的 cpu 負載監控來做測試):
保存後就可以測試了,如果 agent1 上的 cpu 負載還沒有到 0.5,你可以試試 0.1,或者運行一些程序把 agent1 負載調大。
最終能測試報警成功:
最終的郵件報警效果:
測試 MySQL 鏈接數報警:
⑤總結報警不成功的可能原因
如下:
-
各服務器之間時間不同步,這樣時序數據會出問題,也會造成報警出問題
-
必須寫通知內容,留空內容是不會發報警的
-
修改完報警配置後,記得要點右上角的保存
-
保存配置後,需要由 OK 狀態變爲 alerting 狀態纔會報警(也就是說,你配置保存後,就已經是 alerting 狀態是不會報警的)
-
grafana 與 onealert 通信有問題
作者:果子哥丶
來源:https://blog.csdn.net/qq_39578545/article/details/108754585
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Y1wj8UjTxQfBikr6I2zD-w