Парсер 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"
}

Так что бит, вызывающий проблемы, - это дно, я думаю. Все мои вещи в горке должны быть правильными. Когда я запускаю эту конфигурацию, я вижу, что все в кибане отображается правильно, за исключением всех журналов, в которых будет код JSON (не во всех журналах есть JSON). Когда я запускаю его снова без фильтра JSON, он отображает все. Я пытался использовать оператор IF, чтобы он запускал фильтр JSON только в том случае, если он содержит код JSON, но это ничего не решило.

Однако, когда я добавил оператор IF для запуска только определенного формата JSON (так, если MSG_START = x, y или z, то MSG_END будет иметь другой формат json. В этом случае скажем, что я анализирую только формат z), то в кибане я увижу все журналы, содержащие формат x и y JSON (хотя и не проанализированный), но он не покажет z. Поэтому я уверен, что это должно быть как-то связано с тем, как я использую фильтр JSON.

Кроме того, всякий раз, когда я хочу протестировать новые данные, я начал очищать старые данные в elasticsearch, чтобы, если они работают, я знал, что работает мой logstash, а не просто работает память из elasticsearch. Я сделал это, используя XDELETE 'http://localhost:9200/logstash-*/'. Но logstash не будет создавать новые индексы в elasticsearch, если я не предоставлю filebeat с новыми журналами. Я не знаю, является ли это другой проблемой или нет, просто подумал, что должен упомянуть об этом.

Я надеюсь, что все имеет смысл.

РЕДАКТИРОВАТЬ: я просто проверяю файл logstash.stdout, оказывается, он анализирует json, но показывает только вещи с «_jsonparsefailure» в кибане, поэтому что-то должно быть не так с 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,1794,8051,31 ],"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 Информация: NOSApp: UpdateSplashScreen не реализован на этой платформе

Также это мой вывод в logstash, так как я чувствую, что сейчас это важно:

elasticsearch 
{ 
    hosts => ["localhost:9200"] 
    document_id => "%{fingerprint}"
}
stdout { codec => rubydebug }

person Swikrit Khanal    schedule 11.01.2016    source источник
comment
Можете ли вы предоставить несколько иллюстративных примеров строк журнала, которые проходят через Logstash?   -  person Val    schedule 11.01.2016
comment
Ага. Я только что отредактировал вопрос, чтобы получить пару.   -  person Swikrit Khanal    schedule 11.01.2016


Ответы (2)


Я столкнулся с аналогичной проблемой и обнаружил, что некоторые из моих журналов используют отметку времени/даты UTC, а другие — нет. Исправлен код для использования исключительно UTC и решил проблему для меня.

person Tom    schedule 09.07.2018

Я задал этот вопрос: Logstash вывод из синтаксического анализатора json не будет отправлен в elasticsearch позже, и у него есть более актуальная информация о нем, возможно, лучший ответ, если у кого-то когда-либо возникала проблема, похожая на меня, вы можете проверить эту ссылку.

person Swikrit Khanal    schedule 14.01.2016