Требуется Splunk-запрос для поиска общих элементов между двумя полями, когда каждое поле является списком
У меня каждое событие в виде объекта JSON ниже, который индексируется Splunk. Как я могу получить запрос Splunk, чтобы найти все такие сбои, которые присутствуют в обоих "failed"
а также "passed"
массивы?
"output":{
"date" : "21-09-2017"
"failed": [ "fail_1", **"fail_2"** ],
"passed": [ "pass_1", "pass_2" , **"fail_2"**]
}
Для приведенного выше примера результат будет "fail_2"
,
1 ответ
Вы можете сделать что-то вроде:
| makeresults
| eval x = "{\"output\":{\"date\" : \"21-09-2017\",\"failed\": [ \"fail_1\", \"fail_2\"],\"passed\": [ \"pass_1\", \"pass_2\" , \"fail_2\"]}}"
| eval x = mvappend(x,"{\"output\":{\"date\" : \"21-09-2017\",\"failed\": [ \"f_1\", \"f_2\"],\"passed\": [ \"f_1\", \"pass_2\" , \"f_2\"]}}")
| mvexpand x
| streamstats count as id
| spath input=x
| rename "output.failed{}" as failed, "output.passed{}" as passed, "output.date" as date
| mvexpand failed
| eval common_field = if(isnotnull(mvfind(passed, failed)),failed,null)
| stats values(date) as date, values(failed) as failed, values(passed) as passed, values(common_field) as common_field by id
Пример содержит 2 примера журнала событий, где неудачные и пройденные имеют общие значения. streamstats
затем используется для назначения уникального идентификатора каждому событию, так как я не видел уникальный идентификатор в вашем примере. spath разбирает объект json на поля. Как только это будет сделано, mvexpand
создает одну строку для каждого значения с ошибкой. mvfind
затем используется для поиска значений ошибочного поля, которые соответствуют любому из значений переданного поля. Связанные строки затем снова объединяются с использованием уникального назначенного идентификатора.