Décomposer le message Logstash json en champs
il a un logfile qui stocke l'événement avec un horodatage et un message json. Par exemple:
timestamp {"foo": 12," bar": 13}
je voudrais décomposer les touches (foo et bar) dans la partie json en champs dans la sortie Logstash.
je suis conscient que je peux définir le champ format dans le filtre de fichier Logstash à json_event mais dans ce cas je dois inclure le timestamp dans json. Il y a aussi un filtre json, mais qui ajoute un simple champ avec la structure complète de données json, au lieu d'utiliser les clés.
avez-vous des idées sur la façon de procéder?
4 réponses
essayez le dernier logstash 1.2.1 et utilisez la valeur codec pour analyser les événements json directement.
input {
file {
type => "tweetfile"
path => ["/home/nikhil/temp/feed/*.txt"]
codec => "json"
}
}
filter{
json{
source => "message"
target => "tweet"
}
}
output {
stdout { }
elasticsearch { embedded => true }
}
j'ai fait cela avec la config suivante:
filter {
grok {
match => ["message", "\[%{WORD}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"]
}
date {
match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ]
}
json {
source => "msg"
}
}
soit dit en passant, ceci est une configuration pour la nouvelle version 1.2.0.
Dans la version 1.1.13 vous devez inclure un cible sur le filtre json et la référence pour message dans le grok filtre @message.
Vous pouvez simplement utiliser brut Analyser des filtres (regex style filters/patterns) et assignez 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 dans ce sens.
GrokDebugger pour aider si vous êtes coincé sur la syntaxe, les modèles et les choses que vous pensez devrait être apparié mais ne sont pas.
j'Espère que cela vous aide un peu.
votre JSON est faux {"foo": 12, "bar" 13}
devrait être:
{"foo": 12, "bar": 13}