2017-06-29 2 views
2

je la config logstash suivante:Utiliser une variable rubis dans un état de filtre logstash

input { stdin { } } 

output { 
    elasticsearch { hosts => ["localhost:9200"] } 
    stdout { codec => rubydebug } 
} 

filter { 


    ruby { 
    code => " 
     @@exists_pattern = ['foo', 'bar'].any?{ |pattern| event.get('message').include?(pattern) } 
     event.add('keep_line', @@exists_pattern) 
    " 
    } 


    if not [keep_line] { drop { } } 


    grok { 
    match => { 
     "message" => '%{IP:serverip} \[%{HTTPDATE:my_timestamp}\]' 
    } 
    } 

    date { 
    match => [ "my_timestamp", "dd/MMM/YYYY:HH:mm:ss Z"] 
    target => "@timestamp" 
    } 
} 

Mais quand je tente d'exécuter logstash avec ce fichier de config j'obtenir cette erreur:

[ERROR][logstash.agent] Cannot create pipeline {:reason=>"Expected one of #, (at line 30, column 10 (byte 923) after filter {\n # grok... 

Comment puis-je faire pour utiliser la variable qui a été définie dans le bloc de code ruby ​​(event ['keep_line']) dans une instruction if?

Répondre

1

Vous ne pouvez pas utiliser la négation dans les conditions du filtre Logstash. Essayez de convertir la condition booléenne pour être positif.