当记录进程的第一步但未记录最后一步时,Splunk 查询 return 列表

Splunk query to return list when a process' first step is logged but its last step is not

Splunk 计数和分组问题...

在一个重复的过程中,我对各个点都有记录。在每个点记录四个字段:_time、uniqueId、sessionId 和 message。

uniqueId和sessionId各不相同,但每次流程一致

该消息有几个可能的值。但我只关心什么时候是“firstMessage”或“lastMessage”。

日志可能如下所示:

_time uniqueId message sessionId
a 12-AB firstMessage aaa-3
b 12-AB otherMessage aaa-3
c 12-AB lastMessage aaa-3
d 28-EA firstMessage bbb-5
e 28-EA otherMessage bbb-5
f 33-A7 firstMessage jjj-9
g 33-A7 otherMessage jjj-9
h 71-3C firstMessage uuu-3
i 71-3C otherMessage uuu-3
j 71-3C lastMessage uuu-3

我想要 table 在记录了 uniqueId 的 firstMessage 但没有记录 uniqueId 的 lastMessage 时显示所有字段。即进程开始但没有成功结束。

鉴于上述情况,我想要的输出是:

_time uniqueId message sessionId
d 28-EA firstMessage bbb-5
f 33-A7 firstMessage jjj-9

我试过了:

...start of search... message="firstMessage" OR msg="lastMessage"
| stats count values(message) by uniqueId
| where count < 2
| fields _time uniqueId message sessionId

但是time和sessionId列是空白的。

感谢任何帮助。

是的,_time 应该是您的基本 Splunk Date/Time。我只是没有输入这些内容。

您只需让您的统计命令创建您想要的所有字段。您想要的时间是该 uniqueId 的 min(time)。您还需要 sessionId 的聚合 - 如果具有单个 uniqueId 的所有事件的 sessionId 都相同,那么您也可以使用 min(sessionId)

...start of search... message=firstMessage OR message=lastMessage
| stats count values(message) as message, min(_time) as _time, min(sessionId) as sessionId by uniqueId
| where count < 2
| table _time uniqueId message sessionId

这是一个可运行的示例 - 首先生成原始数据,然后进行查询:

| makeresults
| eval _raw="
uniqueId message      sessionId
12-AB    firstMessage aaa-3
12-AB    otherMessage aaa-3
12-AB    lastMessage  aaa-3
28-EA    firstMessage bbb-5
28-EA    otherMessage bbb-5
33-A7    firstMessage jjj-9
33-A7    otherMessage jjj-9
71-3C    firstMessage uuu-3
71-3C    otherMessage uuu-3
71-3C    lastMessage  uuu-3
"
| multikv forceheader=1 fields uniqueId message sessionId
| streamstats count
| eval _time=_time-count

| search message=firstMessage OR message=lastMessage
| stats count values(message) as message, min(_time) as _time, min(sessionId) as sessionId by uniqueId
| where count < 2
| table _time uniqueId message sessionId

它生成所有字段:

_time uniqueId message sessionId
2021-05-26 09:57:07 28-EA firstMessage bbb-5
2021-05-26 09:57:05 33-A7 firstMessage jjj-9