如何在Grafana的KQL日志查询中使用查询变量
在Grafana的KQL日志查询中使用变量的实操指南
1. 定义并使用查询变量的完整流程
1.1 创建查询变量
- 打开目标仪表盘,点击顶部「设置」图标 → 选择「变量」→ 点击「添加变量」
- 变量类型选「查询」,数据源选择你的KQL兼容数据源(如Azure Monitor、Elasticsearch)
- 在「查询」输入框中编写KQL语句生成动态选项,比如获取所有服务名称:
AppLogs | distinct ServiceName - 按需设置「刷新」时机(比如「仪表盘加载时」或「变量值变化时」),最后保存变量(示例变量名:serviceName)
1.2 KQL查询中引用变量的语法
直接用$变量名嵌入KQL语句,Grafana会自动处理类型适配:
- 单值变量场景:
AppLogs | where ServiceName == $serviceName | summarize 请求量=count() by TimeGenerated bin 5m - 多值变量场景(开启变量多选后):
AppLogs | where ServiceName in ($serviceName) | summarize 请求量=count() by TimeGenerated bin 5m
2. 确保变量值实时正确传递的关键要点
- 类型匹配校验:确认变量值的类型和KQL查询中对应字段的类型一致(比如都是字符串类型),避免类型不匹配导致查询失败
- 启用全选选项:如果需要支持「全选」,在变量设置里勾选「Include all option」,此时Grafana会自动把变量替换为
dynamic(["值1","值2"...]),完美适配in操作符 - 预览替换结果:在查询编辑器中点击「预览」,查看Grafana实际生成的KQL语句,确认变量值是否正确代入
- 配置联动刷新:如果变量依赖其他变量(比如日志级别依赖服务名称),将依赖变量的「刷新」设置为「变量值变化时」,确保选项实时更新
联动变量示例
- 创建第一个变量serviceName,查询语句:
AppLogs | distinct ServiceName - 创建第二个变量logLevel,查询语句:
AppLogs | where ServiceName == $serviceName | distinct LogLevel,设置刷新时机为「变量值变化时」 - 最终KQL查询:
AppLogs | where ServiceName == $serviceName and LogLevel == $logLevel | summarize 错误数=count() by TimeGenerated bin 10m
选择不同服务时,日志级别选项会自动更新,查询也会实时代入最新变量值执行。
内容的提问来源于stack exchange,提问作者Srikanth Mannepalli
相关产品推荐
相关产品推荐

