Мы хотим реализовать трассировку запроса службы с помощью http-плагина logstash в формате JSON Array.Проблема синтаксического анализа json с logstash
Мы получаем следующее сообщение об ошибке при попытке разобрать массив JSON:
ошибка:
:message=>"gsub mutation is only applicable for Strings, skipping", :field=>"message", :value=>nil, :level=>:debug, :file=>"logstash/filters/mutate.rb", :line=>"322", :method=>"gsub"}
:message=>"Exception in filterworker", "exception"=>#<LogStash::ConfigurationError: Only String and Array types are splittable. field:message is of type = NilClass>
Мой массив JSON является:
{
"data": [
{
"appName": "DemoApp",
"appVersion": "1.1",
"deviceId": "1234567",
"deviceName": "moto e",
"deviceOSVersion": "5.1",
"packageName": "com.DemoApp",
"message": "testing null pointer exception",
"errorLog": "null pointer exception"
},
{
"appName": "DemoApp",
"appVersion": "1.1",
"deviceId": "1234567",
"deviceName": "moto e",
"deviceOSVersion": "5.1",
"packageName": "com.DemoApp",
"message": "testing illegal state exception",
"errorLog": "illegal state exception"
}
]
}
мой logstash конфигурации является:
input {
http {
codec => "plain"
}
}
filter{
json {
source => "message"
}
mutate { gsub => [ "message", "},", "shr" ] }
split {
terminator => "shr"
field => "data"
}
}
}
output {
stdout { codec => "json" }
gelf{
host => localhost
facility => "%{type}"
level =>["%{SeverityLevel}", "INFO"]
codec => "json"
}
file{
path => "/chroot/result.log"
}
}
Любая помощь будет оценена.
Я думаю, что вы избежите специальных символов в регулярном выражении: 'mutate {gsub => [" message "," \} \, \ r \ n \ r \ n \ {"," \} shr \ {"] } ' – Kadir
@Kadir Я тоже попробовал ваше предложение. Но я все равно получаю те же ошибки. –