web-dev-qa-db-fra.com

Décomposer le message json Logstash en champs

Il a un fichier journal qui stocke l'événement avec un horodatage et un message json. Par exemple:

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

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

Je sais que je peux définir le champ de format dans le filtre de fichier Logstash sur 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 sur la façon dont cela peut être fait?

17
Maurits Rijk

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 }
}
16
Nikhil S

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"
  }
}

Au fait, c'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 le filtre est @ message.

10
mimes70

Vous pouvez simplement utiliser plain filtres Grok (filtres/modèles de style regex) et affecter la valeur correspondante dans une variable pour une organisation, un filtrage et une recherche faciles.

Un exemple:

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

Quelque chose dans ce sens.

Utilisez le GrokDebugger pour vous aider si vous êtes coincé sur la syntaxe, les modèles et les choses qui, selon vous, devraient correspondre mais ne le sont pas.

J'espère que ça aidera un peu.

1
Adam