Анализатор JSON в logstash игнорирует данные?
Я уже давно занимаюсь этим и чувствую, что фильтр JSON в logstash удаляет данные для меня. Я изначально следовал учебнику изhttps://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elk-stack-on-ubuntu-14-04
Я сделал некоторые изменения, но это в основном то же самое. Мой фильтр Grok выглядит так:
uuid #uuid and fingerprint to avoid duplicates
{
target => "@uuid"
overwrite => true
}
fingerprint
{
key => "78787878"
concatenate_sources => true
}
grok #Get device name from the name of the log
{
match => { "source" => "%{GREEDYDATA}%{IPV4:DEVICENAME}%{GREEDYDATA}" }
}
grok #get all the other data from the log
{
match => { "message" => "%{NUMBER:unixTime}..." }
}
date #Set the unix times to proper times.
{
match => [ "unixTime","UNIX" ]
target => "TIMESTAMP"
}
grok #Split up the message if it can
{
match => { "MSG_FULL" => "%{WORD:MSG_START}%{SPACE}%{GREEDYDATA:MSG_END}" }
}
json
{
source => "MSG_END"
target => "JSON"
}
Так что проблема, вызывающая проблемы - это дно, я думаю. Все мои шалости должны быть правильными. Когда я запускаю эту конфигурацию, я вижу, что все в kibana отображается правильно, за исключением всех журналов, в которых был бы код JSON (не все журналы имеют JSON). Когда я запускаю его снова без фильтра JSON, он отображает все. Я пытался использовать оператор IF, чтобы он запускал фильтр JSON, только если он содержит код JSON, но это ничего не решало.
Однако, когда я добавил оператор IF для запуска только определенного формата JSON (поэтому, если MSG_START = x, y или z, тогда MSG_END будет иметь другой формат json. В этом случае, допустим, я только анализирую формат z), тогда в kibana я бы увидел все журналы, которые содержат x и y формат JSON (не проанализирован, хотя), но он не будет показывать z. Так что я уверен, что это связано с тем, как я использую фильтр JSON.
Кроме того, всякий раз, когда я хочу протестировать новые данные, я начинал очищать старые данные вasticsearch, чтобы, если он работает, я знал, что работает мой logstash, а не просто использование памяти изasticsearch. Я сделал это с помощьюXDELETE 'http://localhost:9200/logstash-*/'
, Но logstash не создаст новые индексы вasticsearch, если я не предоставлю filebeat с новыми журналами. Я не знаю, если это другая проблема или нет, просто подумал, что я должен упомянуть об этом.
Я надеюсь, что все имеет смысл.
РЕДАКТИРОВАТЬ: я просто проверяю файл logstash.stdout, выясняется, что он анализирует JSON, но он только показывает вещи с "_jsonparsefailure" в kibana, так что что-то не так с Elastisearch. Может быть. Я не знаю, просто мозговой штурм :)
ОБРАЗЦЫ ЖУРНАЛОВ:
1452470936.88 1448975468.00 1 7 mfd_status 000E91DCB5A2 load {"up": [38,1.66,0.40,0.13], "mem": [967364,584900,3596,116772], "cpu": [1299,812,1791,3157,480,144 ], "cpu_dvfs": [996,1589,792,871,396,1320], "cpu_op": [996,50]}
MSG_START - это загрузка, MSG_END - это все, что указано в приведенном выше примере, поэтому MSG_END - это правильный JSON, который я хочу проанализировать.
В приведенном ниже журнале нет JSON, но мой logstash попытается проанализировать все после «Inf:» и отправить «_jsonparsefailure».
1452470931.56 1448975463.00 1 6 rc.app 02: 11: 03.301 Inf: NOSApp: UpdateSplashScreen не реализован на этой платформе
Также это мой вывод в logstash, так как я чувствую, что это важно сейчас:
elasticsearch
{
hosts => ["localhost:9200"]
document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }