跳到主要内容

Grafana 变量与动态查询

变量让同一 Dashboard 根据环境、集群、Namespace、服务或实例切换查询范围。变量应是受控筛选条件,而不是让普通用户输入任意高成本查询或无限制正则。

1. Variable 概念​

常见变量按依赖顺序排列:environment -> cluster -> namespace -> service -> instance。上游变量变化时,下游变量自动刷新,避免用户在错误范围内查询。

2. 常用变量类型​

类型用途示例
Query从数据源动态获取选项label_values(up, cluster)
Custom固定、有限的选项dev,staging,production
Interval控制查询粒度1m,5m,15m
Data source在同构数据源之间切换Prometheus 生产/预发
# namespace 变量
label_values(kube_namespace_created{cluster="$cluster"}, namespace)

# 多选 service 变量在 Panel 中使用正则匹配
sum by (service) (
rate(http_requests_total{cluster="$cluster", namespace=~"$namespace", service=~"$service"}[$__rate_interval])
)

3. Dashboard 动态化​

多环境和多集群切换时,数据源、变量和 Panel 查询都要使用同一边界标签。若生产与测试使用不同指标名或标签,先修复采集规范,不要在每个 Panel 堆叠分支表达式。

$__rate_interval 会随面板时间范围和数据源抓取间隔选择合理窗口,通常比固定 5m 更适合可缩放 Dashboard。多选变量需使用 =~,单选精确变量通常使用 =。

4. Variable 最佳实践​

  • 设置合理默认值和 All 选项,避免首次加载查询全量数据。
  • 限制变量刷新频率,避免每次 Dashboard 刷新触发大量标签查询。
  • 不在变量中暴露敏感标签值、内部地址或未授权环境。
  • 通过 Query Inspector 检查变量展开后的真实表达式与查询成本。
  • 在变量说明中写清标签来源、允许范围和依赖关系。