j'ai pas mal travaillé avec logstash/elastic pendant un moment. De memoire le champs "message" que logstash rajoute est le "log brut" qu'il reçoit. si tu n'as pas les champs deja découpé en field c'est que tu n'as les bon filtre (parser). il faut soit: - trouve un filtre deja existant si ton log est standard, par exemple pour les apache etc - sinon il faut que tu parses toi meme via logstash les champs. ce n'est pas tres dur mais la syntaxe est un peu crade. si dessous un exemple que j'ai fait pour parser des logs de mon pfsense:
dans la conf filter de logstash:
if [prog] =~ /^filterlog$/ { mutate { remove_field => [ "msg", "datetime" ] } grok { patterns_dir => "/etc/logstash/patterns" match => [ "message", "%{PFSENSE_LOG_DATA}%{PFSENSE_IP_SPECIFIC_DATA}%{PFSENSE_IP_DATA}%{PFSENSE_PROTOCOL_DATA}"]
--- cette partie vérifie que j'ai un champ "prog" qui contient "filterlog" et avec le filtre (pattern matching) "grok" je decoupe le champ "message" en respectant mes patterns qui sont les suivantes:
[...] PFSENSE_LOG_DATA (%{INT:rule}),(%{INT:sub_rule}),,(%{INT:tracker}),(%{WORD:iface}),(%{WORD:reason}),(%{WORD:action}),(%{WORD:direction}),(%{INT:ip_ver}), PFSENSE_IP_SPECIFIC_DATA (%{PFSENSE_IPv4_SPECIFIC_DATA}|%{PFSENSE_IPv6_SPECIFIC_DATA}) PFSENSE_IPv4_SPECIFIC_DATA (%{BASE16NUM:tos}),,(%{INT:ttl}),(%{INT:id}),(%{INT:offset}),(%{WORD:flags}),(%{INT:proto_id}),(%{WORD:proto}), [...]
ce n'est qu'un extrait mais ça devrait deja t'aider à mieux comprendre. cherche sur le net il y a beaucoup de tutorial, par exemple https://blog.jocelynlagarenne.fr/jsn/index.php/integration/102-elasticsearch... ;)
2016-05-04 14:48 GMT+02:00 Guillaume Hilt frsag@shadowprojects.org:
Il veut décoder le json en tableau et que chaque index du tableau devienne un filtre (donc un field avec sa checkbox).
Guillaume Hilt
Le 04/05/2016 à 12:30, Florent Rivoire a écrit :
2016-05-04 12:00 GMT+02:00 Lamarre, Jonathan Jonathan.Lamarre@coreye.fr:
Est-il possible de découper le message à chaque « @ »pour faire en sorte que chacun d’eux deviennent des fields à part entière et ainsi qu’ils s’ajoutent à la liste des fields par défaut dans l’interface Kibana ?
Si oui, comment ? Parce que j’ai testé pas mal de choses déjà qui se sont révélées infructueuses L
Je ne suis pas sur d'avoir compris ce que tu veux faire. Tu devrais détailler clairement le format de tes données, essaie de donner un exemple de données de ton application et un exemple de json qui est indexé dans ElasticSearch (après le traitement par logstash donc).
Mais je pense que tu devrais regarder au niveau de logstash : il faut surement rajouter des options dans la partie "filter" de la configuration. C'est à dire changer le traitement qui est fait avant l'indexation dans E.S, car Kibana ne pourra pas faire ce "split" par @ lui-même.
NB: j'ai l'impression que tu as 2 timestamp (celui à la racine mis par logstash, et celui dans ton field message que tu veux splitté), il faudrait surement que tu arrive au final à en avoir qu'un seul (via le filter "date" je pense), et qui soit à la racine, car c'est le schéma standard de la stack ELK.
-- Florent
Liste de diffusion du FRsAGhttp://www.frsag.org/
Liste de diffusion du FRsAG http://www.frsag.org/