Группируйте события по нескольким полям в Splunk

Привет, у меня есть несколько событий в splunk, которые имеют такую ​​форму-

Местоположение: какое-то значение (одно и то же значение может присутствовать в нескольких событиях).

Клиент: какое-то значение (одно и то же значение может присутствовать в нескольких событиях)

TransactionNumber: некоторое значение (уникальное для каждого события).

Время транзакции: некоторое значение (уникальное для каждого события).

Теперь мне нужна таблица в таком виде -

Таблица

Обычно в каждом месте может быть несколько клиентов, и у каждого клиента могут быть разные транзакции. Номер транзакции и время транзакции уникальны и соответствуют однозначному соответствию.

Я использую этот запрос в splunk-

| список статистики (TransactionNumber) список (TransactionTime) по клиенту местоположения

Что происходит: я получаю уникальную комбинацию местоположения и клиента, но я хочу, чтобы уникальные клиенты были перечислены в определенном месте.

Вот что я получаю -

введите описание изображения здесь

Как можно изменить запрос, чтобы добиться того же?


person Kunal gupta    schedule 01.09.2020    source источник


Ответы (2)


Вот полный пример с использованием _внутреннего индекса

index=_internal

| stats list(log_level) list(component) by sourcetype source

| streamstats count as sno by sourcetype 
| eval sourcetype=if(sno=1,sourcetype,"") 
| fields - sno

Для вашего варианта использования я думаю, что это должно сработать

| stats list(TransactionNumber) list(TransactionTime) by Location Client
| streamstats count as sno by Location 
| eval Location=if(sno=1,Location,"") 
| fields - sno

Если это решит вашу проблему, найдите время, чтобы принять ответ. Это можно сделать, щелкнув галочку рядом с ответом, чтобы переключить его с серого на заполненный!

Ваше здоровье

person Honky Donkey    schedule 01.09.2020
comment
Как я и хотел! Спасибо :) - person Kunal gupta; 01.09.2020

Я бы сделал это:

index=ndx sourcetype=srctp Location=* Client=* TransactionNumber=* TransactionTime=*
| eval TNTT=TransactionNumber+" sep "+TransactionTime
| stats values(TNTT) as TNTT by Location Client
| rex field=TNTT "(?<TransactionNumber>\S+) sep (?<TransactionTime>.+)"
| table Location Client TransactionNumber TransactionTime

Это переносит уникальное взаимно однозначное сопоставление (как вы его описали) времени и числа через строку stats values(), а затем разделяет их обратно.

Вы можете захотеть | mvexpand TNTT перед выполнением строки rex - если позже вы захотите отсортировать таблицу каким-либо другим способом

person warren    schedule 08.09.2020