当前位置: 首页 > news >正文

Grafana 监控面板绘制流程

本篇作者:

IoTDB 社区 -- 张洪胤

本文以 IoTDB V1.0.1 版本为例

本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集,并且使用 Grafana 的方式进行可视化。

1

监控指标的 Prometheus 格式说明

对于 Metric Name 为 name, Tags 为 K1=V1, ..., Kn=Vn 的监控指标有如下映射,其中 value 为具体值

e012f55e1e06eea896ed8fc1f308ff51.png

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)

1ca53178ce7533bfa0498d4cb6af072a.png

f81a3123de08bfc4f81559786f314703.png

3.2

创建 Panel

优秀绘制参考:

https://play.grafana.org/dashboards

1. 点击右上角:Add Panel,其中 Add a new panel 是添加一个面板,Add a new row 是添加一个行(分组,两个行之间的所有 panel 属于前一个row)。

7af058ff80f2893ef38b5884b22ecb57.png

2. 点击 Add a new Panel,添加一个面板。首先点击右上角,选择当前 Panel 的类型,比较常用的有Time series(时间序列)、Stat(统计)、Gauge(寄存器)等等,可以视情况选择。

0ded0f808281b27848e10a99178a48af.png

3. 以 Timeseries 为例,首先编写对应的 PromQL 执行数据查询。

   a. 在 PromQL 中,可以用 $instance 访问到刚刚在 Dashboard 的 Variables 中配置的 instance 变量,job 变量也是类似的。

   b. 在 Legend 中,可以通过双中括号访问到对应的监控项的对应 Tag 的具体值,比如在下图的例子中,state="blocked/new/runnable/terminated/timed-waiting/waiting",通过这样的方式修改图例。

   c. 可以通过点击 + Query 在当前面板添加更多时间序列。

7cf63d9236ff0941dc9b18e270c305a4.png

4. 在右侧的 Panel Options 中可以更新当前面板的标题、描述并设置面板背景是否透明。

8c8f783ca2d14cb78df8bae2896eb7b7.png

8d5096009208fd50ec203f7a941405da.png

5. 在右侧的 Tooltip 中可以选择不同的类型:

   a. Single:只显示距离鼠标最近的一条。

   b. All:显示鼠标所在时间线的所有条,可以不排 序、升序或降序。

   c. Hidden:不显示。

bd5e29303ed262be1ee9524affa211ee.png

14c5747f1fa939b87b7e5a7444cfa96a.png

a91e97f115a0cb1c2bccc1c258c4ba8e.png

6. 在右侧的 Legend 可以调整不同的图例:

   a. Mode:List(列表)、Table(表格)、Hidden(不显示)。

   b. Placement:Bottom(放在底部)、Right(放在右侧)。

   c. Legend Values:是否要同时显示对应的时间序列的值。

   d. 如下示例我们将图例放置在右侧,采用表格的形式,并且显示平均值。

bfab5190d3550fd66b52b99d95154241.png

3965a15f3a73ac3b1722b6855e029127.png

7. 在右侧的 Graph Styles 可以调整线的样式,包括 line、bar 和 point 三类:

   a. line:还可以调整插值、线宽、填充透明度、渐变模式、线形、空值连接方法、是否显示等属性。

   b. bar:还可以调整类型、线宽、填充透明度、渐变模式、是否显示点等属性。

   c. points:还可以调整点大小等属性。

   d. 如下示例我们使用线,设置填充透明度为5%,从不显示点。

150fdd1a094eefeeb6452e8e50faf199.png

3c45e2d448e31bf90613847d8405c5f9.png

8. 在右侧的 Axis 可以调整对应的轴信息,包括标签、宽度、纵轴最小值、纵轴最大值等等,一般不需要调整。

8ac9efcc14b1bd0cea6d9dcb1a590209.png

d0870023e3b1c018690075ae85cf5dce.png

9. 在右侧的 Standard options 可以设置单位(有byte, s, ms, us, ns等等,还可以自定义)、显示最小值、显示最大值、精度、展示名称、配色(可以选择单个颜色、根据阈值或者现有配色方案)等。如下示例为自定义单位为 个,最小值设置为 0,最大值设置为 300。

c0dcf57d7a1bf57b0b43e8c0b9b0c23a.png

8c5ab331a20073ba4f67d9f8c67813ed.png

efbb2327382e7374e2271e085bedf953.png

10. 在右侧的 Value mappings 可以添加对应的映射:可以根据值、范围、正则和特殊值(空等)来控制其展示的文本,比如0代表离线,1代表上线,可以通过 value mappings 完成。

b1e9ba7df5d3c650e3387f9205e8e3ae.png

f6c72f106f426a150eb10a49d0d14bb1.png

11. 在右侧的 Thresholds 则是设置阈值,可以结合 Standard options 中的配色方案使用:

   a. 阈值设置:可以设置绝对阈值、相对阈值(和显示最大值、显示最小值有关)。

   b. 阈值显示:可以选择不显示阈值、显示阈值线、显示阈值阴影和同时显示阈值线和阴影。

   c. 例如设置为 60% 和 80% 的阈值,并且显示阈值吸纳和阴影线。

e399792761edbf220ae522858a7d6862.png

12. 可以通过 Overrides 来重写部分时间序列的上述某些属性,支持通过名字、名字正则、类型和返回值重写:

   a. 重写的属性具有更高的优先级。

   b. 例如我可以重写 name 为 waiting 的时间序列的颜色为绿色,如下所示:

c8c61a1a24222f0d06edad7e4761f45b.png

cb3e7fad32e033116f863de605cd21c6.png

6c1e3a9fbb8a22121462a04d25c4d0de.png

13. 至此,已经完成了对于 Panel 创建的简单介绍,可以通过在 Dashboard 中拖拽 Panel 改变其位置,也可以通过拖拽 Panel 的右下角来改变 panel 的大小。

4

导出 Grafana

1. 点击左上角的导出按钮:

092d6c1695919b2ef5278c155c1f323d.png

2. 点击 Export 标签页,并选择 Export for sharing externally,然后点击 save to file 就将对应的 Dashboard 的 json 文件下载到本地了。

fe31526b0122fb8f12168139dd5b3375.png

3. 最后,将 Dashboard 的 json 上传到 GitHub (docs/UserGuide/Monitor-Alert文件夹下) 的对应位置即可。

作为全球性开源项目,截至目前,Apache IoTDB 已拥有 244 名贡献者、3.1K Stars、820 Forks、8653 Commits。我们为大家提供了参与指南,欢迎越来越多的小伙伴助力 Apache IoTDB 项目的不断发展与前进,迈出加入 Apache IoTDB 社区的第一步!

a418645f7a5f4274ba2d076c04edd481.gif

相关文章:

Grafana 监控面板绘制流程

本篇作者&#xff1a;IoTDB 社区 -- 张洪胤本文以 IoTDB V1.0.1 版本为例本文档介绍了 Apache IoTDB 监控指标通过 Prometheus 的方式进行采集&#xff0c;并且使用 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. 其他教程前言 项目地址&#xff1a;https://github.com/Fafa-DL/Awesome-Backbones 操作教程&#xff1a;https://www.bilibili.co…...

Java--JMH--性能测试--测试软件运行效率/时间--StopWatch

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

JavaScript Array(数组)对象

数组对象的作用是&#xff1a;使用单独的变量名来存储一系列的值。参数参数 size 是期望的数组元素个数。返回的数组&#xff0c;length 字段将被设为 size 的值。参数 element ...; elementn 是参数列表。当使用这些参数来调用构造函数 Array() 时&#xff0c;新创建的数组的元…...

干货 | 电容在电路35个基本常识

第1个电压源正负端接了一个电容&#xff0c;与电路并联&#xff0c;用于整流电路时&#xff0c;具有很好的滤波作用&#xff0c;当电压交变时&#xff0c;由于电容的充电作用&#xff0c;两端的电压不能突变&#xff0c;就保证了电压的平稳。当用于电池电源时&#xff0c;具有交…...

日读300篇文献的技巧

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

C++核心编程

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

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&#xff1f; MVCC是一种并发控制方法&#xff0c;一般在数据库管理系统中&#xff0c;实现数据库的并发访问。 可以使用乐观锁和悲观锁来实现。 MVCC的作用&#xff1f; 可以在不加锁的情况下解决读写问题&#xff0c;同时还可以解决脏读&#xff0c;幻读&#…...

JavaScript Date(日期)对象

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

【Python】AES加解密代码,文章还有加密串等你来解密,等你来挑战

&#x1f366;&#x1f366;写这篇AES文章也是有件趣事&#xff0c;有位小伙伴发了段密文&#xff0c;看看谁解密速度快&#xff0c;学过Python的小伙伴一下子就解开来了&#xff0c;内容也挺有趣的。 &#x1f35f;&#x1f35f;原来加解密也可以这么有趣&#xff0c;虽然看起…...

代码随想录【Day34】| 1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果

1005. K 次取反后最大化的数组和 题目链接 题目描述&#xff1a; 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&…...

Java性能调优杀手锏JMH

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

实现excle表上传生成echarts图

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

python代码如何打包

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

MyBatis学习笔记(十二) —— MyBatis的逆向工程

12、MyBatis的逆向工程 正向工程&#xff1a;先创建Java实体类&#xff0c;由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。 逆向工程&#xff1a;先创建数据库表&#xff0c;由框架负责根据数据库表&#xff0c;反向生成如下资源&#xff1a; Java实体类Mappe…...

4.Elasticsearch深入了解

4.Elasticsearch深入了解[toc]1.Elasticsearch架构原理Elasticsearch的节点类型在Elasticsearch主要分成两类节点&#xff0c;一类是Master&#xff0c;一类是DataNode。Master节点在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然…...

【HashSet】| 深度剥析Java SE 源码合集Ⅲ

目录一. &#x1f981; HashSet介绍1.1 特点1.2 底层实现二. &#x1f981; 结构以及对应方法分析2.1 结构组成2.1.1 源码实现2.1.2 成员变量及构造方法2.2 常用的方法2.2.1 添加add(E e)方法2.2.2 删除remove(Object o)方法三. 最后想说一. &#x1f981; HashSet介绍 1.1 特…...

你了解线程的状态转换吗

本文概述: 讲述线程的六种状态. 你可能已经了解了六种状态, 但是你知道 sleep 被唤醒之后, wait ()被 notify 之后进入了什么状态吗? 本文只是开胃小菜, 你看看下一篇文章对你有没有帮助. 一共有六种状态: New 新建状态Runnable 运行状态Blocked 阻塞状态Waiting 等待状态Tim…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...