使用Python推送指標資料到Pushgateway
需求描述
實踐環境
Python 3.6.5
Django 3.0.6
prometheus-client 0.11.0
代碼實作
!/usr/bin/env python
-*- coding:utf-8 -*-
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
if __name__ == '__main__':
registry = CollectorRegistry()
labels = ['req_status', 'req_method', 'req_url']
g_one = Gauge('requests_total', 'url請求次數', labels, registry=registry)
g_two = Gauge('avg_response_time_seconds', '1分鐘內的URL平均回應時間', labels, registry=registry)
g_one.labels('200','GET', '/test/url').set(1) #set設定值
g_two.labels('200','GET', '/test/api/url/').set(10) #set設定值
push_to_gateway('http://162.13.0.83:9091', job='SampleURLMetrics', registry=registry)
注意:采用這種方式是無法為指標資料提供資料生成時間戳的,具體下文說明
查看運行結果
瀏覽器訪問推送網關地址http://162.13.0.83:9091,如下

關于時間戳(timestamp)
如果你在 t1 時刻推送Metric,你可能認為普羅米修斯會“刮取(scrap)”這些指標,并使用相同時間戳 t1 作為對應時序資料的時間戳,然而,普羅米修斯不會這樣做,它會把從推送網關(Pushgateway)“刮取”資料時的時間戳當作指標資料對應的時間戳,為什么會這樣?
在普羅米修斯的世界觀中,一個Metric可以在任何時候被刮取,一個無法被”刮取”的Metric基本上是不存在了,對此,普羅米修斯多少還是有點“容忍”的,但是如果它不能在 5 分鐘內獲得一個Metric的任何樣本,那么它就會表現得好像該Metric不再存在一樣,為了防止這種情況發生,實際上是使用Pushgateway的原因之一,Pushgateway將使你的臨時job在任何時候都可以被刮取,也就是說任何時刻都可以采集到你推送的資料,將推送時間附加為時間戳將無法達到這一目的,因為在最后一次推送5分鐘之后,普羅米修斯會認為你的Metric已經過時,就好像它再也不能被“刮取”一樣,(普羅米修斯只能識別每個樣本的一個時間戳,無法區分“推壓時間”和“刮取時間”,)
由于沒有任何讓附加不同的時間戳有意義的場景,并且許多用戶試圖錯誤地這樣做(盡管沒有客戶端庫支持),Pushgateway拒絕任何帶有時間戳的推送,
為了更容易對失敗的推送器或最近未運行的Pusher發出警報,Pushgateway將在push_time_seconds和push_failure_time_seconds Metric中給每個組添加最后一次成功和失敗的POST、PUT的Unix時間戳,這將覆寫使用該名稱推送的任何Metric,兩個Metric的值均為零表示該組從未見過成功或失敗的POST、PUT,
作者:授客
QQ:1033553122
全國軟體測驗QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞后如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測驗交流QQ群
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353576.html
標籤:Python
