2013-08-08 1 views
17

Il possède un fichier journal qui stocke l'événement avec un horodatage et un message json. Par exemple:Décomposer le message Logstash json dans les champs

horodatage

{ "foo": 12, "bar": 13}

Je voudrais décomposer les clés (foo et bar) dans la partie JSON dans les champs du Logstash sortie.

Je suis conscient que je peux définir le champ de format dans le filtre de fichier Logstash à json_event mais dans ce cas, je dois inclure l'horodatage dans json. Il existe également un filtre json, mais qui ajoute un seul champ avec la structure de données json complète, au lieu d'utiliser les clés.

Des idées comment cela peut-il être fait?

+0

Vous devez donner un essai à definetely @ réponse « Nikhil-S. Vous pouvez également utiliser un filtre kv http://logstash.net/docs/1.4.1/filters/kv – Aldian

Répondre

1

Vous pouvez simplement utiliser Grok filters (filtres/motifs de style regex) et affecter la valeur correspondante dans une variable pour faciliter l'organisation, le filtrage et la recherche.

Un exemple:

((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,))) 

Quelque chose le long de ces lignes. Utilisez le GrokDebugger pour vous aider si vous restez bloqué sur la syntaxe, les motifs et les éléments qui, selon vous, devraient correspondre, mais ne le sont pas.

Espérons que cela aide un peu.

+2

J'ai considéré cette option, mais j'espérais qu'il était facile d'analyser une structure json et que les clés soient traduites automatiquement en noms de champs. –

10

Je l'ai fait avec la configuration suivante:

filter { 
    grok { 
    match => ["message", "\[%{WORD}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"] 
    } 
    date { 
    match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ] 
    } 
    json { 
    source => "msg" 
    } 
} 

D'ailleurs, cela est une configuration pour la nouvelle version 1.2.0.

Dans la version 1.1.13, vous devez inclure une cible sur le filtre JSON et la référence pour un message dans le grok filtre est @message.

16

Essayez la dernière version de logstash 1.2.1 et utilisez la valeur du codec pour analyser directement les événements json.

input { 
    file { 
     type => "tweetfile" 
     path => ["/home/nikhil/temp/feed/*.txt"] 
     codec => "json" 
    } 
} 
filter{ 
    json{ 
     source => "message" 
     target => "tweet" 
    } 
} 
output { 
    stdout { } 
    elasticsearch { embedded => true } 
} 
+0

Que se passe-t-il avec le champ d'horodatage lorsque cela est fait? – antak

-3

votre JSON est erroné {"foo": 12, "bar" 13}

devrait être:

{"foo": 12, "bar": 13}

+1

Vous devriez ajouter un commentaire à la question et ne pas poster de réponse, c'est pourquoi vous avez été downvoted. Vous auriez probablement obtenu des upvotes et pas de downvotes alors. –

Questions connexes