0

У меня есть несколько сообщений журнала в файле, который я обрабатываю с помощью плагинов фильтра logstash. Затем отфильтрованные журналы отправляются в elasticsearch.Падающий фильтр не работает logstash

В сообщении журнала есть одно поле под названием addID. Я хочу отбросить все сообщения журнала, которые имеют конкретный addID. Эти конкретные addIDS присутствуют в файле ID.yml.

Сценарий: Если addID сообщения журнала совпадает с любым из addID, присутствующих в файле ID.yml, это сообщение журнала должно быть удалено.

Может ли кто-нибудь помочь мне в достижении этого?

Ниже приведен файл конфигурации.

input { 


    file { 
    path => "/Users/jshaw/logs/access_logs.logs 
    ignore_older => 0 
    } 
} 

filter { 


    grok { 

     patterns_dir => ["/Users/jshaw/patterns"] 
     match => ["message", "%{TIMESTAMP:Timestamp}+{IP:ClientIP}+{URI:Uri}"] 

    } 


    kv{ 
     field_split => "&?" 
     include_keys => [ "addID" ] 
     allow_duplicate_values => "false" 

    } 

    if [addID] in "/Users/jshaw/addID.yml" { 
     drop{} 
    } 

} 

output { 

    elasticsearch{ 
     hosts => ["localhost:9200"] 

     } 
} 

ответ

0

Вы используете неправильный оператор in. Он используется для проверки того, находится ли значение в массиве, а не в файле, который, как правило, несколько сложнее в использовании.

Решение будет заключаться в использовании рубинового фильтра, чтобы каждый раз открывать файл.
Или поставить значение ADDID в файле конфигурации, например:

if [addID] == "addID" { 
    drop{} 
} 
+0

Спасибо за ответ. Итак, если я использую ruby-фильтр, то могу ли я удалять сообщения журнала, имеющие конкретный addID? – User24

+0

@ User24 Да. Cf [документация] (https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html) – baudsp

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