大型购物网站建设,中国建筑工程考试网,十堰微网站建设报价,app平台有哪些这个普罗米修斯的指标啊#xff0c;大多数都是键值对#xff0c;而且笔者如果没记错#xff0c;他这个值还必须是浮点。少数可以设成离散值#xff08;Enum#xff09;#xff0c;但本质还是一个带翻译功能的键值对
这样的好处是#xff0c;做起来非常简单#xff0c;…
这个普罗米修斯的指标啊大多数都是键值对而且笔者如果没记错他这个值还必须是浮点。少数可以设成离散值Enum但本质还是一个带翻译功能的键值对
这样的好处是做起来非常简单而且很容易塞到内存里然后因为指标拿过来肯定要做进一步的计算加减乘除之类的也会比较方便。但是如果我们要建一个table也就是一个固定键后面跟多个可变量。就只能用 merge 或者 join 来做用grafana来建表就需要多整几步。
这个帖子笔者会展示如何在grafana里面设置一个多变量一行的表格table出来
本文是作者的小笔记同时也是这篇文章的补充如果有需要请移步官网文档系统查看搭建一个grafana Prometheus node-exporter pushgateway alertmanager的监控解决方案-CSDN博客
Grafana documentation | Grafana documentation
一、【背景描述】
有若干个消费者理解为客户端或者任务每天他们会来到窗口前排队他们每个人都有三个属性结构体分别是 排队号索引index 健康度status 上一次服务时间last acc time
分析一下这本质是一个以消费者姓名UUID或者name为唯一索引后面跟着多个变量的结构那么我们分析如果制成表至少有以下需求
监控的展示是一个表格以排队号index做排序索引不能是字符串排序而是数字排序因为grafana默认是字符串排序的…排队号index每天都会产生变化因此排队表格中人员的位置要同时变更消费者姓名UUID或name为常量其余为变量考虑到Prometheus指标都是键值对我们要避免变量发生变化的时候不产生新的行而是在原有位置更改数据需要新建多个指标随后对多个指标做join或者merge操作 二、【设计指标】
我们直接python写脚本起三个指标分别是indexstatuslast_time。类型笔者这里用Gauge仪表盘 其中
status可以约定200为正常400是没到last_time用时间戳翻译成时间prometheus的value必须是浮点所以用时间戳比较合适不过注意grafana的时间戳是13位所以建议乘一个1000
import prometheus_clientdef urfunction(person):passvars_dicts[fperson_index_{person}].labels(nameperson).set(2)vars_dicts[f{person}_status].labels(nameperson).set(200)vars_dicts[f{person}_last_time].labels(nameperson).set(1717152964000)if __name__ __main__:pass# 这里注意一下如果这个laoban有时候会不来那么要考虑他不来的情况防止no data带崩整个程序person_List [laowang,xiaobaober,dahuang,heinu,laoban]## 用字典初始化变量一来方便管理二来方便变量回收vars_dict {}for person in person_List:vars_dict[fperson_index_{person}] Gauge(f{person}_index,index of each person, [name])vars_dict[fperson_status_{person}] Gauge(f{person}_status, Status of each person, [name])vars_dict[fperson_lasttime_{person}] Gauge(f{person}_last_time, time of each person, [name])## end init vars# UP Exporterstart_http_server(8848)while True:for person in person_List:urfunction(laowang) # 可以写一个函数更新我们的指标
# 每10秒更新一次指标这个时间不准就图一乐
# 想要更准确用timer或者硬件中断做 time.sleep(10)
然后把指标脚本跑起即可并且在prometheus处确定exporter已成功连接
python3 ur_script.py
三、【设计图表】
设计完自定义的指标接下来我们需要在grafana中配置一下图表因为是多个指标我们做到一个表中需要弄一些变换。
1. 进入你的grafana—— dashboards —— 新建一个visualization 2. 右侧选取图表类型为Table并添加我们之前设置的三个指标add query 3. 添加 transform data
1filter fields by name
隐藏不需要的列我们在grafana中引用指标的时候会额外显示Time __name__ instance job我们这里不但用不上他还会阻碍我们后续对指标进行合并merge很好理解多余的列会让merge失效从而产生多行而不是一行 2merge series/tables
直接加就好了没什么好说的 3Oraganize field by name
本质就是重命名因为prometheus的指标本质是一个键值对值是没有名字的只会显示val1val2所以我们用这个给他重新起个名字 4Convert field type
数值类型转换把 prometheus 取到的浮点转化为我们需要的类型。
对index变为num方便按照数字而非字符排序
对时间将其转换为时间格式方便查看 5sort by
排个序如果不用这个可以鼠标点击table的表头也能升序降序但是会有一个箭头在上面不好看 4. 效果图 5. 思考
这个监控的设计本质是要求每天来的消费者都一样才能正常工作如果出现了新旧消费者变更则会出现index混乱重复的情况我们如何设计一个完全不受此限制的图表
四、【参考】 client_python (prometheus.github.io) Getting started | Prometheus