Tu peux regarder du côté du plugin kv qui est inclu dans logstash qui permet de découper automatiquement les champs de type key/value.
N'oublie pas de refresh les index dans kibana pour les récupérer et pouvoir les utiliser dans tes filtres.
Après, pour des logs qui proviennent de sources différentes et sans nomenclature, y a pas de solution miracle malheureusement...
Le lundi 9 mai 2016, Lamarre, Jonathan Jonathan.Lamarre@coreye.fr a écrit :
Bonjour et merci pour vos réponses.
Le problème du « grok » c’est que demain si dans mon « message » j’ai un nouvel « @blabla » qui s’ajoute, je vais devoir le retravailler or le but de la manip c’est que tout se fasse automatiquement car clairement je ne suis pas maître du message émis initialement.
Je pensais plus aux « filters » mais je n’ai pas eu de succès jusqu’à présent…
Merci quand même,
Jonathan
*De :* FRsAG [mailto:frsag-bounces@frsag.org javascript:_e(%7B%7D,'cvml','frsag-bounces@frsag.org');] *De la part de* Jocelyn Lagarenne *Envoyé :* jeudi 5 mai 2016 16:49 *À :* Guillaume Hilt <frsag@shadowprojects.org javascript:_e(%7B%7D,'cvml','frsag@shadowprojects.org');> *Cc :* French SysAdmin Group <frsag@frsag.org javascript:_e(%7B%7D,'cvml','frsag@frsag.org');> *Objet :* Re: [FRsAG] [Problem] Logstash/Kibana
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 javascript:_e(%7B%7D,'cvml','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 javascript:_e(%7B%7D,'cvml','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 FRsAG
Liste de diffusion du FRsAG http://www.frsag.org/