Как объединить / объединить несколько универсальных полей / столбцов в одном поле / столбце со средним вычислением для значений универсального поля / столбца в Splunk? - PullRequest
0 голосов
/ 12 декабря 2018

У меня следующая ситуация в Splunk (см. Рисунок ниже).

Actual Situation

Мне нужен следующий шаблон в Splunk (см. Рисунок ниже).

Target Situation

У меня есть разные общие столбцы, где последняя часть имени столбца (суффикс) является динамической и неизвестной.Мне нужно объединить / объединить эти общие столбцы в один целевой столбец.В столбце target я хочу вычислить среднее значение для общего поля.Я думаю, что картина очень хорошо объясняет ситуацию.

1 Ответ

0 голосов
/ 18 декабря 2018

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

Сначала я собираюсь дать вам базовый поиск, с которым я буду работать ... Это создает макетнабор данных на основе вашего, но без агрегации.

| makeresults 
| eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
") 
| mvexpand raw | rename raw -> _raw 
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M") 
| kv | table _time Suffix*

Отсюда у меня есть только суффиксы и их соответствующие значения в определенных точках данных.Чтобы вычислить агрегации по суффиксу, было бы удобно, если бы я мог преобразовать это в ключ (являющийся конкретным используемым суффиксом) и значение ... что для меня сделает нестабильный .(Для любопытных противоположное направление - это, конечно, xyseries )

<base search> | untable _time key value

Теперь мне просто нужно выполнить агрегацию по ключу, в среднем по вашему случаю.И я хочу сохранить все исходные строки в исходном наборе данных, так что именно здесь eventstats было бы удобно

<base search> | untable _time key value
| eventstats avg(value) as average by key

Теперь у меня есть вывод _time, key, value, средний.Затем, чтобы вернуть ваши отдельные столбцы суффиксов, я могу использовать синтаксический трюк eval и назначить поле с именем для значения другого поля, а также использовать fields , чтобы удалить ненужные теперь поля,

<base search> | untable _time key value
| eventstats avg(value) as average by key
| eval {key}=value | fields - key value

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

| makeresults | eval raw=split("10.10.2016 05:55 SuffixA=17
10.10.2016 05:57 SuffixA=15
10.10.2016 05:55 SuffixB=16
10.10.2016 05:59 SuffixB=12
10.10.2016 06:01 SuffixB=11
10.10.2016 06:03 SuffixC=9
10.10.2016 06:05 SuffixC=18
10.10.2016 06:09 SuffixC=21","
") | mvexpand raw | rename raw -> _raw 
| rex "^(?<_time>\S+\s+\S+)" | eval _time=strptime(_time,"%m.%d.%Y %H:%M") 
| kv | table _time Suffix* | untable _time key value 
| eventstats avg(value) as average by key 
| eval {key}=value, StaticPart:{key}=average | fields - key value average 
| table _time StaticPart:* Suffix*

с этой точкидругим вариантом может быть использование foreach для запуска eval во всех полях StaticPart: * для создания нового среднего поля и удаления всех полей StaticPart, например:

<base search> 
| foreach StaticPart:* [eval average=coalesce('<<FIELD>>',average)] 
| fields - StaticPart:*
...