日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

如何基于Python和Flask編寫Prometheus監控

瀏覽:201日期:2022-07-04 13:48:55

介紹

Prometheus 的基本原理是通過 HTTP 周期性抓取被監控組件的狀態。

任意組件只要提供對應的 HTTP 接口并且符合 Prometheus 定義的數據格式,就可以接入 Prometheus 監控。

Prometheus Server 負責定時在目標上抓取 metrics(指標)數據并保存到本地存儲。它采用了一種 Pull(拉)的方式獲取數據,不僅降低客戶端的復雜度,客戶端只需要采集數據,無需了解服務端情況,也讓服務端可以更加方便地水平擴展。

如果監控數據達到告警閾值,Prometheus Server 會通過 HTTP 將告警發送到告警模塊 alertmanger,通過告警的抑制后觸發郵件或者 Webhook。Prometheus 支持 PromQL 提供多維度數據模型和靈活的查詢,通過監控指標關聯多個 tag 的方式,將監控數據進行任意維度的組合以及聚合。

在python中實現服務器端,對外提供接口。在Prometheus中配置請求網址,Prometheus會定期向該網址發起申請獲取你想要返回的數據。

另外Prometheus提供4種類型Metrics:Counter, Gauge, Summary和Histogram。

準備

pip install flaskpip install prometheus_client

Counter

Counter可以增長,并且在程序重啟的時候會被重設為0,常被用于訪問量,任務個數,總處理時間,錯誤個數等只增不減的指標。

定義它需要2個參數,第一個是metrics的名字,第二個是metrics的描述信息:

c = Counter(’c1’, ’A counter’)

counter只能增加,所以只有一個方法:

def inc(self, amount=1): ’’’Increment counter by the given amount.’’’ if amount < 0: raise ValueError(’Counters can only be incremented by non-negative amounts.’) self._value.inc(amount)

測試示例:

import prometheus_clientfrom prometheus_client import Counterfrom prometheus_client.core import CollectorRegistryfrom flask import Response, Flaskapp = Flask(__name__)requests_total = Counter(’c1’,’A counter’)@app.route('/api/metrics/count/')def requests_count(): requests_total.inc(1) # requests_total.inc(2) return Response(prometheus_client.generate_latest(requests_total),mimetype='text/plain')if __name__ == '__main__': app.run(host='127.0.0.1',port=8081)

訪問http://127.0.0.1:8081/api/metrics/count/:

# HELP c1_total A counter# TYPE c1_total counterc1_total 1.0# HELP c1_created A counter# TYPE c1_created gaugec1_created 1.6053265493727107e+09

HELP是c1的注釋說明,創建Counter定義的。

TYPE是c1的類型說明。

c1_total為我們定義的指標輸出:你會發現多了后綴_total,這是因為OpenMetrics與Prometheus文本格式之間的兼容性,OpenMetrics需要_total后綴。

gauge

gauge可增可減,可以任意設置。

比如可以設置當前的CPU溫度,內存使用量,磁盤、網絡流量等等。

定義和counter基本一樣:

from prometheus_client import Gaugeg = Gauge(’my_inprogress_requests’, ’Description of gauge’)g.inc() # Increment by 1g.dec(10) # Decrement by given valueg.set(4.2) # Set to a given value

方法:

def inc(self, amount=1): ’’’Increment gauge by the given amount.’’’ self._value.inc(amount)def dec(self, amount=1): ’’’Decrement gauge by the given amount.’’’ self._value.inc(-amount) def set(self, value): ’’’Set gauge to the given value.’’’ self._value.set(float(value))

測試示例:

import randomimport prometheus_clientfrom prometheus_client import Gaugefrom prometheus_client.core import CollectorRegistryfrom flask import Response, Flaskapp = Flask(__name__)random_value = Gauge('g1', ’A gauge’)@app.route('/api/metrics/gauge/')def r_value(): random_value.set(random.randint(0, 10)) return Response(prometheus_client.generate_latest(random_value), mimetype='text/plain')if __name__ == '__main__': app.run(host='127.0.0.1',port=8081)

訪問http://127.0.0.1:8081/api/metrics/gauge/

# HELP g1 A gauge# TYPE g1 gaugeg1 5.0

LABELS的用法

使用labels來區分metric的特征,一個指標可以有其中一個label,也可以有多個label。

from prometheus_client import Counterc = Counter(’requests_total’, ’HTTP requests total’, [’method’, ’clientip’])c.labels(’get’, ’127.0.0.1’).inc()c.labels(’post’, ’192.168.0.1’).inc(3)c.labels(method='get', clientip='192.168.0.1').inc()

import randomimport prometheus_clientfrom prometheus_client import Gaugefrom flask import Response, Flaskapp = Flask(__name__)c = Gauge('c1', ’A counter’,[’method’,’clientip’])@app.route('/api/metrics/counter/')def r_value(): c.labels(method=’get’,clientip=’192.168.0.%d’ % random.randint(1,10)).inc() return Response(prometheus_client.generate_latest(c), mimetype='text/plain')if __name__ == '__main__': app.run(host='127.0.0.1',port=8081)

連續訪問9次http://127.0.0.1:8081/api/metrics/counter/:

# HELP c1 A counter# TYPE c1 gaugec1{clientip='192.168.0.7',method='get'} 2.0c1{clientip='192.168.0.1',method='get'} 1.0c1{clientip='192.168.0.8',method='get'} 1.0c1{clientip='192.168.0.5',method='get'} 2.0c1{clientip='192.168.0.4',method='get'} 1.0c1{clientip='192.168.0.10',method='get'} 1.0c1{clientip='192.168.0.2',method='get'} 1.0

histogram

這種主要用來統計百分位的,什么是百分位?英文叫做quantiles。

比如你有100條訪問請求的耗時時間,把它們從小到大排序,第90個時間是200ms,那么我們可以說90%的請求都小于200ms,這也叫做”90分位是200ms”,能夠反映出服務的基本質量。當然,也許第91個時間是2000ms,這就沒法說了。

實際情況是,我們每天訪問量至少幾個億,不可能把所有訪問數據都存起來,然后排序找到90分位的時間是多少。因此,類似這種問題都采用了一些估算的算法來處理,不需要把所有數據都存下來,這里面數學原理比較高端,我們就直接看看prometheus的用法好了。

首先定義histogram:

h = Histogram(’hh’, ’A histogram’, buckets=(-5, 0, 5))

第一個是metrics的名字,第二個是描述,第三個是分桶設置,重點說一下buckets。

這里(-5,0,5)實際劃分成了幾種桶:(無窮小,-5],(-5,0],(0,5],(5,無窮大)。

如果我們喂給它一個-8:

h.observe(8)

那么metrics會這樣輸出:

# HELP hh A histogram# TYPE hh histogramhh_bucket{le='-5.0'} 0.0hh_bucket{le='0.0'} 0.0hh_bucket{le='5.0'} 0.0hh_bucket{le='+Inf'} 1.0hh_count 1.0hh_sum 8.0

hh_sum記錄了observe的總和,count記錄了observe的次數,bucket就是各種桶了,le表示<=某值。

可見,值8<=無窮大,所以只有最后一個桶計數了1次(注意,桶只是計數,bucket作用相當于統計樣本在不同區間的出現次數)。

bucket的劃分需要我們根據數據的分布拍腦袋指定,合理的劃分可以讓promql估算百分位的時候更準確,我們使用histogram的時候只需要知道先分好桶,再不斷的打點即可,最終百分位的計算可以基于histogram的原始數據完成。

測試示例:

import randomimport prometheus_clientfrom prometheus_client import Histogramfrom flask import Response, Flaskapp = Flask(__name__)h = Histogram('h1', ’A Histogram’, buckets=(-5, 0, 5))@app.route('/api/metrics/histogram/')def r_value(): h.observe(random.randint(-5, 5)) return Response(prometheus_client.generate_latest(h), mimetype='text/plain')if __name__ == '__main__': app.run(host='127.0.0.1',port=8081)

連續訪問http://127.0.0.1:8081/api/metrics/histogram/:

# HELP h1 A Histogram# TYPE h1 histogramh1_bucket{le='-5.0'} 0.0h1_bucket{le='0.0'} 5.0h1_bucket{le='5.0'} 10.0h1_bucket{le='+Inf'} 10.0h1_count 10.0# HELP h1_created A Histogram# TYPE h1_created gaugeh1_created 1.6053319432993534e+09

summary

python客戶端沒有完整實現summary算法,這里不介紹。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品视频一二三区| 免费欧美在线视频| 国产精品99久久精品| 羞羞答答国产精品www一本| 欧美日韩亚洲一区二区三区在线| 麻豆网站免费在线观看| 日本久久一区| 亚洲有吗中文字幕| 久久麻豆视频| 国产一级一区二区| av亚洲一区二区三区| 精品网站aaa| 欧美一区二区三区免费看| 亚洲欧美日本国产专区一区| 少妇久久久久| 免费在线观看一区| 国产精品极品| 国产探花一区| 国产精品毛片久久久| 欧美日韩一区二区高清| 日本强好片久久久久久aaa| 日韩制服丝袜av| 日韩一区精品字幕| 99成人在线| 91精品成人| 99视频一区| 婷婷五月色综合香五月| 日本久久二区| 久久免费视频66| 成人在线免费观看网站| 日韩毛片一区| 国产精品v亚洲精品v日韩精品| 91精品日本| 欧美黑人巨大videos精品| 久久天堂影院| 亚洲福利一区| 男女男精品网站| 国产精品网在线观看| 国产一区二区色噜噜| 久久精品毛片| 欧美日一区二区| 国产精品毛片| 欧美三区不卡| 成人福利视频| 石原莉奈一区二区三区在线观看 | 欧美激情日韩| 伊人成人网在线看| 亚洲精品在线a| av中文资源在线资源免费观看| 亚洲激情不卡| 久久女人天堂| 国产农村妇女精品一区二区| 日韩精品国产欧美| 四虎国产精品免费观看| 四虎884aa成人精品最新| 亚洲另类av| 女生影院久久| 亚洲91网站| 欧美日韩中文字幕一区二区三区| 日韩手机在线| 91久久久精品国产| 久久免费影院| 亚洲精品伊人| 欧美成人综合| 免费在线亚洲欧美| 亚洲免费观看高清完整版在线观| 日本蜜桃在线观看视频| 日韩国产91| 久久精品高清| 黄色aa久久| 日韩 欧美一区二区三区| 免费一级欧美片在线观看网站| 欧产日产国产精品视频| 亚洲天堂1区| 日本精品影院| 国产欧美日韩精品一区二区免费 | 欧美国产免费| 欧美一区成人| 国产免费播放一区二区| 亚洲高清久久| 涩涩av在线| 天堂√中文最新版在线| 国产一区二区精品福利地址| 国产免费av国片精品草莓男男| 亚洲1区在线| 91欧美极品| 欧美一区成人| 美女视频免费精品| 麻豆国产欧美一区二区三区| 久久国产生活片100| 国产精一区二区| 日韩av在线播放网址| a日韩av网址| 亚洲午夜电影| 精品视频黄色| 日韩电影免费网站| 亚洲欧美日本视频在线观看| 美国欧美日韩国产在线播放| 亚洲精品影视| 国产美女精品视频免费播放软件| 另类欧美日韩国产在线| 日韩深夜视频| 国产一区二区高清| 国产日产一区| 日韩精品诱惑一区?区三区| 久久在线视频免费观看| 久久xxxx精品视频| 国产精品v亚洲精品v日韩精品| 精品久久不卡| 久久精品欧洲| 国精品一区二区| 国产日韩欧美一区二区三区 | 国产综合婷婷| 日韩欧美中文字幕电影| 久久av综合| 尤物精品在线| 加勒比视频一区| 日本欧美在线看| 国产日韩一区| 精品一区欧美| 日韩高清二区| 91精品国产调教在线观看| 亚洲一卡久久| 亚洲手机视频| 精品中国亚洲| 日本精品在线播放| 欧美特黄一级大片| 欧美极品中文字幕| 亚洲精品裸体| 国产韩日影视精品| 国产精品日韩精品中文字幕| 尤物精品在线| 久久久久久久久99精品大| 亚洲精品福利| 亚洲一区激情| 国产一区二区三区不卡视频网站| 国产精品久久久亚洲一区| 日韩精品久久久久久| 美女久久一区| 亚洲色诱最新| 欧美69视频| 欧美aⅴ一区二区三区视频| 久久麻豆视频| 里番精品3d一二三区| 国产精品久久久久9999高清| 日本欧美久久久久免费播放网| 人人爽香蕉精品| 亚洲一区导航| 在线综合亚洲| 国产高清一区二区| 亚洲免费激情| 视频一区视频二区中文字幕| 国产日韩综合| 少妇精品在线| 精品美女久久| 91精品啪在线观看国产18| 久久国产影院| 99riav1国产精品视频| 首页国产欧美久久| 亚洲欧美日本视频在线观看| 久久激情综合网| 色欧美自拍视频| 激情婷婷亚洲| 欧美日韩国产高清| 亚洲一区二区三区中文字幕在线观看| 国产欧美日韩精品高清二区综合区 | 久久gogo国模啪啪裸体| 久久久久亚洲精品中文字幕| 日韩高清二区| 久久精品高清| 奇米亚洲欧美| 日韩a一区二区| 午夜免费一区| 国产剧情在线观看一区| 久久爱www成人| 中文字幕一区二区三区在线视频| 国产欧美高清视频在线| 久久国产直播| 97久久中文字幕| 久久久久中文| 成人国产精品久久| 午夜亚洲福利| 久久精品中文| 国产日韩中文在线中文字幕| 福利精品一区| 亚洲国产不卡| 欧美成人国产| 日韩av中文在线观看| 日韩精品水蜜桃| 国产乱码精品一区二区亚洲| 激情综合在线| 久久激情中文| 国产精品.xx视频.xxtv| 久久午夜精品一区二区| 在线看片福利| 国产精品久久久久久久久久齐齐| 亚洲a成人v| 日韩中文字幕麻豆| 欧美 日韩 国产精品免费观看| 国产精品高清一区二区|