【grafana】创建多变量table

这个普罗米修斯的指标啊,大多数都是键值对,而且笔者如果没记错,他这个值还必须是浮点。少数可以设成离散值(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)为唯一索引,后面跟着多个变量的结构,那么我们分析如果制成表,至少有以下需求

  1. 监控的展示是一个表格,以排队号(index)做排序索引,不能是字符串排序而是数字排序(因为grafana默认是字符串排序的…)
  2. 排队号(index)每天都会产生变化,因此排队表格中,人员的位置要同时变更
  3. 消费者姓名(UUID或name)为常量,其余为变量,考虑到Prometheus指标都是键值对,我们要避免变量发生变化的时候,不产生新的行,而是在原有位置更改数据(需要新建多个指标,随后对多个指标做join或者merge操作)

 

二、【设计指标】

我们直接python写脚本,起三个指标,分别是index,status,last_time。类型笔者这里用Gauge(仪表盘)

 其中

  • status可以约定200为正常,400是没到;
  • last_time用时间戳翻译成时间(prometheus的value必须是浮点,所以用时间戳比较合适,不过注意,grafana的时间戳是13位,所以建议乘一个1000)
import prometheus_client

def urfunction(person):
    pass
    vars_dicts[f'person_index_{person}'].labels(name=person).set(2)
    vars_dicts[f'{person}_status'].labels(name=person).set(200)
    vars_dicts[f'{person}_last_time'].labels(name=person).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[f'person_index_{person}'] = Gauge(f'{person}_index',
                                    'index of each person', ['name'])
        vars_dict[f'person_status_{person}']  = Gauge(f'{person}_status', 
                                    'Status of each person', 
                                    ['name'])
        vars_dict[f'person_lasttime_{person}']= Gauge(f'{person}_last_time', 
                                    'time of each person', 
                                    ['name'])
    ## end init vars
    
    # UP Exporter
    start_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

(1)filter fields by name

隐藏不需要的列,我们在grafana中引用指标的时候,会额外显示Time __name__ instance job,我们这里不但用不上,他还会阻碍我们后续对指标进行合并(merge),很好理解,多余的列会让merge失效,从而产生多行而不是一行

(2)merge series/tables

直接加就好了,没什么好说的

(3)Oraganize field by name

本质就是重命名,因为prometheus的指标本质是一个键值对,值是没有名字的,只会显示val1,val2,所以我们用这个给他重新起个名字

(4)Convert field type

数值类型转换,把 prometheus 取到的浮点转化为我们需要的类型。

对index变为num方便按照数字而非字符排序;

对时间将其转换为时间格式,方便查看;

(5)sort by

排个序,如果不用这个,可以鼠标点击table的表头,也能升序降序,但是会有一个箭头在上面,不好看

 4. 效果图

5. 思考

这个监控的设计,本质是要求每天来的消费者都一样,才能正常工作,如果出现了新旧消费者变更,则会出现index混乱重复的情况,我们如何设计一个完全不受此限制的图表?

四、【参考】

  1.  client_python (prometheus.github.io)
  2.  Getting started | Prometheus

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/684008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java环境配置(超详细)

Java环境配置(超详细) 引言1、安装 JDK1.1、下载安装JDK1.2、配置环境变量:JAVA_HOME1.3、将JAVA_HOME添加到Path中 2、安装 Maven2.1、下载安装Maven2.2、配置maven的环境变量: M2_HOME2.3、将Maven变量添加到Path中 引言 Java开发环境的配…

智能水位监测识别报警摄像机:保障水域安全的重要利器

随着城市化进程的加速和气候变化的影响,对水域安全的关注日益增加。为了及时监测水位变化并采取相应措施,智能水位监测识别报警摄像机应运而生。本文将介绍这一创新技术的应用和优势。 传统的水位监测方法通常依赖于传感器,但其存在着安装位置…

如何编辑pdf文件内容?3种PDF编辑方法分享

如何编辑pdf文件内容?在当今数字化时代,PDF文件因其跨平台兼容性和保持原样不变的特点,在办公、学习、生活等多个领域得到了广泛应用。然而,PDF文件的不可编辑性也让许多用户感到困扰。你是否曾经遇到过需要修改PDF文件内容&#…

java8升级到JDK21

一、版本升级 spring-boot升级到3.0以上 如果依赖了springcloud,则需要升级到对应spring-boot3.0的版本,最新依赖都是可行的。 依赖了springcloudAlibaba,则参考文档选择合适的依赖: 版本依赖关系: 文档地址&#x…

【谣传】不能完全取代HR

https://arxiv.org/pdf/2405.18113 这份研究论文提出了 MockLLM,一个利用大型语言模型(LLM)角色扮演能力来促进招聘场景中人和职位匹配的框架。它通过模拟面试过程来生成额外的匹配证据,从而提高匹配的准确性。 主要问题和挑战&am…

579页 | 工业数字孪生建模与应用(免费下载)

【1】关注本公众号,转发当前文章到微信朋友圈 【2】私信发送 工业数字孪生建模与应用 【3】获取本方案PDF下载链接,直接下载即可。 如需下载本方案PPT/WORD原格式,请加入微信扫描以下方案驿站知识星球,获取上万份PPT/WORD解决方…

【Java】---- SpringBoot 统一数据返回格式

目录 1. 统一数据返回格式介绍2. 实际应用2.1 添加前后的返回结果区别2.2 存在问题 3. 统一数据返回格式的优点 1. 统一数据返回格式介绍 通过使用ControllerAdvice和引用ResponseBodyAdvice接口来进行实现。 ResponseBodyAdvice这个接口里面有两个方法,分别是: s…

实现教育数字化转型,选择智慧校园软件

在当今数字时代,教育数字化转型已经成为不可忽视的趋势。随着技术的不断发展,智慧校园软件正日益受到教育机构的关注。那么,为什么选择智慧校园软件能够成为实现教育数字化转型的最佳解决方案呢? 首先,智慧校园软件为教…

居民社区团购小程序源码系统 拼团管理+团长管理功能 带完整的安装代拿代码包以及搭建教程

系统概述 居民社区团购小程序源码系统是一款专为社区团购打造的一站式解决方案。它整合了拼团管理和团长管理等核心功能,能够帮助企业和创业者快速搭建自己的社区团购平台,实现高效运营和便捷管理。 代码示例 系统特色功能 1.拼团管理:支持…

用友NC downCourseWare 任意文件读取漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友NC 系统 /portal/pt/downCourseWare…

20240606在RK3588的Android12下使用adb pull出现权限问题Permission denied

adb root adb remount 20240606在RK3588的Android12下使用adb pull出现权限问题Permission denied 2024/6/6 11:48 缘起:想从Toybrick的TB-RK3588的Android12开发板上通过adb pull获取刚刚生成的edid.bin,老是报告权限问题。 百度:adb: error…

Mac 苹果电脑下载安装《植物大战僵尸杂交版2.0.88》详细指南教程(含已损坏打不开等问题解决)

最近植物大战僵尸杂交版可是非常的火爆,各大主播都在玩,可是该游戏作者只发布了win版本,我只有一台 Macbook 一直都很想玩,经过一番折腾终于在Mac上成功安装运行了该游戏,并整理好了,大家想要在 Mac 上安装…

【Altium】AD-原理图中使用多通道问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决在原理图主图中,对子图使用多通道命令后,子图未形成多个通道的问题。 2、 问题场景 客户手中的工程文件,主图中对子图使用了多通道命令,子图图纸并未形成多通道…

语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(三)音频去噪算法大全+Python源码应用

前言 深度学习技术在当今技术市场上面尚有余力和开发空间的,主流落地领域主要有:视觉,听觉,AIGC这三大板块。 目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相…

C# Web控件与数据感应之 填充 HtmlTable

目录 关于 HtmlTable HtmlTable与BaseDataList的区别 准备数据源 ​范例运行环境 FillTable 方法 设计与实现 模板样例输出 Automatic 模式填充 ​ DynamicRows 模式填充 StaticRows 模式填充 ​ 小结 关于 HtmlTable 数据感应也即数据捆绑,是…

前端canvas绘图,利用canvas在图片上面绘制标记以及给canvas添加点击事件。

前端canvas绘图&#xff0c;利用canvas在图片上面绘制标记以及给canvas添加点击事件。 需要实现的效果如下图: 首先需要一个承载的核心画布 <canvas id"canvas" width"800" height"600"></canvas>全部代码&#xff1a; <!DOCT…

Web3的应用场景分析

Web3&#xff0c;即基于区块链技术的去中心化互联网&#xff0c;正逐渐改变我们与数字世界的互动方式。以下是Web3的一些主要应用场景。Web3技术正在各个领域推动创新&#xff0c;创造更多透明、开放和去中心化的解决方案&#xff0c;为用户带来更高的自主权和安全性。北京木奇…

Python语法详解module3(组合数据类型列表、元组、字典、集合详细用法)

目录 一、列表列表的创建多维列表列表的访问和修改列表的添加和删除列表的遍历使用 for 循环遍历使用 while 循环遍历同时遍历索引和元素列表推导式 常用的列表函数len()sort()reverse()index()count()extend()clear() 二、元组创建元组访问元组元素元组的不可变性元组的优点元…

【Linux】(三)—— 文件管理和软件安装

文件管理 Linux的文件管理是系统管理中的核心部分&#xff0c;它涉及到如何组织、访问、修改和保护文件及目录结构。 目录 文件管理基本概念常用命令查看和切换目录创建文件和目录删除文件和目录文件拷贝移动和重命名文件文件查看cat文件查看more查找文件查找文本 数据流和管道…

软件测试报告实际案例模板(项目测试文档doc原件)

软件测试报告在软件开发过程中起着至关重要的作用&#xff0c;主要有以下几个主要原因&#xff1a; 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…