2015-07-13 1 views
0

Nous utilisons actuellement logstash avec elasticsearch pour consigner certains des événements d'application. Certains événements contiennent des champs nommés dynamiquement.
Nous souhaitons appliquer un filtre qui les supprimera ou les fusionnera avant d'entrer dans elasticsearch.
par exemple:Supprimer les champs par leur nom de modèle

{ 
    "Root": { 
    "EventType": "Info", 
    "Timestamp": 20150713153757.758 
    }, 
    "Event": { 
    "Message": "itemsViews Created in 1 mSec", 
    "Cache_11542": true, 
    "Cache_10242": false, 
    "Cache_55240": 124 
    } 
} 

Dans ce cas, nous voudrions supprimer tous les champs commençant par « Cache_ » sous l'objet de l'événement.

de sorte que la sortie ElasticSearch sera

{ 
    "Root": { 
    "EventType": "Info", 
    "Timestamp": 20150713153757.758 
    }, 
    "Event": { 
    "Message": "itemsViews Created in 1 mSec" 
    } 
} 

Est-il possible de définir une charge dans le fichier de configuration de logstash pour y parvenir?

Merci beaucoup à l'avance.

+2

Bien que cette _question_ ne soit pas un doublon de http://stackoverflow.com/questions/27395554/remove-field-from-event-by-pattern/27396056#27396056, l'une des réponses arrive à répondre à cette question question aussi. –

Répondre

-1

On dirait que le Ruby filter solution que @ magnus-bäck souligne pourrait être votre solution. J'avais initialement suggéré le mutate filter en utilisant le tableau "remove_field" en conjonction avec le filtre gsub. Gsub à regex correspond à vos champs Cache * qui peuvent ensuite être renommés en une variable à utiliser dans mute. Cependant, comme vous avez un nombre de champs Cache, j'aime mieux le script ruby. :)

+0

Oui, mais ce paramètre ne prend pas en charge les caractères génériques dont l'OP a besoin car les champs sont nommés dynamiquement. –

+0

La documentation de mutation indique clairement (https://www.elastic.co/guide/fr/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-remove_field) qu'elle prend en charge les champs dynamiques. Il ne supporte pas, cependant, regex là. Vous vous demandez si vous pouvez utiliser gsub pour appliquer le motif regex au champ que vous voulez supprimer. Donc "Cache_12345 -> delete_this_field". Alors muter l'enlever? Honnêtement, je n'ai pas essayé mais semble faisable. – hubbardr

+0

Ce que l'on entend par champ dynamique dans ce contexte est simplement que le filtre supporte l'interpolation '% {varname}' dans chaque spécification de nom de champ, comme dans l'exemple de 'foo _% {quelque champ}'. Les caractères génériques ou les expressions rationnelles ne sont pas pris en charge. –