Запрос для расчета продолжительности между двумя различными журналами в Splunk - PullRequest
0 голосов
/ 22 апреля 2020

Как часть моих требований, я должен вычислить продолжительность между двумя различными журналами, используя запрос Splunk. Например:

Журнал 2: 2020-04-22 13:12 Полученный запрос ADD ID: 123

Журнал 1: 2020-04-22 12:12 УДАЛИТЬ ИДЕНТИФИКАТОР запроса: 122

Общая строка между двумя журналами - «запрос получен:», а уникальные строки между двумя журналами - « ДОБАВИТЬ »,« УДАЛИТЬ ». И ожидаемая продолжительность выхода составляет 1 час.

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Вы можете использовать команду transaction, https://docs.splunk.com/Documentation/Splunk/latest/SearchReference/Transaction

Если вы извлекли поле ID, вы можете сделать

index=* | transaction ID

Это автоматически создаст поле с именем duration, которое является временем между первым и последним событием с тем же ID

0 голосов
/ 22 апреля 2020

Хотя transaction будет работать, это очень неэффективно

Этот stats должен показать вам, что вы ищете (предполагая, что поля уже извлечены):

(index=ndxA OR index=ndxB) ID=* ("ADD" OR "REMOVE")
| stats min(_time) as when_added max(_time) as when_removed by ID
| eval when_added=strftime(when_added,"%c"), when_removed(when_removed,"%c")

Если у вас нет уже извлечены поля, вам нужно будет изменить таким образом (удалите "\D^" в регулярное выражение, если значение идентификатора не находится в конце строки):

(index=ndxA OR index=ndxB) ("ADD" OR "REMOVE")
| rex field=_raw "ID \s+:\s+(?<ID>\d+)\D^"
| stats min(_time) as when_added max(_time) as when_removed by ID
| eval when_added=strftime(when_added,"%c"), when_removed(when_removed,"%c")
...