1

J'utilise Logstash pour lire et analyser les journaux d'un fichier et les envoyer à une API basée sur le repos. Mon expéditeur fonctionne bien, mais j'ai un comportement étrange.Logstash conserve toujours un message dans PipeLine

Version: 
logstash-2.3.2 

Problème:

Lorsque l'expéditeur Logstash la première entrée parse journal, il ne l'envoie pas, il le maintient dans le pipeline. Lorsqu'il analyse la deuxième entrée de journal, il envoie la première entrée de journal à l'API. Par conséquent, un message reste toujours dans le pipeline et il n'est pas envoyé vers mon API.

Chaque fois que j'arrête mon processus d'expéditeur de Logstash, il envoie également le dernier message restant. Donc, dans un sens, aucun message n'est perdu, mais l'expéditeur est toujours un message derrière.

Pourquoi est-il impossible à Logstash de vider son pipeline et d'envoyer un message à l'API dès sa réception.

+2

Il pourrait provenir d'un filtre multiligne/codec: le filtre/codec gardera le message afin de pouvoir le fusionner avec le prochain si nécessaire. – baudsp

Répondre

1

Vous devez coller votre configuration de logstash log et le format de journal afin d'obtenir la bonne réponse, mais de tout ce que vous avez décrit, vous semblez utiliser le plugin multiline. À partir de la version logstash 2.2, il existe donc un auto_flush_interval pour le plugin multline dans Codec. Fondamentalement, cet 'auto_flush_interval' peut être réglé sur un nombre de secondes et si le plugin d'entrée multline n'écoute aucune ligne de journal jusqu'au nombre de secondes spécifié, il va vider l'entrée en attente dans pipepline vers votre API ...

Pour exemple et plus d'informations s'il vous plaît passer par ceci:

input { 
    file { 
    path => "$LogstashFilePathValue" 
    type => "DemandwareError" 
    tags => "$EnvironmentName" 
    start_position => "beginning" 
    sincedb_path => "NUL" 
    codec => multiline { 
     pattern => "\A\[%{TIMESTAMP_ISO8601:demandware_timestamp} GMT\]" 
     negate => true 
     what => previous 
     auto_flush_interval => 10 
    } 
    } 
} 

l'exemple est à partir du lien: https://github.com/elastic/logstash/issues/1482 Pour plus d'informations sur la visite auto_flush_interval: https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html#plugins-codecs-multiline-auto_flush_interval