Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert
概述
关于Prometheus和Grafana的安装,略过。
写在前面
- Dashboard:仪表板,可包含多个Panel
- Panel:面板,Dashboard中的组件
如有写得不对的地方,烦请指出。
新增仪表板
点击右上角的
选择New dashboard,
备注:上图自有探索->自由探索。
自由探索
点击Add visualizaton,出现选择数据源界面,
如上图所示,一个Grafana可以新增多个Prometheus数据源。选择Prometheus数据源,然后出现如下视图
点击Code,输入http_server_requests
,Grafana有自动补齐提示,也就是说,我们现在是在Grafana里写PromQL。
选择不同的数据源,写的Code不一样,如果选择的是Loki,则写Code时需要遵从LogQL语法(计划会另写一篇博客)。
勾选Explain,下面会出现关于code的解释,比如下面的1 Fetch all series matching metric name and label filters.
,翻译过来就是抓取所有满足指标名称和标签过滤符的序列
变量
在Grafana中,用户可为仪表板定义一组变量(Variables),变量一般包含一个到多个可选值。通过将变量渲染为一个下拉框,使用户可动态地调整变量的值,进而查询不同标签(Tag)下的数据,从而实现分组(Group by)效果
在仪表板右上角,点击Settings,会发现若干个Tab标签页,其中第三个Variables就是变量
点击新增变量
变量是仪表板全局生效的,一个仪表板如果有多个面板,则全部面板都会复用这个变量,也就是说,放在一个仪表板里的多个面板最好是强相关的(能复用这些变量的,负责查询面板会出现No Data问题)。
变量过滤
以http_server_requests
(参考Grails应用http.server.requests指标数据采集问题排查及解决)这个Micrometer默认暴露出来的指标为例,在Prometheus Graph页面查询此指标时,有如下图所示几个标签组(注意,下文会使用这个数据):
- container:容器,表示是Pushgateway采集的
- endpoint:采集方式
- exception:API接口异常
- job:即应用,服务,非常关心
- method:接口方法,GET、POST等
- namespace:命名空间
- outcome:结果,和status功能定位比较类似
- pod:和container类似
- service:和container类似
- status:状态码,表示成功与否
- uri:接口的路径
上面新增过job这个变量。
默认情况下,job变量带出很多个非业务应用的数据(至于为什么,目前尚不清楚),比如kube系列,apiserver,coredns等,如下图所示:
带来的问题(干扰):
在面板里选择应用时,会出现很多不关心的应用。
需求:过滤无关应用,即实现变量过滤功能。
Regex
咨询DeepSeek、ChatGPT等工具后,告知可利用Regex来实现:
给出如下的表达式/^(?!.*kube).*$/
。
注意:只有在点击保存仪表板后才能看到效果。
如下截图所示,Preview of values里不再出现kube相关的数据
在面板上选择应用时,不再出现kube相关的选项
问题来了,我还想继续过滤掉上面截图里的apiserver和coredns,咋办。
DeepSeek给出的答复是:/^(?!.*(kube|apiserver)).*$/
。
是不是看起来非常有理有据,Regex正则表达式嘛,用|
符号实现多个候选项。
结果点击报错仪表板后,页面居然报错:
众所周知,Grafana UI是用JS写的,上面的报错也全是JS相关。
WTF?根本就不能进行任何点击或查看操作。
这该死的、害人的AI幻觉(hallucination)。
问题是AI带来的,还是得靠它们来解决。
给出的答复,其中一个是,强制刷新浏览器。
使用Chrome快捷键Ctrl + Shift + R,果然可以正常查看仪表板,赶紧把上面的错误的Regex表达式给删除。
经过反复尝试,比较明确的一点是,通过Regex,只能过滤一类数据。
几个表达式:
/^(?!.*kube).*$/
:可以过滤kube相关的数据;/^(?!.*(kube|apiserver)).*$/
:不能实现过滤kube和apiserver相关的数据,Grafana解析此Regex表达式失败,页面渲染数据出错;/^(?!.*(kube))}).*$/
:同上,多个()
括号,页面报错。
Metric
既然Regex无法实现过滤,只有另寻他法。反复询问AI工具,给出的答复是使用Metric,即指标。
此时才发现,绕了个弯路,Metric才是最正规的实现指标数据过滤的方法。
下面截图里还写着Regex,实际上无用,应删除,请忽视。
不过,如上图所示,还是有一个不太关心的数据,nacos。Java业务应用里并没有nacos,而是使用Nacos作为配置中心和注册中心。
Label filters
进一步实现过滤。Label filters,中文译为标签过滤器,正好是用于数据过滤的场景:
备注:忽略上面截图里的Regex表达式。
可知,将nacos给过滤掉。
此外,点击中间的操作符
Grafana提供的四种对比符号:
=
:等于,精准匹配!=
:不等于,精准过滤(排除)=~
:等于,模糊匹配!~
:不等于,模糊过滤(排除)
总结
有三种方法:
- Regex:不建议使用
- Metric:绑定指标,可过滤大部分无关数据
- Label filters:进一步过滤数据
变量查询
上面已经新增三个变量:
- 应用:对应于job
- API:对应于uri
- 状态码:对应于status
需求是查询所有的应用下所有API接口,且状态码是4xx或5xx的数据:
遇到的问题:
- 清空应用或API的勾选项,并不能查询到数据,即上图展示的No data。分析下来,发现浏览器的URL上,job这个变量
var-job
- )还是写死(绑定)某个应用agent
,var-uri
还是把所有的已经勾选的接口放在URL路径 - 勾选全部应用以及全部API,可以实现上面提到的查询需求,但是页面太不美观。
经过各种反复尝试。
解决方法:修改变量,构想Include All option。
遇到的问题,查询不到数据,可是通过Prometheus Graph查看明明有数据的
咨询AI类工具,以及反复尝试,发现需要配置如下的Custom all value信息,填入.*
保存仪表板后,果然看到数据
总结:勾选Include All option时,需要配置下面的Custom all value,否则查询数据时会显示No data。
导入仪表板
前面在新增仪表板时,只讲述过Add visualizaton这种方式。
上面的操作,都是基于http_server_requests
这个指标,并不是自定义的指标,而是Micrometer官方暴露出来的数据。以Grafana + Dashboard + http_server_requests 三个单词为关键词搜索Google,不难找到官方维护的仪表板,其ID为21308,URL地址为https://grafana.com/grafana/dashboards/21308-http/
。
此处使用导入功能
如上图所示,Grafana真的很贴心
(注意这里的排版),提供好几种导入方式:
- 文件:在最上方。别人不清楚,我个人会认为这种方式更重要,使用频率更高,所以放在最上面。
- URL:贴入URL
- ID:输入ID
- JSON model:没用过,不太清楚
踩过的坑
:将测试环境的仪表板同步到生产环境,首先导出测试环境的仪表板为JSON文件,点击仪表板右上角的Share->Export->Save to file
然后在生产环境导入JSON文件,却发现无数据
经过排查与分析后才发现,虽然都是Prometheus数据源,但是其uid不一样。(直接给出结论)
选中某个面板后,快捷键E
进入编辑模式,直接点击Run queries发现其实是有数据的。
对于部署多个不同Prometheus集群的场景来说,多了个步骤,切换使用的Prometheus数据源,然后点击Run queries,也可查询到数据。
我们公司做LLM相关应用,因此需要GPU机器用于模型推理与训练。对于GPU机器上的Python应用,额外再部署一套Prometheus集群。
最后点击保存面板,可发现使用的数据源uid确实不一样。
一个仪表板里面有十几个甚至几十个面板,一一进入编辑模式,然后保存面板切换使用的Prometheus数据源,岂不是要疯掉。
如截图所示,上面的仪表板是Node Exporter Dashboard 20240520 TenSunS自动同步版,这是一个三方维护的GitHub开源、仪表板。
解决方法:直接使用URL或ID的方式导入。
总结:
- URL或ID:官方维护的,三方维护的,且一般不会调整加以修改的仪表板;里面的面板一般会比较多;
- JSON:适合于业务自定义的仪表板;仪表板里的面板比较少,使用导出导入功能,需要编辑调整数据源的地方比较少;不编辑保存面板,则无数据。
变量联动
不会配置面板,不知道如何写PromQL,跟着别人学习啊。在Grafana Dashboard页面里,有几万个仪表板(持续新增中),有官方维护的,也有三方维护的。
上面已经导入21308仪表板,点击面板,进入编辑模式,看看别人的变量怎么配置的
点击instance变量后,发现是这样的:
Grafana自动解析变量之间的关系,生成Show dependencies按钮。
同样都是http_server_requests
指标,官方维护的仪表板使用application、cluster、instance三个变量,我上面列出的标签里,这三个一个都没有,所以下拉框并没有数据,不清楚官方为何使用这三个变量。
要善于取学习,跟着配置三个变量后,可以实现联动效果,即所谓选择应用后,API里只出现该应用下的接口:
注意:上面截图里Label filters使用的符号不一致。
Grafana Alert
一般情况下,可以基于面板创建Alert,即Grafana Alert
Grafana Alert涉及很多知识点,如Alert rule(告警规则)、Contact Point(联络点)、Notification policy(通知策略)、Silence(静默),其中联络点又涉及到最常见的邮件告警,告警模板配置;如果是Webhook配置,飞书还非常特殊。
因此另起一篇。
但是也有例外:
No alerting capable query found
Cannot create alerts from this panel because no query to an alerting capable datasource is found.
数据源是Prometheus,PromQL如下,为啥不能基于此面板新增告警的具体原因,有待进一步学习
Prometheus Alertmanager
除了Grafana Alert外,也可接入Prometheus Alertmanager。
另起一篇Grafana系列之面板接入Prometheus Alertmanager。
参考
- Grafana官网
- ChatGPT
- DeepSeek
- GitHub Copilot
相关文章:

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert
概述 关于Prometheus和Grafana的安装,略过。 写在前面 Dashboard:仪表板,可包含多个PanelPanel:面板,Dashboard中的组件 如有写得不对的地方,烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

(java版本)基于Misty1算法的加密软件的实现-毕业设计
一、基于Misty1算法的加密软件(Java)的实现 随着计算机网络及通信技术的飞速发展,信息安全成了信息社会急需解决的最重要的问题之一,密码技术是保证信息安全的核心技术。本文用JAVA语言开发了一个基于Misty1算法的加密软件&#x…...

Spring注解篇:@RestController详解
全文目录: 开篇语前言摘要概述源码解析使用案例分享代码分析使用场景优缺点分析测试用例 应用场景案例优缺点分析核心类方法介绍测试用例测试用例分析使用场景优缺点分析测试用例 小结总结文末 开篇语 哈喽,各位小伙伴们,你们好呀,…...

C++:将字符数组rkpryyrag,每个字母转换为其前面第13个字母后输出,如果超过a则从z再继续接着数。例如:b前面第1个字母是a。a前面第3个字母是x。
代码如下: #include <iostream> #include <string> using namespace std;int main(){string str "rkpryyrag";for (int i 0; i < str.length(); i){if (str[i] > a && str[i] < z){if (str[i] - a < 13){cout <<…...

《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
在元宇宙的宏大愿景中,高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合,为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...

微前端qiankun的部署
微前端qiankun的部署 本地开发主应用配置启动端口子应用配置启动端口测试环境部署:场景 1:主应用和微应用部署到同一个服务器(同一个 IP 和端口)微应用都放在在一个特殊名称(不会和微应用重名)的文件夹下主应用配置子应用配置配置nginx本地开发 主应用配置启动端口 打开…...

HTML表格-掌握表格标签与属性
HTML表格是网页设计中用于展示数据的强大工具,它通过一系列标签和属性来控制表格的布局和样式。 一、HTML表格的基本结构 HTML表格由<table>标签定义,内部包含多个行(<tr>)、单元格(<td>或<th&…...

PID控制的优势与LabVIEW应用
PID控制(比例-积分-微分控制)已在工业控制领域得到广泛应用,尤其在实时控制和自动化系统中,其核心优点是简单、稳定且高效。尽管许多现代控制方法(如自适应控制、模型预测控制等)逐渐崭露头角,P…...

全球化趋势与中资企业出海背景
1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革,新兴经济体崛起,全球产业链重塑,中资企业出海面临新机遇与挑战。据世界银行数据,新兴市场和发展中经济体在全球 GDP 中占比已超 40%ÿ…...

Oracle之RMAN备份异机恢复(单机到单机)
Oracle之RMAN备份异机恢复(单机到单机) 一、环境说明二、正式库进行RMAN备份三、将正式库备份与参数文件拷贝到测试库四、测试库异机恢复五、验证数据 一、环境说明 系统版本主机名DB版本DB名实例名Public-IP正式库Redhat9.5lemonEnterprise 19.25lemon…...

Servlet快速入门
Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪,这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知,有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…...

深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h
InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核通过 InfiniBand 子系统提供了对 IB 设备的支持,而 ib_verbs.h 是 InfiniBand 驱动开发中的核心头文件之一。它定义了 IB 核心框架与用户空间接口(ver…...

vulnhub靶场【kioptrix-1靶机】
前言 靶机:kioptrix-1,IP地址为192.168.1.104 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&…...

Linux 6.14 内核的主要特性
原文参考:https://www.kernel.org/ Linux 6.14 内核是 Linux 内核的一个重要版本,预计于 2025 年 3 月发布。该版本引入了多项新特性和改进,涵盖了硬件支持、性能优化、安全性增强以及新技术的整合。 1. Rust 语言驱动的正式支持 Linux 6.1…...

【Linux】深刻理解动静态库
1.什么是库 库是写好的现有的,成熟的,可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个⼈的代码都从零开始,因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式,可以被操作系统载…...

亚博microros小车-原生ubuntu支持系列:8-脸部检测与人脸特效
前面的都是使用了mediapipe框架。后面的这两节采用了opencv\dlib的框架。 一 脸部检测 核心:opencv detectMultiScale函数 detectMultiScale(image, scaleFactor, minNeighbors, flags, minSize, maxSize) image--待检测图片,一般为灰度图像加快检测…...

代码随想录算法训练营day32
代码随想录算法训练营 —day32 文章目录 代码随想录算法训练营前言一、动态规划理论基础二、509. 斐波那契数动态规划动态规划优化空间版递归法 三、70. 爬楼梯动态规划动态规划空间优化 746. 使用最小花费爬楼梯动态规划空间优化 总结 前言 今天是算法营的第32天,…...

缓存之美:万文详解 Caffeine 实现原理(下)
上篇文章:缓存之美:万文详解 Caffeine 实现原理(上) getIfPresent 现在我们对 put 方法有了基本了解,现在我们继续深入 getIfPresent 方法: public class TestReadSourceCode {Testpublic void doRead() …...

中企出海:从国际投资建厂:投前投中投后重点事项
1. 投前重点事项 1.1 市场调研与分析 在国际投资建厂的投前阶段,市场调研与分析是至关重要的基础工作,它能够帮助企业全面了解目标市场,为后续决策提供有力依据。 市场规模与潜力:通过收集和分析目标国家或地区的经济数据、行业…...

github登录用的TOTP和恢复码都丢失了怎么办
从22年左右开始github的登录就需要用TOTP的一个6位秘钥做二次认证登录,如果在用的TOTP软件失效了,可以用github开启二次认证时下载的恢复码重置认证,但是如果你和我一样这两个东西都没了就只能用邮箱重置了,过程给大家分享一下 一…...

最长递增子序列问题(Longest Increasing Subsequence),动态规划法解决,贪心算法 + 二分查找优化
问题描述:在一个大小乱序的数列中,找到一个最大长度的递增子序列,子序列中的数据在原始数列中的相对位置保持不变,可以不连续,但必须递增。 输入描述: 第一行输入数列的长度 n。(1 < n < 200) 第二…...

Python中采用.add_subplot绘制子图的方法简要举例介绍
Python中采用.add_subplot绘制子图的方法简要举例介绍 目录 Python中采用.add_subplot绘制子图的方法简要举例介绍一、Python中绘制子图的方法1.1 add_subplot函数1.2 基本语法(1)add_subplot的核心语法(2)add_subplot在中编程中的…...

纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
一、纯 Python 1.1 基础概念 Python 是一种高级、通用、解释型的编程语言,以其简洁易读的语法和丰富的标准库而闻名。“纯 Python” 在这里指的是不依赖特定的 Web 框架或数据分析工具,仅使用 Python 原生的功能和标准库来开发应用程序或执行任务。 1.…...

C++实现有限元二维杆单元计算 Bar2D2Node类(纯自研 非套壳)
本系列文章致力于实现“手搓有限元,干翻Ansys的目标”,基本框架为前端显示使用QT实现交互,后端计算采用Visual Studio C。 QT软件界面 具体软件操作可查看下方视频哦。也可以点击这里直接跳转。 直接干翻Ansys?小伙自研有限元 1、…...

wx036基于springboot+vue+uniapp的校园快递平台小程序
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

Unity中两个UGUI物体的锚点和中心点设置成不一样的,然后怎么使两个物体的位置一样?
一、问题复现 需求:go1物体和我想把go1的位置跟go2的位置一样,但是我通过物体的anchoredPosition以及position还有localposiiton都没有解决问题,使用上面的这三个属性的效果如下: 运行之后,可以看出,go1的…...

兼职全职招聘系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...

HTML5 History API
在 HTML5 的 History API 中,pushState 和 replaceState 方法也可以接受一个 state 对象作为参数。这些方法允许你在改变浏览器路由时不重新加载页面,并且可以附加一些自定义数据。 state 返回在 history 栈顶的 任意 值的拷贝。 let currentState h…...

2025_1_22打卡
402. 移掉 K 位数字 - 力扣(LeetCode) 279. 完全平方数 - 力扣(LeetCode)...

Formality:不可读(unread)的概念
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念,本文就将对此…...