电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

使用 prometheus python 庫編寫自定義指標的方法(完整代碼)

瀏覽:99日期:2022-07-19 13:29:11

雖然 prometheus 已有大量可直接使用的 exporter 可供使用,以滿足收集不同的監控指標的需要。例如,node exporter 可以收集機器 cpu,內存等指標,cadvisor 可以收集容器指標。然而,如果需要收集一些定制化的指標,還是需要我們編寫自定義的指標。

本文講述如何使用 prometheus python 客戶端庫和 flask 編寫 prometheus 自定義指標。

安裝依賴庫

我們的程序依賴于flask 和prometheus client 兩個庫,其 requirements.txt 內容如下:

flask==1.1.2prometheus-client==0.8.0

運行 flask

我們先使用 flask web 框架將 /metrics 接口運行起來,再往里面添加指標的實現邏輯。

#!/usr/bin/env python# -*- coding:utf-8 -*-from flask import Flaskapp = Flask(__name__)@app.route(’/metrics’)def hello(): return ’metrics’if __name__ == ’__main__’: app.run(host=’0.0.0.0’, port=5000)

打開瀏覽器,輸入 http://127.0.0.1:5000/metrics,按下回車后瀏覽器顯示 metrics 字符。

編寫指標

Prometheus 提供四種指標類型,分別為 Counter,Gauge,Histogram 和 Summary。

Counter

Counter 指標只增不減,可以用來代表處理的請求數量,處理的任務數量,等。

可以使用 Counter 定義一個 counter 指標:

counter = Counter(’my_counter’, ’an example showed how to use counter’)

其中,my_counter 是 counter 的名稱,an example showed how to use counter 是對該 counter 的描述。

使用 counter 完整的代碼如下:

#!/usr/bin/env python# -*- coding:utf-8 -*-from flask import Flask, Responsefrom prometheus_client import Counter, generate_latestapp = Flask(__name__)counter = Counter(’my_counter’, ’an example showed how to use counter’)@app.route(’/metrics’)def hello(): counter.inc(1) return Response(generate_latest(counter), mimetype=’text/plain’)if __name__ == ’__main__’: app.run(host=’0.0.0.0’, port=5000)

訪問 http://127.0.0.1:5000/metrics,瀏覽器輸出:

# HELP my_counter_total an example showed how to use counter# TYPE my_counter_total countermy_counter_total 6.0# HELP my_counter_created an example showed how to use counter# TYPE my_counter_created gaugemy_counter_created 1.5932468510424378e+09

在定義 counter 指標時,可以定義其 label 標簽:

counter = Counter(’my_counter’, ’an example showed how to use counter’, [’machine_ip’])

在使用時指定標簽的值:

counter.labels(’127.0.0.1’).inc(1)

這時瀏覽器會將標簽輸出:

my_counter_total{machine_ip='127.0.0.1'} 1.0

Gauge

Gauge 指標可增可減,例如,并發請求數量,cpu 占用率,等。

可以使用 Gauge 定義一個 gauge 指標:

registry = CollectorRegistry()gauge = Gauge(’my_gauge’, ’an example showed how to use gauge’, [’machine_ip’], registry=registry)

為使得 /metrics 接口返回多個指標,我們引入了 CollectorRegistry ,并設置 gauge 的 registry 屬性。

使用 set 方法設置 gauge 指標的值:

gauge.labels(’127.0.0.1’).set(2)

訪問 http://127.0.0.1:5000/metrics,瀏覽器增加輸出:

# HELP my_gauge an example showed how to use gauge# TYPE my_gauge gaugemy_gauge{machine_ip='127.0.0.1'} 2.0

Histogram

Histogram 用于統計樣本數值落在不同的桶(buckets)里面的數量。例如,統計應用程序的響應時間,可以使用 histogram 指標類型。

使用 Histogram 定義一個 historgram 指標:

buckets = (100, 200, 300, 500, 1000, 3000, 10000, float(’inf’))histogram = Histogram(’my_histogram’, ’an example showed how to use histogram’, [’machine_ip’], registry=registry, buckets=buckets)

如果我們不使用默認的 buckets,可以指定一個自定義的 buckets,如上面的代碼所示。

使用 observe() 方法設置 histogram 的值:

histogram.labels(’127.0.0.1’).observe(1001)

訪問 /metrics 接口,輸出:

# HELP my_histogram an example showed how to use histogram# TYPE my_histogram histogrammy_histogram_bucket{le='100.0',machine_ip='127.0.0.1'} 0.0my_histogram_bucket{le='200.0',machine_ip='127.0.0.1'} 0.0my_histogram_bucket{le='300.0',machine_ip='127.0.0.1'} 0.0my_histogram_bucket{le='500.0',machine_ip='127.0.0.1'} 0.0my_histogram_bucket{le='1000.0',machine_ip='127.0.0.1'} 0.0my_histogram_bucket{le='3000.0',machine_ip='127.0.0.1'} 1.0my_histogram_bucket{le='10000.0',machine_ip='127.0.0.1'} 1.0my_histogram_bucket{le='+Inf',machine_ip='127.0.0.1'} 1.0my_histogram_count{machine_ip='127.0.0.1'} 1.0my_histogram_sum{machine_ip='127.0.0.1'} 1001.0# HELP my_histogram_created an example showed how to use histogram# TYPE my_histogram_created gaugemy_histogram_created{machine_ip='127.0.0.1'} 1.593260699767071e+09

由于我們設置了 histogram 的樣本值為 1001,可以看到,從 3000 開始,xxx_bucket 的值為 1。由于只設置一個樣本值,故 my_histogram_count 為 1 ,且樣本總數 my_histogram_sum 為 1001。讀者可以自行試驗幾次,慢慢體會 histogram 指標的使用,遠比看網上的文章理解得快。

Summary

Summary 和 histogram 類型類似,可用于統計數據的分布情況。

定義 summary 指標:

summary = Summary(’my_summary’, ’an example showed how to use summary’, [’machine_ip’], registry=registry)

設置 summary 指標的值:

summary.labels(’127.0.0.1’).observe(randint(1, 10))

訪問 /metrics 接口,輸出:

# HELP my_summary an example showed how to use summary# TYPE my_summary summarymy_summary_count{machine_ip='127.0.0.1'} 4.0my_summary_sum{machine_ip='127.0.0.1'} 16.0# HELP my_summary_created an example showed how to use summary# TYPE my_summary_created gaugemy_summary_created{machine_ip='127.0.0.1'} 1.593263241728389e+09

附:完整源代碼

#!/usr/bin/env python# -*- coding:utf-8 -*-from random import randintfrom flask import Flask, Responsefrom prometheus_client import Counter, Gauge, Histogram, Summary, generate_latest, CollectorRegistryapp = Flask(__name__)registry = CollectorRegistry()counter = Counter(’my_counter’, ’an example showed how to use counter’, [’machine_ip’], registry=registry)gauge = Gauge(’my_gauge’, ’an example showed how to use gauge’, [’machine_ip’], registry=registry)buckets = (100, 200, 300, 500, 1000, 3000, 10000, float(’inf’))histogram = Histogram(’my_histogram’, ’an example showed how to use histogram’, [’machine_ip’], registry=registry, buckets=buckets)summary = Summary(’my_summary’, ’an example showed how to use summary’, [’machine_ip’], registry=registry)@app.route(’/metrics’)def hello(): counter.labels(’127.0.0.1’).inc(1) gauge.labels(’127.0.0.1’).set(2) histogram.labels(’127.0.0.1’).observe(1001) summary.labels(’127.0.0.1’).observe(randint(1, 10)) return Response(generate_latest(registry), mimetype=’text/plain’)if __name__ == ’__main__’: app.run(host=’0.0.0.0’, port=5000)

參考資料

https://github.com/prometheus/client_pythonhttps://prometheus.io/docs/concepts/metric_types/https://prometheus.io/docs/instrumenting/writing_clientlibs/https://prometheus.io/docs/instrumenting/exporters/https://pypi.org/project/prometheus-client/https://prometheus.io/docs/concepts/metric_types/http://www.coderdocument.com/docs/prometheus/v2.14/best_practices/histogram_and_summary.htmlhttps://prometheus.io/docs/practices/histograms/

總結

到此這篇關于使用 prometheus python 庫編寫自定義指標的文章就介紹到這了,更多相關prometheus python 庫編寫自定義指標內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 酒精检测棒,数显温湿度计,酒安酒精测试仪,酒精检测仪,呼气式酒精检测仪-郑州欧诺仪器有限公司 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 矿用履带式平板车|探水钻机|气动架柱式钻机|架柱式液压回转钻机|履带式钻机-启睿探水钻机厂家 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 英语词典_成语词典_日语词典_法语词典_在线词典网| 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 深圳市简易检测技术有限公司| 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 医用酒精_84消毒液_碘伏消毒液等医用消毒液-漓峰消毒官网 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 博医通医疗器械互联网供应链服务平台_博医通| 制氮设备_PSA制氮机_激光切割制氮机_氮气机生产厂家-苏州西斯气体设备有限公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 便携式谷丙转氨酶检测仪|华图生物科技百科 | 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 中宏网-今日新闻-财经新闻 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | 造价工程师网,考试时间查询,报名入口信息-网站首页 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 电子巡更系统-巡检管理系统-智能巡检【金万码】 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 365文案网_全网创意文案句子素材站 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 营养师网,营养师考试时间,报名入口—网站首页 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 科箭WMS仓库管理软件-TMS物流管理系统-科箭SaaS云服务 |