Splunk如何基于下拉选择为仪表盘编写自定义动态搜索查询
解决方案
你这个需求完全可以通过Splunk自带的case函数结合下拉选择器的令牌实现,以下是具体实现步骤:
步骤1:确认下拉选择器的令牌命名
首先给两个下拉选择器配置令牌名,建议命名规则如下:
- 应用选择器的令牌设为
$app_name$,可选值的实际输出值对应App1、App2 - 日志类型选择器的令牌设为
$log_type$,可选值的实际输出值对应Detailed、App_specific
步骤2:编写动态搜索语句
直接在搜索面板的查询框里使用以下语句即可覆盖所有场景:
index=$app_name$ [| makeresults | eval filter=case("$log_type$"=="Detailed", "", "$app_name$"=="App1" AND "$log_type$"=="App_specific", "\"taskExecutor-1\"", "$app_name$"=="App2" AND "$log_type$"=="App_specific", "\"ool-44-thread-1\"") | return $filter ] | sort -_time | table msg
语句逻辑说明
- 开头的
index=$app_name$直接读取选中的应用名,先过滤对应索引的日志 - 中括号内的子搜索会根据两个下拉框的选择动态生成过滤条件:
- 当日志类型选Detailed时,返回空值,不会追加额外过滤条件
- 当选中App1+App_specific时,返回
"taskExecutor-1"作为过滤条件 - 当选中App2+App_specific时,返回
"ool-44-thread-1"作为过滤条件
- 后续排序、字段输出逻辑和你原需求完全一致
备选简化方案
你也可以直接在下拉选择器的配置里加联动令牌,不需要在搜索语句里写判断逻辑:
给日志类型的每个选项配置额外的令牌$extra_filter$:
- 选Detailed时,
$extra_filter$的值设为空 - 选App_specific时,根据应用选择器的联动结果赋值:App1对应值为
"taskExecutor-1",App2对应值为"ool-44-thread-1"
配置完成后搜索语句可以简化为:
index=$app_name$ $extra_filter$ | sort -_time | table msg
该方案配置更简单,搜索运行效率也更高。
内容的提问来源于stack exchange,提问作者user2769790
相关产品推荐
相关产品推荐

