使用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
,如下
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0kjNxcDN4gjNx0SN1MTMyUjMyITOxATMxIDMy0iM1QTO2UTMvwFMxEjMwIzLcJTN0kjN1EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
關于時間戳(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群