天天看點

Prometheus監控運維實戰十一:Pushgateway

Pushgateway為Prometheus整體監控方案的功能元件之一,并做于一個獨立的工具存在。它主要用于Prometheus無法直接拿到監控名額的場景,如監控源位于防火牆之後,Prometheus無法穿透防火牆;目标服務沒有可抓取監控資料的端點等多種情況。

在類似場景中,可通過部署Pushgateway的方式解決問題。當部署該元件後,監控源通過主動發送監控資料到Pushgateway,再由Prometheus定時擷取資訊,實作資源的狀态監控。

Prometheus監控運維實戰十一:Pushgateway

工作流程:

    a. 監控源通過Post方式,發送資料到Pushgateway,路徑為/metrics。

    b. Prometheus服務端設定任務,定時擷取Pushgateway上面的監控名額。

    c. Prometheus拿到監控名額後,根據配置的告警規則,如果比對将觸發告警到Alertmanager;同時,Grafana可配置資料源調用Prometheus資料,做為資料展示。

    d. Alertmanager收到告警後,根據規則轉發到對應接收人及接收媒體;Grafana方面,使用者可登入并根據資料源的監控名額,配置相關的圖表展示 。

下載下傳安裝包

解壓并安裝 

檢視版本号驗證是否正常

啟動服務,預設端口為9091,可通過--web.listen-address更改監聽端口

部署完成後,在浏覽器輸入 http://$IP:9091 即可看到程式界面 

Prometheus監控運維實戰十一:Pushgateway

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位址檢視名額情況

Prometheus監控運維實戰十一:Pushgateway

假如需要删除pushgateway上面存儲的名額資訊,可通過如下方式操作:

删除某個組下某個執行個體的所有資料

删除某個job下所有的資料

Pushgateway隻是名額的臨時存放點,最終我們需要通過Prometheus将其存放到時間序列資料庫裡。對此,我們需要在Prometheus上面建立一個job

Prometheus監控運維實戰十一:Pushgateway

目标任務正常啟動後,可在prometheus檢視到相關的名額資料

Prometheus監控運維實戰十一:Pushgateway

通過Pushgateway方式,Prometheus無法直接檢測到監控源服務的狀态,故此種方式不适用于監控服務的存活狀态等場景。

Pushgateway屬于靜态代理,它接收的名額不存在過期時間,故會一直保留直到該名額被更新或删除。此種情況下,不再使用的名額可能存在于網關中。

如上所言,Pushgateway并不算是完美的解決方案,在監控中更多做為輔助方案存在,用于解決Prometheus無法直接擷取資料的場景。

繼續閱讀