Splunk:找出两个事件之间的区别

Splunk: Find the difference between 2 events

我有一个带有 2 个 API 的服务器:/migrate/start 和 /migrate/end

对于每个请求,我都会记录使用我要迁移的服务的用户的用户 ID(字段 usrid="")和调用的 api(字段 api="")。

用户调用 /migrate/start,然后调用 /migrate/end。我想编写一个 slunk 查询来列出正在迁移的用户 ID,即那些调用 /migrated/start 但尚未调用 /migrate/end 的用户 ID。我将如何编写该查询?

谢谢

假设您在日志中只有 2 个 api 调用 (start/end),您可以使用 stats 命令来执行此操作。

| your_search
| stats values(api) as api by usrid
| where api!="/migrate/end"

这会合并每个用户完成的所有 api 次呼叫,并删除呼叫过 /migrate/end

的呼叫

一般的方法是获取所有的开始事件和结束事件,通过用户ID匹配起来。为每个用户获取最近的事件,并丢弃 "migrate/end" 的事件。剩下的就是所有正在进行的迁移。像这样:

index = foo (api="/migrate/start" OR api="/migrate/end") 
| stats latest(api) by usrid 
| where api="/migrate/start"