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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

如何基于Python和Flask編寫Prometheus監(jiān)控

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

介紹

Prometheus 的基本原理是通過(guò) HTTP 周期性抓取被監(jiān)控組件的狀態(tài)。

任意組件只要提供對(duì)應(yīng)的 HTTP 接口并且符合 Prometheus 定義的數(shù)據(jù)格式,就可以接入 Prometheus 監(jiān)控。

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

如果監(jiān)控?cái)?shù)據(jù)達(dá)到告警閾值,Prometheus Server 會(huì)通過(guò) HTTP 將告警發(fā)送到告警模塊 alertmanger,通過(guò)告警的抑制后觸發(fā)郵件或者 Webhook。Prometheus 支持 PromQL 提供多維度數(shù)據(jù)模型和靈活的查詢,通過(guò)監(jiān)控指標(biāo)關(guān)聯(lián)多個(gè) tag 的方式,將監(jiān)控?cái)?shù)據(jù)進(jìn)行任意維度的組合以及聚合。

在python中實(shí)現(xiàn)服務(wù)器端,對(duì)外提供接口。在Prometheus中配置請(qǐng)求網(wǎng)址,Prometheus會(huì)定期向該網(wǎng)址發(fā)起申請(qǐng)獲取你想要返回的數(shù)據(jù)。

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

準(zhǔn)備

pip install flaskpip install prometheus_client

Counter

Counter可以增長(zhǎng),并且在程序重啟的時(shí)候會(huì)被重設(shè)為0,常被用于訪問(wèn)量,任務(wù)個(gè)數(shù),總處理時(shí)間,錯(cuò)誤個(gè)數(shù)等只增不減的指標(biāo)。

定義它需要2個(gè)參數(shù),第一個(gè)是metrics的名字,第二個(gè)是metrics的描述信息:

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

counter只能增加,所以只有一個(gè)方法:

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)

測(cè)試示例:

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)

訪問(wèn)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的注釋說(shuō)明,創(chuàng)建Counter定義的。

TYPE是c1的類型說(shuō)明。

c1_total為我們定義的指標(biāo)輸出:你會(huì)發(fā)現(xiàn)多了后綴_total,這是因?yàn)镺penMetrics與Prometheus文本格式之間的兼容性,OpenMetrics需要_total后綴。

gauge

gauge可增可減,可以任意設(shè)置。

比如可以設(shè)置當(dāng)前的CPU溫度,內(nèi)存使用量,磁盤、網(wǎng)絡(luò)流量等等。

定義和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))

測(cè)試示例:

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)

訪問(wèn)http://127.0.0.1:8081/api/metrics/gauge/

# HELP g1 A gauge# TYPE g1 gaugeg1 5.0

LABELS的用法

使用labels來(lái)區(qū)分metric的特征,一個(gè)指標(biāo)可以有其中一個(gè)label,也可以有多個(gè)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)

連續(xù)訪問(wèn)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

這種主要用來(lái)統(tǒng)計(jì)百分位的,什么是百分位?英文叫做quantiles。

比如你有100條訪問(wèn)請(qǐng)求的耗時(shí)時(shí)間,把它們從小到大排序,第90個(gè)時(shí)間是200ms,那么我們可以說(shuō)90%的請(qǐng)求都小于200ms,這也叫做”90分位是200ms”,能夠反映出服務(wù)的基本質(zhì)量。當(dāng)然,也許第91個(gè)時(shí)間是2000ms,這就沒(méi)法說(shuō)了。

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

首先定義histogram:

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

第一個(gè)是metrics的名字,第二個(gè)是描述,第三個(gè)是分桶設(shè)置,重點(diǎn)說(shuō)一下buckets。

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

如果我們喂給它一個(gè)-8:

h.observe(8)

那么metrics會(huì)這樣輸出:

# 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的次數(shù),bucket就是各種桶了,le表示<=某值。

可見,值8<=無(wú)窮大,所以只有最后一個(gè)桶計(jì)數(shù)了1次(注意,桶只是計(jì)數(shù),bucket作用相當(dāng)于統(tǒng)計(jì)樣本在不同區(qū)間的出現(xiàn)次數(shù))。

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

測(cè)試示例:

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)

連續(xù)訪問(wèn)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客戶端沒(méi)有完整實(shí)現(xiàn)summary算法,這里不介紹。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
аⅴ资源天堂资源库在线| 日韩中文字幕高清在线观看| 日韩av资源网| 亚洲欧美日本国产| 亚洲另类黄色| 日韩av网站在线观看| 日本亚洲欧美天堂免费| 欧美不卡视频| 亚洲午夜黄色| 免费日韩一区二区三区| 亚洲精品88| 香蕉久久久久久久av网站| 麻豆精品国产91久久久久久| 亚洲五月婷婷| 成人在线视频免费看| 精品精品久久| 伊人久久在线| 欧美亚洲激情| 欧美在线资源| 香蕉成人久久| 日韩va亚洲va欧美va久久| 亚洲综合精品| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 亚洲影视一区| 日韩和欧美的一区| 国产中文欧美日韩在线| 99国产精品久久久久久久| 国产精品欧美三级在线观看| 久久精品播放| 捆绑调教美女网站视频一区| 亚州精品视频| 亚洲福利精品| 国产亚洲一级| 国产99精品| 美女国产一区| 中文字幕系列一区| 国产99久久| 亚洲丝袜啪啪| 国产一区调教| 亚洲精品少妇| 久久久久伊人| 麻豆国产精品| 日韩在线短视频| 香蕉视频成人在线观看| 日韩一区二区三区精品| 你懂的国产精品| 99精品综合| 国产亚洲福利| 国产精品magnet| 青青草精品视频| 在线 亚洲欧美在线综合一区| 欧美日韩一区二区综合| 日韩中文影院| 99精品美女| 久久午夜视频| 久久久久99| 免费观看亚洲| 亚洲第一精品影视| 鲁大师成人一区二区三区| 国产精品久久久久久久久妇女| 国产麻豆一区| 激情中国色综合| 久久黄色影视| 精品国产aⅴ| 久久久久久美女精品| 久久99偷拍| 久久精品伊人| 麻豆一区二区99久久久久| 久久蜜桃资源一区二区老牛| 国产精品白浆| 欧美日韩一区二区高清| 欧美成人精品三级网站| 在线亚洲免费| 激情视频网站在线播放色| 91久久精品无嫩草影院| 麻豆精品在线| 在线视频精品| 国产欧美日韩在线观看视频| 欧美69视频| 久久99影视| 亚洲香蕉视频| 欧美日韩在线播放视频| 精品国产一区二区三区av片| 欧美专区一区| 999久久久国产精品| 国产精品亚洲四区在线观看| 久热精品在线| 日韩精品第一区| 好吊一区二区三区| 韩国一区二区三区视频| 老司机久久99久久精品播放免费| 国产精品啊v在线| 日本久久成人网| 欧美日韩1区| 丝袜美腿成人在线| 尹人成人综合网| 欧美专区一区| 精品免费av在线| 久久国产视频网| 日本在线一区二区三区| 日韩视频在线一区二区三区| 久久久国产精品一区二区中文| 精品无人区麻豆乱码久久久| 欧美黄色一区| 国产精品一区二区三区av麻| 丝袜诱惑制服诱惑色一区在线观看| 日本精品影院| 国产aa精品| 久久电影tv| 一本大道色婷婷在线| 日韩欧美1区| 蜜桃成人av| 亚洲一级网站| 电影91久久久| 国产成年精品| 亚洲综合精品四区| 欧美特黄视频| 日韩欧美一区二区三区免费看| 97成人超碰| 最新亚洲一区| 91精品一区二区三区综合在线爱| 国内自拍视频一区二区三区| 日韩一区二区三区四区五区| 亚洲一区欧美二区| 午夜久久tv| 国产伊人精品| 欧美日韩国产一区二区三区不卡 | 国产精品videossex久久发布| 日本在线成人| 日韩欧美四区| 91精品在线免费视频| 日韩在线网址| 日韩国产精品久久久久久亚洲| 日本中文字幕一区二区| 免费人成精品欧美精品| 免费看精品久久片| 偷拍亚洲精品| 国产精品xxxav免费视频| 日韩精品免费视频人成| 亚洲啊v在线免费视频| 一区二区国产精品| 国产精品日本一区二区三区在线 | 麻豆视频久久| 欧美日韩亚洲一区三区| 亚洲综合欧美| 亚洲一区二区三区四区五区午夜| 国产传媒在线观看| 日韩精品首页| 99精品美女| 亚州av乱码久久精品蜜桃| 午夜免费一区| 美女精品在线| 日韩一区中文| 欧美国产视频| 视频福利一区| 伊人久久国产| 日韩福利视频网| 国产一区二区三区四区大秀| 成人一二三区| 日韩久久精品网| 欧美天堂亚洲电影院在线观看| 人人香蕉久久| 久久亚洲精品伦理| 亚洲专区在线| 日韩欧美在线精品| 精品久久国产一区| 久久国产直播| 中文一区一区三区免费在线观 | 色爱综合网欧美| 最近高清中文在线字幕在线观看1| 国产欧美一区二区三区米奇| 成人黄色av| 99在线精品视频在线观看| 日韩av影院| 麻豆mv在线观看| 亚洲国产专区校园欧美| 免费观看日韩电影| 日本午夜精品视频在线观看| 国产一区二区三区黄网站| 香蕉国产精品| 欧美精品福利| 亚洲v在线看| 婷婷成人av| 国产一区福利| 免费欧美日韩| 国语精品一区| 免费欧美日韩| 精品国产一区二| 模特精品在线| 久久精品国产99国产| 国产真实久久| 久久国产乱子精品免费女| 欧美13videosex性极品| 日韩精品一区二区三区中文字幕| а√在线中文在线新版| 少妇精品在线| 91精品在线观看国产| 国产精品调教| 另类亚洲自拍| 日本少妇一区|