2017-10-10 4 views
0

Ich benutze Logstash Lesen von Daten von MySQL zu Kafka. für den Speicherplatz zu sparen, ich schreibe Ausgabe Config wie folgt aus:Wie Logstash nil Wert richtig mit Plain Formater behandeln

kafka { 
    codec => plain { 
     format => "%{key1},%{key2},%{key3}" 
    } 
} 

wie ich erwarte, dass durch eine solche Eingabedaten geben:

{ 
    key1: value1, 
    key2: nil, 
    key3: value3 
} 

Die Ausgabe sollte wie folgt aus:

value1,,value3 

aber die tatsächliche Ausgabe ist dies:

value1,%{key2},value3 

Wie man Ausgangskonfiguration setzt, um die Null mit "" zu konvertieren, weiß jeder?

Bogen

Antwort

1

In Ihrem Filter hinzufügen:

if [key2] { } else { 
    mutate { 
     remove_field => ["key2"] 
    } 
    mutate { 
     add_field => ["key2", ""] 
    } 
} 

Wenn das Feld key2 oder null fehlt, wird es mit einem leeren String als Wert ersetzt werden.

+0

hi, danke, es funktioniert. da ist eine Kleinigkeit, die mich verwirrt. Mit muate ist die Ausgabe von rubydebu wie folgt: {"key1" => "value1", "key2" => [[0], ""], "key3" => "value3"}. Ich erwarte dies: {"key1" => "value1", "key2" => "", "key3" => "value3"} – Howardyan

+0

Klingt wie key2 auf etwas gesetzt wurde, und add_field verwandelte es in ein Array. –

+0

Was Alain sagte, ist wahr. 'if [key2]' ist false, wenn [key2] im Ereignis nicht vorhanden ist oder [key2] im Ereignis existiert, aber null ist (siehe https://www.elastic.co/guide/en/logstash/ 5.5/ereignisabhängige-configuration.html # conditionals). – baudsp

Verwandte Themen