2017-10-10 1 views
0

J'utilise les données de lecture logstash de mysql à kafka. pour économiser l'espace disque, j'écris config de sortie comme ceci:Comment logstash gérer correctement la valeur nulle avec formater plaine

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

comme je l'espère, en leur donnant des données d'entrée:

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

la sortie devrait comme ceci:

value1,,value3 

mais la sortie acutal est la suivante:

value1,%{key2},value3 

comment configurer la configuration de sortie pour convertir le zéro avec "", quelqu'un sait?

arc

Répondre

1

Dans votre filtre, ajouter:

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

Si le champ key2 est manquant ou nul, il sera remplacé par une chaîne vide comme valeur.

+0

salut, merci, ça marche. il y a une petite chose qui me dérange. en utilisant mutate, la sortie de rubydebu est comme ceci: {"key1" => "value1", "key2" => [[0], ""], "key3" => "value3"}. J'attends comme ceci: {"key1" => "value1", "key2" => "", "key3" => "value3"} – Howardyan

+0

Des sons comme key2 ont été mis à quelque chose, et l'add_field l'a transformé en tableau. –

+0

Ce qu'Alain a dit est vrai. 'if [key2]' est faux si [key2] n'existe pas dans l'événement, ou [key2] existe dans l'événement, mais est nul (cf https://www.elastic.co/guide/fr/logstash/ 5.5/event-dependent-configuration.html # conditionnels). – baudsp