2016-04-29 17 views
0

Ich benutze Logstash und Holzfäller, um meine Logs zu verwalten. Logstash erhält Eingaben von zwei verschiedenen Dateitypen, von denen einer mehrzeilige Stack-Traces protokolliert. Ich weiß, dass ich mehrzeiligen Codec verwenden sollte, aber ich weiß nicht, wie man es auf nur eine Art von Protokollen anwendet. Das funktioniert nicht:logstash bedingte Anweisung im Eingabeblock

input { 
    lumberjack { 
    #some configs 
    port => 9000 

    if [type] == "TYPE1" { # IF STATEMENT CAUSES ERROR 
     codec => multiline {} 
    } 
    } 
} 

Gibt es eine Möglichkeit, Eingabe-Codecs mit Conditionals arbeiten zu lassen?

Ich weiß, dass ich mehrzeiligen Filter anstelle von Codec verwenden kann, aber mehrzeilige Filter nicht zulassen multiple Arbeiter und ich brauche sie.

Antwort

1

Ich vermute, die Antwort ist, separate Eingänge für verschiedene Datentypen einzurichten. Auf diese Weise müssen Sie keine Logik in den mehrzeiligen Codec einfügen. Zum Beispiel: alle Java-Protokolle senden, die Muster X zu portieren N folgen Senden Sie alle Ruby-Protokolle, die Muster Y-Port N + 1 folgen

Ich bin nicht sicher, wie diese Arbeit in einem Stapel zu machen, die Redis enthält oder ein anderer Caching-Server, da alle Daten idealerweise ohne Verarbeitung in den Cache gelangen sollten, aber beim Abrufen eine Verarbeitungslogik benötigen, da sie verschiedene Datentypen enthalten wird.

Ich denke, Sie müssen die Multiline-Protokolle auf der Empfängerschicht beitreten, damit Caching-Server vollständige Nachrichten erhalten und dann die schwereren Filter ausführen, bevor Sie die Daten an Elastic Search senden.

Etwas wie folgt aus:

LS1 (multiple inputs and codecs like multiline) 
Redis (caching) 
LS2 (filters) 
ES (storage) 
KIB (viewing)