查询变量与模板
在 Grafana Alloy 查询语言中,查询变量和模板是强大的工具,可以帮助你动态生成查询,从而使仪表板更加灵活和可重用。通过使用变量和模板,你可以创建动态的仪表板,这些仪表板可以根据用户输入或上下文自动调整查询内容。
什么是查询变量?
查询变量是一种可以在查询中使用的占位符。它们允许你在运行时动态替换查询中的值。例如,你可以创建一个变量来表示时间范围、主机名或任何其他可配置的参数。这样,当你更改变量的值时,所有使用该变量的查询都会自动更新。
什么是模板?
模板是一种将变量嵌入查询中的方式。通过使用模板,你可以将变量的值插入到查询字符串中,从而生成动态查询。模板通常与查询变量一起使用,以实现更复杂的查询逻辑。
如何使用查询变量和模板
1. 定义查询变量
在 Grafana 中,你可以通过仪表板的设置来定义查询变量。以下是一个简单的例子,展示如何定义一个名为 hostname
的查询变量:
variables:
- name: hostname
label: Hostname
query: 'label_values(up, instance)'
refresh: onDashboardLoad
在这个例子中,hostname
变量将从 up
指标中提取所有 instance
标签的值,并在仪表板加载时刷新。
2. 在查询中使用模板
一旦定义了查询变量,你就可以在查询中使用它。以下是一个使用 hostname
变量的查询示例:
query: 'rate(http_requests_total{instance="$hostname"}[5m])'
在这个查询中,$hostname
将被替换为当前选中的 hostname
变量的值。这样,查询将自动针对选定的主机名进行计算。
3. 动态生成查询
通过结合查询变量和模板,你可以创建动态生成的查询。例如,假设你有一个变量 time_range
,它表示时间范围。你可以在查询中使用这个变量来动态调整时间范围:
query: 'sum(rate(http_requests_total{instance="$hostname"}[$time_range]))'
在这个查询中,$time_range
将被替换为当前选中的时间范围值,从而使查询能够根据用户选择的时间范围动态调整。
实际案例
案例 1:动态选择主机名
假设你有一个监控多个主机的仪表板,并且你希望用户能够选择特定的主机来查看其指标。你可以定义一个 hostname
变量,并在查询中使用它:
variables:
- name: hostname
label: Hostname
query: 'label_values(up, instance)'
refresh: onDashboardLoad
query: 'rate(http_requests_total{instance="$hostname"}[5m])'
当用户选择不同的主机名时,查询将自动更新以显示所选主机的请求速率。
案例 2:动态调整时间范围
假设你希望用户能够选择不同的时间范围来查看指标。你可以定义一个 time_range
变量,并在查询中使用它:
variables:
- name: time_range
label: Time Range
query: '1m,5m,15m,30m,1h'
refresh: onDashboardLoad
query: 'sum(rate(http_requests_total{instance="$hostname"}[$time_range]))'
当用户选择不同的时间范围时,查询将自动更新以显示所选时间范围内的请求速率。
总结
查询变量和模板是 Grafana Alloy 查询语言中非常强大的工具,它们可以帮助你创建动态、灵活的仪表板。通过使用查询变量和模板,你可以轻松地根据用户输入或上下文动态生成查询,从而使仪表板更加智能和可重用。
附加资源
练习
- 创建一个新的仪表板,并定义一个
hostname
变量,使其从up
指标中提取所有instance
标签的值。 - 在查询中使用
hostname
变量,动态显示所选主机的请求速率。 - 添加一个
time_range
变量,允许用户选择不同的时间范围,并在查询中使用它来动态调整时间范围。