当记录进程的第一步但未记录最后一步时,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
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 |