Splunk中高效配置多过滤条件:批量排除519个IP的方法
在Splunk中高效添加大量IP过滤条件的方法
我太懂一个个写519个IP!=xxx有多折磨人了,这几个高效方案绝对能帮你省大把时间:
方案1:批量构造NOT IN列表(快速临时解决)
如果只是临时用一次这个IP列表,最快的方式就是批量生成NOT IN的参数:
- 先把所有需要排除的IP整理成每行一个的文本(比如从Excel复制粘贴到记事本)
- 用文本编辑器的「替换」功能(比如VS Code、Notepad++),把换行符替换成
', '(注意是单引号+逗号+空格) - 把处理后的字符串放进
NOT IP IN ('和')中间,最终的查询会变成:
这样几秒就能搞定519个IP的批量导入,完全不用手动逐个敲。index=indexer action=Null NOT IP IN ('10.34.67.32', '87.90.32.10', 'xxx.xxx.xxx.xxx', ...)
方案2:使用查找表Lookup Table(适合长期维护)
如果这个IP黑名单需要频繁更新或者多次使用,用查找表是更优的选择:
- 准备CSV文件:新建一个
blocked_ips.csv,内容格式如下(第一行是表头,下面每行一个IP):blocked_ip 10.34.67.32 87.90.32.10 xxx.xxx.xxx.xxx - 上传查找表:
- 进入Splunk的「Settings」>「Lookups」>「Lookup table files」>「Add new」
- 选择刚才创建的CSV文件,设置好应用权限后保存
- 编写查询:通过关联查找表来排除匹配的IP:
原理是:index=indexer action=Null | lookup blocked_ips.csv blocked_ip AS IP OUTPUT blocked_ip | where isnull(blocked_ip)lookup会把日志中的IP和查找表的blocked_ip匹配,匹配到的会输出blocked_ip字段,最后where isnull(blocked_ip)就只保留那些不在黑名单里的日志。
方案3:创建搜索宏(适合重复使用的场景)
如果这个IP排除规则需要在多个查询里重复使用,可以把它做成搜索宏:
- 整理IP列表字符串:先按照方案1的方式生成
NOT IP IN ('x', 'y', ...)的完整字符串 - 创建宏:
- 进入Splunk的「Settings」>「Advanced Search」>「Search macros」>「Add new」
- 宏名称设为
exclude_blocked_ips(可以自定义),宏的定义内容填刚才的字符串,设置好应用权限后保存
- 使用宏:之后查询时直接调用宏即可:
以后如果要更新IP列表,只需要修改宏的定义,所有用到这个宏的查询都会自动生效。index=indexer action=Null `exclude_blocked_ips`
额外提示
- 当IP数量超过几百个时,查找表的性能会比
NOT IN更好,因为Splunk对查找表的检索做了优化 - 不管用哪种方法,都要注意IP格式的正确性,避免多余的空格、换行符或者错误的IP地址
内容的提问来源于stack exchange,提问作者Supriya Sharma




