在Splunk中通过正则提取_raw字段correlation_id值为CorrelationId4
Splunk 截断JSON日志提取correlation_id生成自定义字段CorrelationId4的方案
场景适配前提
当前待处理的_raw字段为截断的JSON格式内容:{"data":{"correlation_id":"51g0d88f-3ab8-4mom-betb-b31ed6e1662z","u_originator_uri,因结构不完整,常规JSON解析类操作(如spath)可能出现解析失败、字段提取异常的问题,直接基于正则匹配是最稳定的实现路径。
基础可运行提取语句
| rex field=_raw "correlation_id\"\s*:\s*\"(?<CorrelationId4>[^\"]+)\""
正则匹配逻辑说明
- 精准匹配
correlation_id键的固定结构:跳过键名后可能存在的空白、冒号两侧的空白、值的起始双引号,适配不同书写格式的JSON内容 - 捕获组
(?<CorrelationId4>)直接将匹配到的值赋值给要求的自定义字段名 - 捕获规则
[^\"]+会匹配到值对应的结束双引号为止,完全不受后续截断内容的影响,哪怕后面的u_originator_uri字段不完整也能稳定提取
高精度优化版本(避免误匹配)
如果日志中存在多个不同层级的correlation_id字段,仅需提取嵌套在data对象下的目标值,可使用以下优化正则,避免跨层级同名字段误抓:
| rex field=_raw "\"data\":\s*\{[^{}]*correlation_id\"\s*:\s*\"(?<CorrelationId4>[^\"]+)\""
优化逻辑说明
- 先定位到
data键的起始位置,确认是data对象内部的字段匹配 - 限定匹配范围在data对象的第一层内部,不会抓取到data嵌套子结构或者外层同名字段的内容
内容的提问来源于stack exchange,提问作者Dshruti
相关产品推荐
相关产品推荐

