Prometheus監控系統 安裝與配置詳細教程


一、Prometheus是什么

Prometheus中文發音為普羅米修斯,它可以使用各種數學算法實現強大的監控需求,並且原生支持K8S的服務發現,能監控容器的動態變化。結合Grafana繪出漂亮圖形,最終使用alertmanager或Grafana實現報警。它與其他監控相比有以下主要優勢:數據格式是Key/Value形式,簡單、速度快;監控數據的精細程度是絕對的領先,達到秒級(但正因為數據采集精度高,對磁盤消耗大,存在性能瓶頸,而且不支持集群,但可以通過聯邦能力進行擴展);不依賴分布式存儲,數據直接保存在本地,可以不需要額外的數據庫配置。但是如果對歷史數據有較高要求,可以結合OpenTSDB;周邊插件豐富,如果對監控要求不是特別嚴格的話,默認的幾個成品插件已經足夠使用;本身基於數學計算模型,有大量的函數可用,可以實現很復雜的監控(所以學習成本高,需要有一定數學思維,獨有的數學命令行很難入門);可以嵌入很多開源工具的內部去進行監控,數據更可信。

 

 

二、Prometheus的主要組件

1、服務端

Prometheus服務端以一個進程方式啟動,如果不考慮參數和后台運行的話,只需要解壓安裝包之后運行./prometheus腳本即可啟動,程序默認監聽在9090端口。每次采集到的數據叫做metrics。這些采集到的數據會先存放在內存中,然后定期再寫入硬盤,如果服務重新啟動的話會將硬盤數據寫回到內存中,所以對內存有一定消耗。Prometheus不需要重視歷史數據,所以默認只會保留15天的數據。

 

2、客戶端

Prometheus客戶端分為pull和push兩種方式。如果是pull形式的話則是服務端主動向客戶端拉取數據,這樣需要客戶端上安裝exporters(導出器)作為守護進程,官網上也提供了很多exporters可以下載使用,比如使用最多的node_exporters,幾乎把系統自身相關數據全部采集了,非常全面,node_exporter默認監聽9100端口。

如果是push形式的話客戶端需要安裝pushgateway插件,然后運需要運維人員用腳本把監控數據組織成鍵值形式提交給pushgateway,再由它提交給服務端。它適合於現有exporters無法滿足需求時,自己靈活定制。

 

3、metrics主要數據類型

· Gauges:最簡單、使用最多的指標,獲取一個返回值,這個返回值沒有變化規律,不能肯定它一定是增長或是減少的狀態,采集回來是多少就是多少。比如硬盤容量、CPU內存使用率都適合使用Gauges數據類型。

· Counters:計數器。數據從0開始累計,理想狀態下應該是永遠增長或者是不變。適合統計機器開機時間、HTTP訪問量

· Histograms:和summary一樣屬於高級指標,用於統計數據的分布情況。比如最小值、最大值、中間值。這個類型不太好理解,比如說統計一天的日志,大部分用戶響應時間都是正常的,只有少量用戶異常,如果這個時候取平均值的話,這少量用戶的異常情況就會被掩蓋過去,而Histograms可以分別統計出全部用戶的響應時間,比如0-1秒的用戶有多少、1-2秒的用戶有多少(其實有點像Kibana)

 

三、Prometheus服務端安裝部署

1、到官網http://prometheus.io下載安裝包

 

2、解壓安裝包后獲得主配置文件prometheus.yml,下面介紹一些需要修改的主要配置,標簽部分內容不是必須的,可以了解

01 global:
02   scrape_interval:     15s  #抓取數據的頻率,默認15秒。該配置也可配置在每個job_name中
03   evaluation_interval: 15s #監控規則評估頻率,比如設置了當內存使用大於70%發出報警的規則,然后每15秒來執行一次這個規則
04  
05 alerting:
06   alertmanagers:
07   - static_configs:
08     - targets:
09       # - alertmanager:9093
10  
11 scrape_configs:
12   - job_name: 'prometheus-server'  #作業名,可以理解為組名,其下可以有多個實例配置
13     static_configs:
14     - targets: ['localhost:9090']  #節點的地址,可以寫多個地址
15 #    params:  #過濾器
16 #      collect[]:
17 #        - cpu #只采集CPU數據
18  
19   - job_name: 'www'
20     static_configs:
21     - targets: ['10.160.2.107:9100','192.168.1.100:9100']
22       labels:  #自定義標簽,可以通過標簽進行統一管理
23         idc:beijing  #增加一個idc標簽,內容為beijing
24 #使用正則替換標簽
25   - job_name: 'node'
26     static_configs:
27     - targets: ['10.160.2.110:9100','192.168.1.111:9100']
28     metric_relable_configs:  #通過正則重命名標簽
29     - action: replace  #replace替換是默認動作。此外還有keep(只參加匹配標簽的實例)、drop(不采集匹配正則的實例)、labelkeep\labeldrop(對標簽進行過濾處理而非實例)等動作
30       source_labels: ['job']  #原標簽,job是默認就會產生的標簽,這里job標簽的值是node
31       regex: (.*)  #正則匹配,這里匹配job標簽內的內容,也就是node
32       replacement: beijing  #替換成什么內容,如果寫$1就是將正則里的內容拿過來
33       target_label: idc  #把替換到的內容賦值給idc標簽
34     - action: labeldrop  #刪除標簽
35       regex: job  #把原有的job標簽刪除不顯示

 

3、在運行./prometheus腳本之前可以進行一次配置文件檢查

1 protool check config prometheus.yml

 

4、配置文件檢查沒有問題后就可以啟動服務了,服務默認監聽在9090端口。如果不加任何參數,監控數據會存放在/usr/local/prometheus/data下,那些一長串一長串的文件夾都是已經寫入到磁盤中的歷史數據。寫入磁盤前的數據是放在內存中的,如果發生斷電等情況就會使用硬盤中的數據進行恢復。下面是一些Prometheus腳本常用選項

1 prometheus --config.file="/usr/local/prometheus-2.16.0.linux-amd64/prometheus.yml" --web.listen-address="0.0.0.0:9090"
2 # --config.file="/usr/local/prometheus/prometheus.yml"  #指定配置文件路徑
3 # --web.listen-address="0.0.0.0:9090"  #指定服務端口
4 # --storage.tsdb.path="/data/prometheus"  #指定數據存儲路徑
5 # --storage.tsdb.retention.time=15d  #數據保留時間
6 # --collector.systemd #開啟服務狀態監控,開啟后在WEB上可以看到多出相關監控項
7 # --collector.systemd.unit-whitelist=(sshd|nginx).service  #具體要監控的服務名
8 # --web.enable-lifecycle  #開啟熱加載配置

 

兩種熱加載方式,一個是直接用kill命令發送HUP信號,一個是開啟web.enable-lifecycle選項后使用curl命令

1 kill -HUP `pidof prometheus`
2 curl -X POST http://localhost:9090/-/reload

 

5、通過瀏覽器訪問9090端口可以進入到Prometheus WEB管理界面。如下圖就是查看已經監控的節點列表

prometheus2.png

 

6、在進行數據查詢時有一個統一的查詢語法,根據metric_name指標名稱和label標簽進行過濾和聚合

1 #語法:<metric name>{<labelname>=<lablevalue>,...}[time] 
2 http_requests_total{environment=~"staging|testing|development",method!="GET"}
3 # labelname=value  #選擇標簽滿足表達式定義的時間序列
4 # labelname!=value  #根據標簽匹配排除時間序列
5 # labelname=~regx  #選擇標簽符合正則表達式定義的時間序列
6 # labelname!~regx  #排除符合正則表達式定義的時間序列
7  
8 http_request_total{}[5m]  #選擇最近5分鍾內的所有樣本數據,還支持s,h,d,w,y等單位
9 http_request_total{}[1d] offset 1d  #區間向量表達式是以當前時間為基准,如果想查詢昨天一天的區間數據可以使用位移操作offset

 

 

 

四、Prometheus客戶端安裝部署

1、這里的客戶端指的是exporter,也叫導出器。exporter可以分為兩類:內置支持Prometheus,比如K8S、Etcd等;間接采集,比如node_exporter、MySQL Exporter等。參考下圖:

企業微信截圖_20190813141841.png

 

這里以安裝node_exporter為例,該導出器通過讀取/proc下的文件獲取系統的各種數據。只需要在官網下載好二進制包以后可以解壓直接啟動,如果要打開額外的監控選項的話只需要加上指定參數就可以了

1 ./node_exporter
2 #./node_exporter --collector-diskstats  #打開磁盤狀態相關監控

 

2、使用curl命令訪問服務可以看到返回很多鍵值對數據。這里只要掌握常用的幾個key就可以了,比如查看系統CPU使用率的node_cpu、查看磁盤IO的node_disk*、查看系統負載的node_load1、查看系統內存的node_memory*、查看網絡帶寬的node_network*、查看文件系統使用情況的node_filesystem*等

 

1 curl ip:9100/metrics
2 # HELP node_cpu Seconds the cpus spent in each mode.
3 # TYPE node_cpu counter  #TYPE說明了數據類型
4 node_cpu{cpu="cpu0",mode="idle"} 362812.7890625

 

3、除了訪問:9100/metrics來獲取數據外,也可以在Prometheus界面通過PromQL來進行查詢,支持使用標簽進行匹配和條件過濾,如果在保證語法沒有問題卻查詢不到數據的情況,請確認機器時間同步。下圖就是使用PromQL進行了一次查詢,這些查詢語句涉及了多種函數,靈活使用這些函數可以完成很多維度的監控。后續會對一些常用函數進行講解

label.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM