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

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- )还是写死(绑定)某个应用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.kler.cn/a/511844.html

相关文章:

  • Golang Gin系列-1:Gin 框架总体概述
  • 郑州大学2022级大三期末复习总结(数据库,传感器,嵌入式,人工智能,移动终端开发,计算机英语)
  • 使用 Blazor 和 Elsa Workflows 作为引擎的工作流系统开发
  • Spring Boot 3.4.x 和 Micrometer 2.0 的结合 案例 以及使用方法
  • 万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
  • Vue前端框架概述
  • 第9章:Python TDD解决货币对象相等性比较难题
  • python爬虫报错日记
  • 初始JavaEE篇 —— 快速上手 SpringBoot
  • 【Redis】Redis 集群中节点之间如何通信?
  • [cg] glProgramBinary
  • JavaScript系列(35)-- WebSocket应用详解
  • Redis系列之底层数据结构字典Dict
  • 图像处理|顶帽操作
  • Kivy App开发之UX控件Bubble气泡
  • 使用redis-cli命令实现redis crud操作
  • Meta标签教程:提升网站SEO与用户体验的利器
  • 人工智能之数学基础:线性代数中的线性相关和线性无关
  • windows下使用docker执行器并配置 hosts 解析
  • Agent AI: 强化学习,模仿学习,大型语言模型和VLMs在智能体中的应用
  • 2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数
  • 仿 RabbitMQ 的消息队列2(实战项目)
  • 在C#中添加I/O延时和持续时间
  • Ubuntu 22.04 能识别笔记本的键盘,但是无法识别外接键盘
  • 【无界】微前端技术应用
  • 【大数据】机器学习----------降维与度量学习