如何使用inputlookup值过滤Splunk表格行
Splunk查询:筛选两个lookup中servicename匹配的行
需求说明
我有两个inputlookup,想要输出包含lookup1字段的表格,但仅保留servicename列匹配lookup2中值的行。
现有Lookup数据
Lookup 1
| inputlookup lookup1 | search status=6 | fields servicename, status, app_version, release_type
数据内容:
servicename1, 6, 12.1, Production servicename2, 6, 14.0, Demo servicename3, 6, 14.4, Testing
Lookup 2
| inputlookup lookup2 | fields servicename, hostname
数据内容:
servicename2, server34.companyy.com servicename5, server12.companyy.com
尝试的查询(无法正常运行)
| inputlookup lookup1 | search status=6 | | eval check = if(match(servicename, IN (|inputlookup lookup2 |fields servicename)),1,0) | search check=1 | table servicename app_version release_type
期望结果
servicename2, 14.0, Demo
可行解决方案
方法1:使用lookup命令(推荐,效率更高)
这是Splunk中关联lookup表的标准方式,通过匹配字段关联后筛选有效行:
| inputlookup lookup1 | search status=6 | lookup lookup2 servicename OUTPUT servicename as matched_servicename | where isnotnull(matched_servicename) | table servicename app_version release_type
- 逻辑:用
lookup命令将lookup2中匹配的servicename映射为matched_servicename字段,再通过where isnotnull筛选出成功匹配的行,最后输出目标字段。
方法2:使用子查询配合IN
如果想沿用IN的思路,需要用子查询生成匹配列表,配合format命令转换格式:
| inputlookup lookup1 | search status=6 AND servicename IN [| inputlookup lookup2 | fields servicename | format] | table servicename app_version release_type
- 逻辑:子查询
[| inputlookup lookup2 | fields servicename | format]会返回类似(servicename="servicename2" OR servicename="servicename5")的格式,直接作为IN的匹配条件筛选行。
原查询失败原因
match函数是用于正则表达式匹配的函数,不支持IN()语法;同时IN()无法直接嵌套子查询,必须通过方括号包裹的子查询语法来传递匹配列表。
内容的提问来源于stack exchange,提问作者user2725960
相关产品推荐
相关产品推荐

