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

Grafana之Dashboard(仪表盘)

在前面的小节中介绍了Grafana中4中常用的可视化面板的使用,通过在面板中使用PromQL表达式,Grafana能够方便的将Prometheus返回的数据进行可视化展示。例如,在展示主机CPU使用率时,我们使用了如下表达式:

1 - (avg(irate(node_cpu{mode='idle'}[5m])) without (cpu))

该表达式会返回当前Promthues中存储的所有时间序列,每一台主机都会有一条单独的曲线用于体现其CPU使用率的变化情况:
在这里插入图片描述
而当用户只想关注其中某些主机时,基于当前我们已经学习到的知识只有两种方式,要么每次手动修改Panel中的PromQL表达式,要么直接为这些主机创建单独的Panel。但是无论如何,这些硬编码方式都会直接导致Dashboard配置的频繁修改。在这一小节中我们将学习使用Dashboard变量的方式解决以上问题。

变量

在Grafana中用户可以为Dashboard定义一组变量(Variables),变量一般包含一个到多个可选值。

如下所示,Grafana通过将变量渲染为一个下拉框选项,从而使用户可以动态的改变变量的值:
在这里插入图片描述
例如,这里定义了一个名为node的变量,用户可以通过在PromQL表达式或者Panel的标题中通过以下形式使用该变量:

1 - (avg(irate(node_cpu{mode='idle', instance=~"$node"}[5m])) without (cpu))

变量的值可以支持单选或者多选,当对接Prometheus时,Grafana会自动将$node的值格式化为如

“host1|host2|host3”的形式。配合使用PromQL的标签正则匹配“=~”,通过动态改变PromQL从而实现基于标签快速对时间序列进行过滤。

变量定义

通过Dashboard页面的Settings选项,可以进入Dashboard的配置页面并且选择Variables子菜单:
在这里插入图片描述
用户需要指定变量的名称,后续用户就可以通过$variable_name的形式引用该变量。Grafana目前支持6种不同的变量类型,而能和Prometheus一起工作的主要包含以下5种类型:
在这里插入图片描述
Label属性用于指定界面中变量的显示名称,Hide属性则用于指定在渲染界面时是否隐藏该变量的下拉框。

使用变量过滤时间序列

当Prometheus同时采集了多个主机节点的监控样本数据时,用户希望能够手动选择并查看其中特定主机的监控数据。这时我们需要使用Query类型的变量。
在这里插入图片描述
如上所示,这里我们为Dashboard创建了一个名为node的变量,并且指定其类型为Query。Query类型的变量,允许用户指定数据源以及查询表达式,并通过正则 匹配(Regex)的方式对查询结果进行处理,从而动态生成变量的可选值。在这里指定了数据源为Prometheus,通过使用node_load1我们得到了两条时间序列:


node_load1{instance="foo:9100",job="node"}
node_load1{instance="localhost:9100",job="node"}

在这里插入图片描述
Selection Options选项中可以指定该变量的下拉框是否支持多选,以及是否包含全选(All)选项。

保存变量后,用户可以在Panel的General或者Metrics中通过$node的方式使用该变量,如下所示:
在这里插入图片描述
这里需要注意的是,如果允许用户多选在PromQL表达式中应该使用标签的正则匹配模式,因为Grafana会自动将多个选项格式化为如“foo:9100|localhost:9100”的形式。

使用Query类型的变量能够根据允许用户能够根据时间序列的特征维度对数据进行过滤。在定义Query类型变量时,除了使用PromQL查询时间序列以过滤标签的方式以外,Grafana还提供了几个有用的函数:
在这里插入图片描述
例如,有时候我们想要动态修改变量查询结果。比如某一个节点绑定了多个ip,一个用于内网访问,一个用于外网访问,此时prometheus采集到的指标是内网的ip,但我们需要的是外网ip。这里我们想要能在Grafana中动态改变标签值,进行ip段的替换,而避免从prometheus或exporter中修改采集指标。这时需要使用grafana的query_result函数

# 将10.10.15.xxx段的ip地址替换为10.20.15.xxx段 注:替换端口同理
query_result(label_replace(kube_pod_info{pod=~"$pod"}, "node", "10.20.15.$1",
"node", "10.10.15.(.*)"))
# 通过正则从返回结果中匹配出所需要的ip地址
regex:/.*node="(.*?)".*/

在这里插入图片描述
使用变量动态创建Panel和Row

当在一个Panel中展示多条时间序列数据时,通过使用变量可以轻松实现对时间序列的过滤,提高用户交互性。除此以外,我们还可以使用变量自动生成Panel或者Row。 如下所示,当需要可视化当前系统中所有采集任务的监控任务运行状态时,由于Prometheus的采集任务配置可能随时发生变更,通过硬编码的形式实现,会导致Dashboard配置的频繁变更
在这里插入图片描述
如下所示,这里为Dashboard定义了一遍名为job的变量:
在这里插入图片描述
通过使用label_values函数,获取到当前Promthues监控指标up中所有可选的job 标签的值:

label_values(up, job)

如果变量启用了Multi-value或者Include All Option选项的变量,那么在Panel的General选项的Repeat中可以选择自动迭代的变量,这里使用了Singlestat展示所有监控采集任务的状态:
在这里插入图片描述
Repeat选项设置完成后,Grafana会根据当前用户的选择,自动创建一个到多个Panel实例。 为了能够使Singlestat Panel能够展示正确的数据,如下所示,在Prometheus中,我们依然使用了 j o b 变量,不过此时的 job变量,不过此时的 job变量,不过此时的job反应的是当前迭代的值:
在这里插入图片描述

相关文章:

  • OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()
  • 多商户1.8.1版本前端问题优化集合指南
  • 可视化图解算法41:搜索二维矩阵(二维数组中的查找)
  • OpenCV CUDA模块中的矩阵算术运算------创建卷积操作对象的工厂方法 cv::cuda::createConvolution
  • 批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
  • Linux 判断是否有未挂载的盘 分区挂载 (挂载所有大小的盘,包括挂载超过2T的盘)
  • Qt框架核心组件完全指南:从按钮交互到定时器实现
  • Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
  • 基于STM32的光照测量报警Proteus仿真设计+程序设计+设计报告+讲解视频
  • 供应链风险管理中,企业如何识别关键风险因素?
  • 【C++】模版(1)
  • 机器学习--特征工程具体案例
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(4)
  • WPF Data Binding 及经典应用示例
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——node.js教程+webpack教程(nodejs教程)
  • 【占融数科-注册/登录安全分析报告】
  • Kotlin Compose Button 实现长按监听并实现动画效果
  • Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
  • 深度学习---模型预热(Model Warm-Up)
  • 【实战】GPT-SoVITS+内网穿透:3分钟搭建可公网访问的语音克隆系统
  • 《歌手2025》能否“爆”下去?
  • 夜读丨为萤火虫哭泣的夜晚
  • 海南乐城管理局原局长贾宁已赴省政协工作,曾从河南跨省任职
  • 前四月国家铁路发送货物12.99亿吨,同比增长3.6%
  • 广西桂林、百色、河池等地表态:全力配合中央对蓝天立的审查调查
  • 经济日报:人工智能开启太空经济新格局