Splunk запрос для возврата списка, когда первый шаг процесса зарегистрирован, но его последний шаг не является

#splunk #splunk-query

Вопрос:

Количество разделений и вопрос о группировке…

У меня есть записи по различным моментам повторяющегося процесса. В каждой точке регистрируются четыре поля: _time, UniqueID, идентификатор сеанса и сообщение.

Идентификатор UniqueID и идентификатор сеанса отличаются друг от друга, но каждый раз согласовываются в процессе.

Сообщение имеет несколько возможных значений. Но меня волнует только то, когда это «Первое сообщение» или «Последнее сообщение».

Журналы могут выглядеть примерно так:

_ время Уникальный Сообщение SessionID
a 12-АВ Первое сообщение ааа-3
b 12-АВ Другое сообщение ааа-3
c 12-АВ Последнее сообщение ааа-3
d 28-ЕА Первое сообщение ввв-5
e 28-ЕА Другое сообщение ввв-5
f 33-А7 Первое сообщение jjj-9
g 33-А7 Другое сообщение jjj-9
h 71-3С Первое сообщение ууу-3
i 71-3С Другое сообщение ууу-3
j 71-3С Последнее сообщение ууу-3

Мне нужна таблица, показывающая все поля при записи первого сообщения для уникального идентификатора, но последнего сообщения для этого уникального идентификатора нет. То есть процесс начинается, но не заканчивается успешно.

Результат, который я хотел бы получить, учитывая вышесказанное, был бы:

_ время Уникальный Сообщение SessionID
d 28-ЕА Первое сообщение ввв-5
f 33-А7 Первое сообщение 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 должен быть вашей основной датой/временем Сплунка. Я просто не печатал их.

Комментарии:

1. Время, которое вы хотите, — это минута(время) для этого уникального идентификатора. Вам также нужна агрегация для идентификатора сеанса-как он меняется по сравнению с уникальным идентификатором? Один и тот же уникальный идентификатор не может всегда иметь один и тот же идентификатор сеанса, потому что, если бы это было так, зачем вам иметь оба? Связано ли это с тем, что один и тот же идентификатор сеанса может использоваться для более чем одного уникального идентификатора? Если это так, вы можете просто выбрать первый идентификатор сеанса для этого уникального идентификатора.

Ответ №1:

Вам просто нужно заставить свою команду статистики создать все поля, которые вы хотите иметь. Время, которое вы хотите min(time) , подходит для этого уникального идентификатора. Вам также нужна агрегация для идентификатора сеанса — если идентификатор сеанса одинаков для всех событий, имеющих один уникальный идентификатор, то вы также можете использовать 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
 

Он производит все поля:

_ время Уникальный Сообщение SessionID
2021-05-26 09:57:07 28-ЕА Первое сообщение ввв-5
2021-05-26 09:57:05 33-А7 Первое сообщение jjj-9