Splunk中如何编写rex表达式移除JSON日志末尾存在的逗号
Splunk 嵌套JSON日志末尾逗号移除及事件拆分方案
核心处理需求
针对嵌套结构的JSON日志文件,需实现三类处理逻辑:
- 删除文件中多余的头部、尾部内容
- 将单个完整文件拆分为多个独立的JSON事件
- 清除拆分后每个事件末尾附带的多余逗号
原有正则失效原因
此前测试的3个正则无法适配场景,问题如下:
s/\(,$\)?//g:全局匹配规则会误删JSON结构内的合法行尾逗号,可选匹配逻辑也存在优先级问题,无法精准定位事件末尾的逗号s/,$//:未兼容事件末尾可能存在的换行、空格等空白字符,匹配成功率低s/\(.*\),/\1/:贪婪匹配逻辑会误删JSON内最后一个键值对之前的合法逗号,仅能适配无嵌套的极简单行文本
可行配置方案
所有配置均在Splunk的props.conf对应数据源的配置段下添加即可:
1. 头尾内容裁剪与事件拆分
# 移除头部冗余内容,将N替换为实际需要删除的头部字符长度 SEDCMD-remove_header = s/^(.|\n){N}// # 移除尾部冗余内容,将YOUR_TAIL_RULE替换为实际尾部内容的匹配规则 SEDCMD-remove_footer = s/YOUR_TAIL_RULE$// # 事件拆分规则,将正则调整为匹配你单个JSON事件的起始特征即可 LINE_BREAKER = ([\r\n]+)\{\"event_start_key\" SHOULD_LINEMERGE = false
2. 移除事件末尾多余逗号
以下规则会精准匹配事件末尾的逗号,兼容前后空白字符,不会误删JSON内部的合法逗号:SEDCMD-remove_trailing_comma = s/,\s*$//
生效操作
配置修改完成后,重载Splunk配置或重启Splunk服务即可,新接入的日志会自动按规则处理。
内容的提问来源于stack exchange,提问作者Ankit Goyal
相关产品推荐
相关产品推荐

