Prometheus 使用Python推送指標數據到Pushgateway


使用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_secondspush_failure_time_seconds Metric中給每個組添加最后一次成功和失敗的POSTPUT的Unix時間戳。這將覆蓋使用該名稱推送的任何Metric。兩個Metric的值均為零表示該組從未見過成功或失敗的POSTPUT


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM