2015-07-10 2 views
0

Допустим, у вас есть 2 очень разные типы журналов, таких как Fortinet и NetASQ бревен и вы хотите:Logstash не может обрабатывать несколько разнородных входов

Grok Fortinet с использованием регулярных выражений, анг Grok NETASQ используя другой регулярное выражение.

Я знаю, что с «типом» во входном файле и «условием» в фильтре мы можем решить эту проблему.

Так что я использовал этот confing файл, чтобы сделать это:

input { 
    file { 
     type => "FORTINET" 
     path => "/fortinet/*.log" 
sincedb_path=>"/logstash-autre_version/var/.sincedb" 
start_position => 'beginning' 
    } 
    file { 
     type => "NETASQ" 
     path => "/home/netasq/*.log" 
    } 
} 
filter { 
if [type] == "FORTINET" { 

     grok { 
    patterns_dir => "/logstash-autre_version/patterns" 

    match => [ 

    "message" , "%{FORTINET}" 



    ] 
    tag_on_failure => [ "failure_grok_exemple" ] 
    break_on_match => false 


    } 


} 

if [type] == "NETASQ" { 
     # ....... 
} 
} 


output { 

elasticsearch { 
cluster => "logstash" 
} 


} 

И я получаю эту ошибку:

Got error to send bulk of actions: no method 'type' for arguments(org.jruby.RubyArray) on Java::OrgElasticsearchActionIndex::IndexRequest {:level=>:error} 

Но если не использовать «типа» и я обращал внимание только Fortinet logs это wroks.

Что мне делать?

+0

Вашей конфигурация выглядит прекрасно. Вы уверены, что не упускаете какие-либо штуки? Нет дополнительных файлов в вашем /etc/logstash/conf.d? –

+0

вот в чем проблема, моя конфигурация в порядке, и я не знаю, что случилось! – Localhost

+0

Я подозреваю, что у Logstash есть дополнительная конфигурация, кроме того, что вы показали выше. –

ответ

0

Я не уверен в этом, но, возможно, это помогает:

У меня такая же ошибка, и я думаю, что это вызвано использованием их, если заявления:

if [type] == "FORTINET" 

ваш type поле сравнивается с "FORTINET", но это, возможно, невозможно, потому что "FORTINET" является строкой, а type - нет. Несколько раз, задавая тип ввода, если есть уже тип, тип не заменяется, но новый тип добавляется в список со старым типом. Вы должны взглянуть на ваши данные в kibana (или где) и попытаться найти что-то вроде этого:

\"type\":[\"FORTINET\",\"some-other-type\"] 

может быть также без всех тех \".
Если вы найдете что-то вроде этого, попробуйте не указывать тип вашего ввода явно и сравните type в вашем операторе if с some-other-type, который вы нашли.

Надеется, что это работает (я работаю с более сложными входами/экспедиторами и для меня это не так, но это стоит попробовать)

Смежные вопросы