您好,登錄后才能下訂單哦!
Prometheus(普羅米修斯)是一套開源的監控&報警&時間序列數據庫的組合,起始是由SoundCloud公司開發的。隨著發展,越來越多公司和組織接受采用Prometheus,社會也十分活躍,他們便將它獨立成開源項目,并且有公司來運作。Google SRE的書內也曾提到跟他們BorgMon監控系統相似的實現是Prometheus。現在最常見的Kubernetes容器管理系統中,通常會搭配Prometheus進行監控。
Prometheus基本原理是通過HTTP協議周期性抓取被監控組件的狀態,這樣做的好處是任意組件只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環境比如VM或者Docker 。
Prometheus應該是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一。
一個多維數據模型(時間序列由指標名稱定義和設置鍵/值尺寸)。
非常高效的存儲,平均一個采樣數據占~3.5bytes左右,320萬的時間序列,每30秒采樣,保持60天,消耗磁盤大概228G。
一種靈活的查詢語言。
不依賴分布式存儲,單個服務器節點。
時間集合通過HTTP上的PULL模型進行。
通過中間網關支持推送時間。
通過服務發現或靜態配置發現目標。
多種模式的圖形和儀表板支持。
該圖說明了普羅米修斯(Prometheus)及其一些生態系統組件的整體架構:
它的服務過程是這樣的Prometheus daemon負責定時去目標上抓取metrics(指標) 數據,每個抓取目標需要暴露一個http服務的接口給它定時抓取。
Prometheus:支持通過配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目標。支持很多方式的圖表可視化,例如十分精美的Grafana,自帶的Promdash,以及自身提供的模版引擎等等,還提供HTTP API的查詢方式,自定義所需要的輸出。
Alertmanager:是獨立于Prometheus的一個組件,可以支持Prometheus的查詢語句,提供十分靈活的報警方式。
PushGateway:這個組件是支持Client主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取數據。
如果有使用過statsd的用戶,則會覺得這十分相似,只是statsd是直接發送給服務器端,而Prometheus主要還是靠進程主動去抓取。
大多數Prometheus組件都是用Go編寫的,它們可以輕松地構建和部署為靜態二進制文件。訪問prometheus.io以獲取完整的文檔,示例和指南。
Counter用于累計值,例如記錄請求次數、任務完成數、錯誤發生次數。一直增加,不會減少。重啟進程后,會被重置。
例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。
Gauge常規數值,例如 溫度變化、內存使用變化。可變大,可變小。重啟進程后,會被重置。
例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。
Histogram(直方圖)可以理解為柱狀圖的意思,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。它特別之處是可以對記錄的內容進行分組,提供count和sum全部值的功能。
例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。
Summary和Histogram十分相似,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。同樣提供 count 和 sum 全部值的功能。
例如:count=7次,sum=7次的值求值。
它提供一個quantiles的功能,可以按%比劃分跟蹤的結果。例如:quantile取值0.95,表示取采樣值里面的95%數據。
docker01 | docker02 | docker03 |
---|---|---|
192.168.1.11 | 192.168.1.13 | 192.168.1.20 |
NodeEXporter | NodeEXporter | NodeEXporter |
cAdvisor | cAdvisor | cAdvisor |
Prometheus Server | 空 | 空 |
Grafana | 空 | 空 |
全部關閉防火墻,禁用selinux
需要部署的組件:
Prometheus Server:普羅米修斯的主服務器。
Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據并存儲在本地的時序數據庫上。
- 多維數據模型(時序列數據由metric名和一組key/value組成)
- 在多維度上靈活的查詢語言(PromQl)
- 不依賴分布式存儲,單主節點工作.
- 通過基于HTTP的pull方式采集時序數據
- 可以通過push gateway進行時序列數據推送(pushing)
- 可以通過服務發現或者靜態配置去獲取要采集的目標服務器
- 多種可視化圖表及儀表盤支持
- Prometheus通過安裝在遠程機器上的exporter來收集監控數據,后面我們將使用到node_exporter收集系統數據。
[NodeEXporter]():負責收集Host硬件信息和操作系統信息。
[cAdvisor]():負責收集Host.上運行的容器信息。
Grafana:負責展示普羅米修斯監控界面。
Grafana 是一個開箱即用的可視化工具,具有功能齊全的度量儀表盤和圖形編輯器,有靈活豐富的圖形化選項,可以混合多種風格,支持多個數據源特點。
這些可以直接docker pull下載鏡像(現在是本地導入鏡像)
本地上傳鏡像
docker01
[09:05:42][docker01$ docker load -i node-exporter.tar && docker load -i mycadvisor.tar && docker load -i prometheus.tar && docker load -i grafana.tar
docker02和docker03
[09:05:22]docker03]$ docker load -i node-exporter.tar && docker load -i mycadvisor.tar
[09:21:03[docker01]$ 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)($|/)"
//部署node-EXporter,收集硬件和系統信息。
PS: 注意,這里使用了--net=host, 這樣Prometheus Server可以直接與Node-
EXporter通信。
驗證:打開瀏覽器驗證結果。http://192.168.1.11:9100/,http://192.168.1.13:9100/,http://192.168.1.20:9100/
[09:39:10[docker01]$ docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro --detach=true --name=cadvisor --net=host google/cadvisor
驗證:打開瀏覽器驗證結果。http://192.168.1.11:8080,http://192.168.1.13:8080,http://192.168.1.20:8080
在部署prometheus之前,我們需要對它的配置文件進行修改,所以我們先運行一個容器,先將其配置文件拷貝出來。
09:51:22][docker01]$ docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
//打開一臺Prometheus
[09:51:00[docker01]$ docker cp prometheus:/etc/prometheus/prometheus.yml ./
//拷貝Prometheus的配置文件到本地
[09:55:53][docker01][~]$ vim prometheus.yml
//修改配置文件這里指定了prometheus的監控項,包括它也會監控自己手機到的數據。
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.13:8080','192.168.1.13:9100','192.168.1.20:8080','192.168.1.20:9100']
[10:00:27][docker01][~]$ docker rm -f prometheus
//刪除 prometheus容器
[10:02:45][docker01][~]$ docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
//運行一臺新的 prometheus容器
ps:這里能夠查看到我們各個監控項。
如果現在掛起一臺虛擬機(測試完之后繼續運行)
[root@docker01 ~]# mkdir grafana-storage
//創建收集信息的目錄
[root@docker01 ~]# chmod 777 grafana-storage/
//給予777權限
[root@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
(<默認>用戶名:admin,密碼:123.com)
PS:看到這個提示, 說明prometheus和grafana服務的是 正常連接的。
此時,雖然grafana收集到了數據,但怎么顯示它,仍然是個問題,grafana支持自定 義顯示信息,不過要自定義起來非常麻煩,不過好在,grafana官方為我們提供了- -些模板,來供我們使用。
grafana官網:https://grafana.com/docs/grafana/latest/
下載完成之后,來到grafana控制臺
可以直接通過模板的ID號。
//這個id不好用換成8321了
復制模板id之后,來到grafana控制臺
防火墻是否關閉,selinux是否禁用
主機名稱是否更改
鏡像是否正常
各服務啟動時掛載目錄是否正確
grafana服務,是否創建所需目錄,目錄是否有權限
Prometheus服務是否修改配置文件
恭喜!您已經設置了Prometheus服務器,Node Exporter和Grafana 等所有這些都可以使用的Docker。盡管這些目前都在同一臺機器上運行,但這僅用于演示目的。在生產設置中,通常會在每臺受監控的計算機上運行節點導出器,多個Prometheus服務器(根據組織的需要),以及單個Grafana服務器來繪制來自這些服務器的數據。
參考:https://www.cnblogs.com/xiao987334176/p/9930517.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。