Splunk-запрос для получения всех подсчетов, включая события (_raw), где совпадения не существует - PullRequest
0 голосов
/ 29 апреля 2020

Как получить количество всех записей для данного поля, включая количество всех записей, где поле не существует.

Например:

Учитывая данные, которые обычно выглядят примерно так:

{"source_host":"host1", "msg":"some message", "user":"jack"}
{"source_host":"host2", "msg":"some other message", "user":"jill"}

Я могу получить количество всех записей, как это:

index="my_index" sourcetype=my_proj:my_logs | table _raw | stats count(_raw)

Я могу получить количество записей для данного поля следующим образом:

index="my_index" sourcetype=my_proj:my_logs | stats count(_raw) by source_host

Предоставляет таблицу, подобную этой

host       count
host_1     89
host_2     57

Но я бы хотел, чтобы запрос также подсчитывал записи где поле существует, но оно пустое, например:

{"source_host":"", "msg":"some message", "user":"jack"}

А также подсчитывать сообщения, подобные этому:

asdf asdf asdf asdf asd fasdfasdfafas 
foo bar
Some other Junk someone wrote to my log

Чтобы получить такую ​​таблицу

host       count
host_1     89
host_2     57
null       1
no_def     3

Ответы [ 3 ]

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

Функция case может помочь. В этом примере, если поле source_host не существует (значение равно нулю), тогда оно устанавливается равным «no_def»; если значение является пустой строкой, оно устанавливается равным «null»; в противном случае он устанавливается на себя.

index="my_index" sourcetype=my_proj:my_logs 
| eval source_host = case(isnull(source_host), "no_def", source_host=="", "null", 1==1, source_host)
| stats count() by source_host
1 голос
/ 29 апреля 2020

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

index="my_index" sourcetype=my_proj:my_logs | eval src_host=case(isnull(source_host),"Not defined", source_host="", "blank", true(), source_host) | stats count by src_host
1 голос
/ 29 апреля 2020

Используйте fillnull таким образом ( docs.Splunk страница для fillnull ):

| fillnull value="N/A" <field or field list or leave blank for all fields>

В любом другом случае, кроме тривиального поиска, это будет очень отнимает много времени

Примечание: вы можете использовать другой value="", если хотите

...