3-Grafana Dashboard变量

熊 0 阅读 监控平台

1. 什么是变量(Variables)?

变量(Variables)一般包含一个或多个可选择的值。

使用变量我们可以创建出交互式的动态仪表盘!原本查看某些主机时 , 需要每次手动修改Panel中的PromQL表达式 , 或者给这些主机创建单独的Panel。这样的硬编码方式会导致Dashboard配置频繁修改 , 使用变量后 , 同一个仪表盘可以显示不同变量值(主机和实例)的数据。有变量的仪表盘就是一个模板 , 变量给模板注入了灵魂。

例如 : 当用户只想关注其中某些主机时 , 基于当前我们已经学习到的知识只有两种方式 , 要么每次手动修改Panel中的PromQL表达式 , 要么直接为这些主机创建单独的Panel。主机有很多时,需要新建无数的仪表盘来展示不同的主机状态,好在grafana中有Variables ,可以动态修改仪表盘中的参数,这样仪表盘的内容也会随参数的值改变而改变。

2. 模板介绍

2.1 变量定义

通过Dashboard页面的Settings选项 , 可以进入Dashboard的配置页面并且选择Variables子菜单:

grafana-dashboard-Variables-1
grafana-dashboard-Variables-2

2.2 Grafana变量

说明 : Grafana变量分四个部分。

  • General (常用)

  • Query Options (查询选项)

  • Selection Options(选择项)

  • Value groups/tags (Experimental feature) , Grafana还处在验证性的特征

参考如下视图 :

grafana-dashboard-Variables-3

分析这四部分的使用

2.3 General (常用)

  • Name(定义变量名称)

  • Label(标签) , 在仪表盘上显示标签的名字

  • Hide(隐藏) , 用于隐藏label(标签)或者暂时不用variable(变量)

  • Type(变量的类型)

需要指定变量的名称 , 然后就可以通过$variable_name的形式引用该变量。Grafana目前支持6种不同的Type变量类型 , 而能和Prometheus一起工作的主要包含以下5种类型 :

grafana-dashboard-Variables-4

Type(变量的类型)又包括如下几种选项 :

  • Interval(间隔)此变量可以表示查询的时间跨度 , 这样在查询的SQL中不用硬件编码时间间隔 , 而是使用interval变量来定义时间间隔。

  • Query(查询)此变量用于编写数据源查询 , 与Query Options中的设置配合使用 , 通常返回度量名称 , 标签值等。例如 , 返回主机或主机组的名称。

  • Datasource(数据源)次变量 用于指定数据源 , 例如有多个zabbix源时 , 就可以使用此类变量 , 方便在Dashboard中交互切换数据源 , 快速显示不同数据源中的数据。

  • Custom(自定义)用户自定义设置的变量。

  • Constant(常量)定义可以隐藏的常量。对于要共享的仪表盘中包括路径或者前缀很有用。在仪表盘导入过程中。常量变量将成为导入时的选项。

  • Ad hoc filters(Ad hoc过滤器)这是一种非常特殊的变量、目前只适用于某些数据源、如InfluxDB、Prometheus、Elasticsearch。使用指定数据源时将自动添加所有度量查询出的键/值。

  • Text Box(文本框)次变量用于提供一个可以自由输入的文本框。

2.4 Query Options(查询选项)

grafana-dashboard-Variables-5
  1. Data source(可以指定数据源)。

  2. Refresh(刷新方式) , 即何时Dashboard中的数据会呗刷新 。

    • Never(从不)

    • On Dashboard load(仪表盘加载时)。

    • On time range changed(时间范围发生变化) , 通常会选择 On Dashboard Load。

    • 刷新方式有:

  3. Regex(正则) 使用正则表达式类匹配对应的值。

  4. Sort(排序)

    • Disanled禁用。

    • Alphabetical(asc)按字母升序。

    • Alphabetical(desc)按字母降序。

    • Numerical(asc)按数字升序。

    • Numerical(desc)按数字降序。

    • Alphabetical(casc-insensitive,asc)按字母不区分大小写升序。

    • Alphabetical(casc-insensitive,desc)按字母不区分大小写降序。

2.5 Selection Options(选择项)

grafana-dashboard-Variables-6
  1. Multi-value允许多选 , 即在Dashboard中可以同时勾选多个。

  2. Include All option 允许选择All(所有) , 即在Dashboard中可以有一个All的选项 , 允许勾选。

2.6 Value groups/tags(Experimental feature)

grafana-dashboard-Variables-7

Grafana还处在验证性的特征。

变量具体配置如下图 :

grafana-dashboard-Variables-8
grafana-dashboard-Variables-9
grafana-dashboard-Variables-10

3. 案例

3.1 变量定义

通过Dashboard页面的Settings选项 , 可以进入Dashboard的配置页面并且选择Variables子菜单。

用户需要指定变量的名称 , 后续用户就可以通过$variable_name的形式引用该变量。

当Prometheus同时采集了多个主机节点的监控样本数据时 , 用户希望能够手动选择并查看其中特定主机的监控数据。这时我们需要使用Query类型的变量。

grafana-dashboard-Variables-11

这里我们为Dashboard创建了一个名为node的变量 , 并且指定其类型为Query。Query类型的变量 , 允许用户指定数据源以及查询表达式 , 并通过正则匹配(Regex)的方式对查询结果进行处理 , 从而动态生成变量的可选值。在这里指定了数据源为Prometheus。

通过使用node_load1我们得到了两条时间序列 :

node_load1{instance="localhost:9100",job="prometheus"}
node_load1{instance="xxx.xxx.xxx.xxx:9100",job="xxx.xxx.xxx.xxx"}

通过指定正则匹配表达式为/._instance="([^"]_).*/从而匹配出标签instance的值作为node变量的所有可选项 , 即 :

foo:9100
localhost:9100

Selection Options选项中可以指定该变量的下拉框是否支持多选 , 以及是否包含全选(All)选项。

保存变量后 , 可以在Panel的General或者Metrics中通过$node的方式使用该变量。

grafana-dashboard-Variables-12

这里需要注意的是 , 如果允许用户多选在PromQL表达式中应该使用标签的正则匹配模式 , 因为Grafana会自动将多个选项格式化为如“foo:9100|localhost:9100”的形式。

使用Query类型的变量能够根据允许用户能够根据时间序列的特征维度对数据进行过滤。在定义Query类型变量时 , 除了使用PromQL查询时间序列以过滤标签的方式以外 , Grafana还提供了几个有用的函数 :

grafana-dashboard-Variables-13

参考链接

构建企业级监控平台系列(二十九) : Grafana Dashboard 变量 (qq.com)