Разбор вложенных журналов JSON с помощью фильтра мутаций и фильтра JSON
У меня есть несколько вложенных журналов, составленных с помощью json, и я хочу проанализировать с помощью фильтра мутаций в ELK для анализа журналов и матриц в Кибане.
Sample of Log like this:
{
"msgs": [{
"ts": "4734206Z",
"tid": 4,
"eid": 1,
"lvl": "Information",
"cat": "xxx",
"msg": {"cn"}
},
{
"ts": "2017",
"tid": 4,
"lvl": "Information",
"cat": "xxxx",
"msg": {
"cnt": "REQ"
},
"data": {
"Headers": {
"Connection": "Keep-Alive",
"Content-Length": "685",
"Content-Type": "text/xml; charset=utf-8",
"Accept-Encoding": "gzip, deflate",
"Expect": "100-continue",
"Host": "localhost:1000",
"SOAPAction":\"http://xxx.xxx.com/xxSer/SendXXXX\""
}
}
},
{
"ts": "2017-08-22T10:30:07.8074746Z",
"tid": 4,
"lvl": "Information",
"cat": "xxx",
"msg": {
"cnt": "xxx addded."
},
"data": {
"SourceType": "xxx",
"Version": "1.0",
"DestinationTypes": ["xxxxx"],
"ConfigurationFile": "./xxx/xxx.xml"
}
},
{
"ts": "2017-08-22T10:30:07.8264749Z",
"tid": 4,
"lvl": "Information",
"cat": "xxx",
"msg": {
"cnt": "REQ"
},
"data": {
"Trace": "xxx" }
}
]
}
Здесь вы можете видеть, что вложенные сообщения json содержат массив элементов для полей. Теперь проблема в том, что порядок вложенного массива элементов не фиксирован. Из-за этого мы не можем отобразить или получить поле, используя фильтр мутаций.
else if[type]=="XXXXX"
{
json {
source => "message"
target => "doc"
}
mutate {
add_field => {
"ts" => "%{[doc][msgs][0][ts]}"
"tid1" => "%{[doc][msgs][0][tid]}"
"eid1" => "%{[doc][msgs][0][eid]}"
"lvl1" => "%{[doc][msgs][0][lvl]}"
"cat1" => "%{[doc][msgs][0][cat]}"
"msg1" => "%{[doc][msgs][0][msg]}"
"data" => "%{[doc][msgs][1][data]}"
"actual-message" =>"%{[doc][msgs][3][data][Trace]}"
"error" =>"%{[doc][msgs][6][msg][ex]}"
"error-code" =>"%{[doc][msgs][6][msg][ex][exs][0][ec]}"
}
}
}
По приведенному выше сценарию мы пытаемся получить поля элементов массива [0] и [6]. Но иногда одни и те же поля появляются в [7] или [9] или [10].
Пожалуйста, предоставьте решение для этого, чтобы динамически мы могли получить нужные поля, не зависящие от фиксированного порядка элементов массива.