Grafana 监控面板绘制流程
本篇作者:
IoTDB 社区 -- 张洪胤
本文以 IoTDB V1.0.1 版本为例
本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。
1
监控指标的 Prometheus 格式说明
对于 Metric Name 为 name, Tags 为 K1=V1, ..., Kn=Vn 的监控指标有如下映射,其中 value 为具体值
2
Prometheus 函数说明
2.1
Aggregation operators
参考文档:
https://prometheus.io/docs/prometheus/latest/querying/operators/#aggregation-operators
运算符:
- sum (calculate sum over dimensions)
- min (select minimum over dimensions)
- max (select maximum over dimensions)
- avg (calculate the average over dimensions)
- group (all values in the resulting vector are 1)
- stddev (calculate population standard deviation over dimensions)
- stdvar (calculate population standard variance over dimensions)
- count (count number of elements in the vector)
- count_values (count number of elements with the same value)
- bottomk (smallest k elements by sample value)
- topk (largest k elements by sample value)
- quantile(calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions)
上述所有运算符都可以在所有维度上聚合,也可以通过 without 或者 by 子句来决定聚合方式,对应语法规约为:
<aggr-op> [without|by (<label list>)] ([parameter,] <vector expression>)
or
<aggr-op>([parameter,] <vector expression>) [without|by (<label list>)]
2.2
Functions
参考文档:
https://prometheus.io/docs/prometheus/latest/querying/functions/
2.2.1 rate
1. rate(v range-vector): 计算范围向量中时间序列的每秒平均增长率。单调性中断(例如由于目标重启导致的计数器重置)会自动调整。此外,计算外推到时间范围的末端,允许缺失周期与范围的时间段不完全对齐。
2. 示例:以下示例表达式返回范围向量中每个时间序列在过去 5 分钟内测量的每秒 HTTP 请求速率:
rate(http_requests_total{job="api-server"}[5m])
3. 计算原理:rate 通过计算一个新的直方图来作用于原生直方图,其中每个分量(观测值的总和和计数,桶)是 v 中第一个和最后一个原生直方图中相应分量之间的增长率。
4. 适用场景:适用于警报和缓慢移动的计数器。
5. 注意:当将 rate() 与聚合运算符(例如 sum())或随时间聚合的函数(任何以 _over_time 结尾的函数结合使用时,始终首先采用 rate(),然后进行聚合。否则 rate() 无法在您的目标重新启动时检测到计数器重置。
2.2.2 irate
1. irate(v range-vector):计算范围向量中时间序列的每秒瞬时增长率(基于最后两个数据点)。单调性中断(例如由于目标重启导致的计数器重置)会自动调整。
2. 示例:以下示例表达式通过查找 5 分钟前两个最近的数据点得出 HTTP 请求的每秒速率:
irate(http_requests_total{job="api-server"}[5m])
3. 适用场景:易变的、快速移动的计数器。
4. 注意:当将 irate() 与聚合运算符(例如 sum())或随时间聚合的函数(任何以 _over_time 结尾的函数)结合使用时,始终首先采用 irate(),然后进行聚合。否则,irate() 无法在您的目标重新启动时检测到计数器重置。
3
Grafana 可视化绘制
官方文档参考:https://grafana.com/docs/
3.1
创建 Dashboard
如果已有 Dashboard 跳过本步骤即可
1. 点击左侧边栏 Dashboards -> browse
a. 已有 Dashboard:点击右侧 Import 按钮导入对应的 Dashboard 即可。
b. 创建 Dashboard:点击右侧 New Dashboard 按钮。
2. 进入 Dashboard 后点击右上角设置按钮:
a. 在 General 界面更新 Name,Description,Tag等基础信息,调整 Panel options 为 Shared crosshair,从而保证 tooltip 可以跨 panel 使用。
b. 在 Variables 界面定义本 Dashboard 的变量:
i. 添加 job 变量,类型为 Query,对应的Query Options 是 label_values(job)
ii. 添加 instance 变量,类型为 Query,对应的 Query Options 是 label_values(up{job=~"$job"},instance)
3.2
创建 Panel
优秀绘制参考:
https://play.grafana.org/dashboards
1. 点击右上角:Add Panel,其中 Add a new panel 是添加一个面板,Add a new row 是添加一个行(分组,两个行之间的所有 panel 属于前一个row)。
2. 点击 Add a new Panel,添加一个面板。首先点击右上角,选择当前 Panel 的类型,比较常用的有Time series(时间序列)、Stat(统计)、Gauge(寄存器)等等,可以视情况选择。
3. 以 Timeseries 为例,首先编写对应的 PromQL 执行数据查询。
a. 在 PromQL 中,可以用 $instance 访问到刚刚在 Dashboard 的 Variables 中配置的 instance 变量,job 变量也是类似的。
b. 在 Legend 中,可以通过双中括号访问到对应的监控项的对应 Tag 的具体值,比如在下图的例子中,state="blocked/new/runnable/terminated/timed-waiting/waiting",通过这样的方式修改图例。
c. 可以通过点击 + Query 在当前面板添加更多时间序列。
4. 在右侧的 Panel Options 中可以更新当前面板的标题、描述并设置面板背景是否透明。
5. 在右侧的 Tooltip 中可以选择不同的类型:
a. Single:只显示距离鼠标最近的一条。
b. All:显示鼠标所在时间线的所有条,可以不排 序、升序或降序。
c. Hidden:不显示。
6. 在右侧的 Legend 可以调整不同的图例:
a. Mode:List(列表)、Table(表格)、Hidden(不显示)。
b. Placement:Bottom(放在底部)、Right(放在右侧)。
c. Legend Values:是否要同时显示对应的时间序列的值。
d. 如下示例我们将图例放置在右侧,采用表格的形式,并且显示平均值。
7. 在右侧的 Graph Styles 可以调整线的样式,包括 line、bar 和 point 三类:
a. line:还可以调整插值、线宽、填充透明度、渐变模式、线形、空值连接方法、是否显示等属性。
b. bar:还可以调整类型、线宽、填充透明度、渐变模式、是否显示点等属性。
c. points:还可以调整点大小等属性。
d. 如下示例我们使用线,设置填充透明度为5%,从不显示点。
8. 在右侧的 Axis 可以调整对应的轴信息,包括标签、宽度、纵轴最小值、纵轴最大值等等,一般不需要调整。
9. 在右侧的 Standard options 可以设置单位(有byte, s, ms, us, ns等等,还可以自定义)、显示最小值、显示最大值、精度、展示名称、配色(可以选择单个颜色、根据阈值或者现有配色方案)等。如下示例为自定义单位为 个,最小值设置为 0,最大值设置为 300。
10. 在右侧的 Value mappings 可以添加对应的映射:可以根据值、范围、正则和特殊值(空等)来控制其展示的文本,比如0代表离线,1代表上线,可以通过 value mappings 完成。
11. 在右侧的 Thresholds 则是设置阈值,可以结合 Standard options 中的配色方案使用:
a. 阈值设置:可以设置绝对阈值、相对阈值(和显示最大值、显示最小值有关)。
b. 阈值显示:可以选择不显示阈值、显示阈值线、显示阈值阴影和同时显示阈值线和阴影。
c. 例如设置为 60% 和 80% 的阈值,并且显示阈值吸纳和阴影线。
12. 可以通过 Overrides 来重写部分时间序列的上述某些属性,支持通过名字、名字正则、类型和返回值重写:
a. 重写的属性具有更高的优先级。
b. 例如我可以重写 name 为 waiting 的时间序列的颜色为绿色,如下所示:
13. 至此,已经完成了对于 Panel 创建的简单介绍,可以通过在 Dashboard 中拖拽 Panel 改变其位置,也可以通过拖拽 Panel 的右下角来改变 panel 的大小。
4
导出 Grafana
1. 点击左上角的导出按钮:
2. 点击 Export 标签页,并选择 Export for sharing externally,然后点击 save to file 就将对应的 Dashboard 的 json 文件下载到本地了。
3. 最后,将 Dashboard 的 json 上传到 GitHub (docs/UserGuide/Monitor-Alert文件夹下) 的对应位置即可。
作为全球性开源项目,截至目前,Apache IoTDB 已拥有 244 名贡献者、3.1K Stars、820 Forks、8653 Commits。我们为大家提供了参与指南,欢迎越来越多的小伙伴助力 Apache IoTDB 项目的不断发展与前进,迈出加入 Apache IoTDB 社区的第一步!
相关文章:

Grafana 监控面板绘制流程
本篇作者:IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。1监控指标的 Prometheus 格式说明对于 Metric Name 为 name, Tags 为 K1V1, ..., K…...
一句话设计模式5:责任链模式
责任链模式:步步为营。 文章目录 责任链模式:步步为营。前言一、责任链模式的作用二、如何实现责任链1 既然是责任链,那么就需要一个链路的承载体 ChainBody2 责任链中每一步都是一个抽象类,因为承载体仅仅是构造链路顺序,里面不放置任何具体业务逻辑:步骤抽象类3 具体步骤执行…...

保姆级使用PyTorch训练与评估自己的EVA网络教程
文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址:https://github.com/Fafa-DL/Awesome-Backbones 操作教程:https://www.bilibili.co…...

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch
写在前面: 很多时候想要测试代码运行时间,或者比较2个运行的效率。 最简单的方法就是Sytem.currentTimeMillis记录2开始和结束时间来算 但是Java 代码越执行越快,放在后面的方法会有优势,这个原因受留个眼,以后研究。大概有受类加…...

JavaScript Array(数组)对象
数组对象的作用是:使用单独的变量名来存储一系列的值。参数参数 size 是期望的数组元素个数。返回的数组,length 字段将被设为 size 的值。参数 element ...; elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时,新创建的数组的元…...
干货 | 电容在电路35个基本常识
第1个电压源正负端接了一个电容,与电路并联,用于整流电路时,具有很好的滤波作用,当电压交变时,由于电容的充电作用,两端的电压不能突变,就保证了电压的平稳。当用于电池电源时,具有交…...

日读300篇文献的技巧
感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…...

C++核心编程
一、内存分区模型概述:C程序在执行时,将内存划分为4个区域程序运行前:代码区:存放函数体的二进制代码,由操作系统管理①共享。共享的目的是对于频繁被执行的程序,在内存中只需有一份代码即可②只读。使其只…...

SpringMVC程序开发
目录 SpringMVC 1、MVC定义 2、MVC和SpringMVC之间的关系 学SpringMVC 1、Spring MVC的创建和连接 浏览器获取前端接口和后端程序连接功能实现 2、获取参数 2.1、传递单个参数/多个参数 2.2、传递对象 2.3、传递表单参数 2.4、后端参数重命名 2.5、RequestBody接收J…...
多版本并发控制MVCC
什么是MVCC? MVCC是一种并发控制方法,一般在数据库管理系统中,实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用? 可以在不加锁的情况下解决读写问题,同时还可以解决脏读,幻读&#…...

JavaScript Date(日期)对象
日期对象用于处理日期和时间。在线实例返回当日的日期和时间如何使用 Date() 方法获得当日的日期。getFullYear()使用 getFullYear() 获取年份。getTime()getTime() 返回从 1970 年 1 月 1 日至今的毫秒数。setFullYear()如何使用 setFullYear() 设置具体的日期。toUTCString()…...

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战
🍦🍦写这篇AES文章也是有件趣事,有位小伙伴发了段密文,看看谁解密速度快,学过Python的小伙伴一下子就解开来了,内容也挺有趣的。 🍟🍟原来加解密也可以这么有趣,虽然看起…...
代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
1005. K 次取反后最大化的数组和 题目链接 题目描述: 给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH
JMH简介 JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程…...

实现excle表上传生成echarts图
代码如下html <!--这是一个网上关于读取Excel最经典的代码--> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>ECharts</title><!-- 引入 echarts.js --><!-- <script src"newjs/js/incubato…...

python代码如何打包
网上的文章对小白都不太友好呀,讲得都比较高大上,本文章就用最简单的方式来教会大家如何打包。既然各位已经学习到了python打包了, 深适度应该跟我查不多。 注意事项: 1. 这个插件只能打包 mac 、win系统运行的文件,也…...

MyBatis学习笔记(十二) —— MyBatis的逆向工程
12、MyBatis的逆向工程 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源: Java实体类Mappe…...

4.Elasticsearch深入了解
4.Elasticsearch深入了解[toc]1.Elasticsearch架构原理Elasticsearch的节点类型在Elasticsearch主要分成两类节点,一类是Master,一类是DataNode。Master节点在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然…...
【HashSet】| 深度剥析Java SE 源码合集Ⅲ
目录一. 🦁 HashSet介绍1.1 特点1.2 底层实现二. 🦁 结构以及对应方法分析2.1 结构组成2.1.1 源码实现2.1.2 成员变量及构造方法2.2 常用的方法2.2.1 添加add(E e)方法2.2.2 删除remove(Object o)方法三. 最后想说一. 🦁 HashSet介绍 1.1 特…...

你了解线程的状态转换吗
本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...