Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

devtools/2025/1/24 3:26:56/

概述

关于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- )还是写死(绑定)某个应用agentvar-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

http://www.ppmy.cn/devtools/153031.html

相关文章

数字图像处理:实验二

任务一: 将不同像素(32、64和256)的原图像放大为像素大 小为1024*1024的图像(图像自选) 要求:1)输出一幅图,该图包含六幅子图,第一排是原图,第 二排是对应放大…

蓝桥杯 单词重排

问题描述 解题思路 这个问题可以通过计算排列数来解决。由于字符串 "LANQIAO" 由7个不同的字母组成,我们可以使用排列公式 P(n,n)n! 来计算,其中 n 是字母的数量。但是,由于字符串中存在重复的字母,我们需要对重复的字…

人脸识别打卡系统--基于QT(附源码)

逃离舒适区 项目源代码放在我的仓库中,有需要自取 项目地址 https://gitcode.com/hujiahangdewa/Face_recognition.git 文章目录 一、项目结构分析二、服务器的搭建三、客户端的搭建四、人脸识别库的申请五、基于人脸识别库的识别判断六、QT人脸识别----调用百度ai…

leetcode169.多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 2…

Excel常用功能总结

Excel 是微软办公软件套装中的一个重要组件,用于数据处理和分析。以下是一些 Excel 的常用功能总结: 基本操作 1.单元格操作:选择、插入、删除单元格、行或列。 2.数据输入:输入文本、数字、日期和时间。 3.格式设置:设…

从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)

从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CI/CD) 目录 项目初始化:构建一个简单的 Node.js 应用设置 Docker 环境:容器化你的应用配置 CI/CD:自动化构建与部署上线前的最后检查:…

Golang初识

Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007年开始设计发明,他们最终的目标是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”,当然从各种角度看&…

详解Redis的List类型及相关命令

目录 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LLEN 阻塞版本命令 BLPOP BRPOP 内部编码 应用场景 Redis中的List类型,是保证元素有序的,支持队列从两端进行插入删除和获取,并且元素时刻重复的。 LPUSH 将…