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

ops/2025/1/23 22:42:35/

概述

关于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/ops/152583.html

相关文章

从零到一:Spring Boot 与 RocketMQ 的完美集成指南

1.Rocket的概念与原理 RocketMQ 是一款由阿里巴巴开源的分布式消息中间件,最初用于支持阿里巴巴的海量业务。它基于发布-订阅模型,具备高吞吐、低延迟、高可用和强一致性的特点,适用于消息队列、大规模数据流处理等场景。以下是对 RocketMQ …

如何为64位LabVIEW配置正确的驱动程序

在安装 64位 LabVIEW 后,确保驱动程序正确配置是关键。如果您首先安装了 32位 LabVIEW 和相关驱动,然后安装了 64位 LabVIEW,需要确保为 64位 LabVIEW 安装和配置适当的驱动程序,才能正常访问硬件设备。以下是详细步骤&#xff1a…

【odoo】Odoo 中的 Controllers 介绍与示例

在 Odoo 中,controllers 是一种用来处理 HTTP 请求的机制。它是 Odoo 中 Web 模块的重要组成部分,主要用于接收前端的 HTTP 请求、进行业务处理,然后返回响应。controllers 是 Odoo 和外部世界(如前端页面、API 客户端等&#xff…

Java设计模式 十三 代理模式 (Proxy Pattern)

代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式,它为其他对象提供一种代理(或占位符)以控制对该对象的访问。通过代理模式,我们可以在不修改目标对象的情况下,控制对其的访问,添加额外的功能&…

提升 Go 开发效率的利器:calc_util 工具库

提升 Go 开发效率的利器:calc_util 工具库 在日常开发中,我们常常需要处理数组(切片)的交集、差集、并集操作,或者更新和过滤数据。尽管这些功能可以手动实现,但重复的逻辑代码不仅影响效率,也…

极速、免费、体积小,一款PDF转图片软件

下载解压后: 双击后exe结尾程序即可运行软件。 该款软件能够将PDF文件中的每一页准确地转换为高质量的图片。无论是包含文字、图像还是图表的PDF页面,转换后的图片都能清晰地保留原始内容的细节。例如,对于一些学术论文PDF中的细小文字和复杂图表&#x…

Navicat 导出表结构后运行查询失败ERROR 1064 (42000): You have an error in your SQL syntax;

本文主要介绍了在使用 Navicat 导出 MySQL 表后新建查询时出现报错的问题及解决方案。 一、问题描述 Navicat导出MySql中的表,在新建数据库新建查询时通常会报错You have an error in your SQL syntax; check the manual that corresponds to your MySQL server …

WPF-系统资源

引用资源方法 单个资源 <Window.Resources><ResourceDictionarySource"Res.xaml"></ResourceDictionary> </Window.Resources> <Grid Width"{StaticResource value}" />多个资源 <Window.Resources><ResourceDi…