2017-07-26 1 views
0

Je suis nouveau à Logstash. Actuellement, j'ai un fichier logstash.conf qui envoie les journaux d'erreurs à l'élément zabbix. J'ai appliqué un filtre de grok personnalisé pour rechercher le mot-clé ERROR | Error | error et sur la base de ce qui redirige la sortie vers l'élément zabbix. Toutefois, je souhaite que logstash envoie un compteur incrémental chaque fois que le résultat du filtre est évalué à true au lieu de simplement envoyer le journal correspondant. Comment puis-je y parvenir?Comment envoyer le nombre de journaux d'erreurs à zabbix en utilisant la sortie Logstash?

Voici l'extrait du fichier journal que j'utilise.

input { 
     file { 
      path => "/root/sample.log" 
      type => "string" 
     } 
    } 
    # The filter part of this file is commented out to indicate that it is 
    # optional. 
    filter { 
      mutate { 
        add_field => { "[@metadata][error]" => "error" } 
        add_field => { "[@metadata][counter]" => "1" } 
        add_field => { "myhost" => "logstash" } 

        } 
    if "grokked" not in [tags] { 

    grok { 
     patterns_dir => ["/root/logstash-5.5.0/pattern"] 
     match => { "message" => "%{ERROR:log_level}" } 
     add_tag => ["ERROR", "grokked"] 
     } 
    } 
    } 
    output { 
      stdout { codec => rubydebug } 

      if "ERROR" in [tags]{ 
        zabbix 
        { 
         zabbix_server_host => "192.168.56.102" 
         zabbix_host => "myhost" 
         zabbix_key => "[@metadata][error]" 
         #zabbix_value => "[@metadata][counter]" 
        } 

Répondre

0

Avec le ruby filter plugin:

ruby { 
    code => 'event.set("error_count", event.get("message").scan(/Error/i).length)' 
} 

De cette façon, vous aurez un champ appelé ERROR_COUNT avec le nombre de temps error (insensible à la casse) est apparu dans message.