You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Splunk中匹配不同日志行的rex查询以提取关联字段

解决方案

你可以在同一条查询中依次声明两个rex提取规则,再通过日志的公共关联字段聚合两类事件的字段值即可,具体实现如下:

核心查询示例

# 先过滤你需要的数据源和时间范围,缩小扫描范围
index=your_index sourcetype=your_sourcetype ("foo bar" OR "baz qux")
| rex field=log "foo bar (?<DATA>\d{1,6}).*"
| rex field=log "baz qux (?<DATA2>\d{1,6}).*"
# 按两类日志共有的关联字段聚合,示例用你日志里的Caller字段,如有唯一请求ID/TraceID可替换为更精准的字段
| stats values(DATA) as DATA values(DATA2) as DATA2 by Caller
# 过滤掉同时没有两个字段的无效数据,也可以根据需求调整为保留至少有一个字段的条目
| where isnotnull(DATA) AND isnotnull(DATA2)
# 后续做你需要的关联统计,比如计算差值、求相关性、计数等
| eval diff=DATA-DATA2
| table Caller DATA DATA2 diff

实现逻辑说明

  • rex命令如果没有匹配到对应规则,只会将对应提取字段置空,不会报错也不会丢弃事件,因此两条rex可以共存互不影响
  • 如果两类事件没有明确的唯一关联字段,可以按时间窗口做关联聚合,示例如下:
index=your_index sourcetype=your_sourcetype ("foo bar" OR "baz qux")
| rex field=log "foo bar (?<DATA>\d{1,6}).*"
| rex field=log "baz qux (?<DATA2>\d{1,6}).*"
# 按1分钟为窗口分桶,聚合同时间窗口内的字段值,窗口大小可根据你的业务场景调整
| bin span=1m _time
| stats values(DATA) as DATA values(DATA2) as DATA2 by _time
| where isnotnull(DATA) AND isnotnull(DATA2)

常见调整方向

  • 若同一个关联键下存在多个DATA/DATA2值,可以把values()替换为latest()/earliest()取最新或最早的数值,或者用list()保留所有值
  • 如果需要统计全局相关性,聚合时可以不加by字段,直接用stats corr(DATA,DATA2) as 相关性系数计算两个字段的皮尔逊相关系数

内容的提问来源于stack exchange,提问作者DrSooch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:51:00