Pushgateway為Prometheus整體監控方案的功能元件之一,并做于一個獨立的工具存在。它主要用于Prometheus無法直接拿到監控名額的場景,如監控源位于防火牆之後,Prometheus無法穿透防火牆;目标服務沒有可抓取監控資料的端點等多種情況。
在類似場景中,可通過部署Pushgateway的方式解決問題。當部署該元件後,監控源通過主動發送監控資料到Pushgateway,再由Prometheus定時擷取資訊,實作資源的狀态監控。
工作流程:
a. 監控源通過Post方式,發送資料到Pushgateway,路徑為/metrics。
b. Prometheus服務端設定任務,定時擷取Pushgateway上面的監控名額。
c. Prometheus拿到監控名額後,根據配置的告警規則,如果比對将觸發告警到Alertmanager;同時,Grafana可配置資料源調用Prometheus資料,做為資料展示。
d. Alertmanager收到告警後,根據規則轉發到對應接收人及接收媒體;Grafana方面,使用者可登入并根據資料源的監控名額,配置相關的圖表展示 。
下載下傳安裝包
解壓并安裝
檢視版本号驗證是否正常
啟動服務,預設端口為9091,可通過--web.listen-address更改監聽端口
部署完成後,在浏覽器輸入 http://$IP:9091 即可看到程式界面
pushgateway的資料推送支援兩種方式,Prometheus Client SDK推送和API推送。
Prometheus本身提供了支援多種語言的SDK,可通過SDK的方式,生成相關的資料,并推送到pushgateway,這也是官方推薦的方案。目前的SDK覆寫語言有官方的
Go
Java or Scala
Python
Ruby
也有許多第三方的,詳情可參見此連結:https://prometheus.io/docs/instrumenting/clientlibs/
示例:
本示例以python為例,講解SDK的使用
注解:
第一、二行代碼:引入相關的Prometheus SDK;
第五行代碼:建立相關的名額,類型為Gauge。其中“gauge_test_metric”為名額名稱,'This is a gauge-test-metric'為名額注釋,['method','path','instance'] 為名額相關的label。
第六行代碼:添加相關的label資訊和名額value 值。
第六行代碼:push資料到pushgateway,'10.12.61.3:9091'為發送位址,job指定該任務名稱。
以上代碼産生的名額資料等同如下 :
通過調用pushgateway API的方式實作資料的推送。
請求格式:
<jobname>将用作Job标簽的值,然後是其他指定的标簽。
示例:
本例中定義了兩個标簽 job=alex-job和instance=instance1,并推送了名額 http_request_total 及其value值,10.12.61.1 為pushgateway位址。
複雜資料發送:
資料推送完成後,可登入pushgateay位址檢視名額情況
假如需要删除pushgateway上面存儲的名額資訊,可通過如下方式操作:
删除某個組下某個執行個體的所有資料
删除某個job下所有的資料
Pushgateway隻是名額的臨時存放點,最終我們需要通過Prometheus将其存放到時間序列資料庫裡。對此,我們需要在Prometheus上面建立一個job
目标任務正常啟動後,可在prometheus檢視到相關的名額資料
通過Pushgateway方式,Prometheus無法直接檢測到監控源服務的狀态,故此種方式不适用于監控服務的存活狀态等場景。
Pushgateway屬于靜态代理,它接收的名額不存在過期時間,故會一直保留直到該名額被更新或删除。此種情況下,不再使用的名額可能存在于網關中。
如上所言,Pushgateway并不算是完美的解決方案,在監控中更多做為輔助方案存在,用于解決Prometheus無法直接擷取資料的場景。