Требуется 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 затем используется для поиска значений ошибочного поля, которые соответствуют любому из значений переданного поля. Связанные строки затем снова объединяются с использованием уникального назначенного идентификатора.

Другие вопросы по тегам