[Logs] Centraliser les logs avec GrayLog 6/8

Auteur du billet de blog : Nicolas Hilaire - Neotech Solutions

Nicolas Hilaire

Consultant .NET
  Publié le vendredi 27 mai 2016

Artisan logiciel particulièrement intéressé par les technologies .NET. Polyvalent et curieux, je suis néanmoins à l'écoute des autres technologies du marché. MVP (Microsoft Most Valuable Professional) de 2007 à 2014, je suis également auteur d'un ouvrage pour apprendre le C#, à destination des débutants et de plusieurs MOOCs sur le C#, Windows Phone ou ASP.NET MVC...

Nous allons voir dans ce billet comment nous pouvons centraliser nos logs avec Graylog.

Pour rappel, ce billet fait partie d’une série sur les logs que vous pouvez lire sur ces différents liens :

  1. Pourquoi avoir recours à des logs dans une application
  2. Utiliser Log4Net dans son application
  3. Ecrire un message de log utile
  4. Les appenders Log4Net
  5. Ecrire son propre appender Log4Net pour loguer dans MongoDB
  6. Centraliser les logs avec GrayLog
  7. Loguer dans GrayLog depuis une application Windows Phone
  8. Centralisation de logs avec ELK

 

Des logs dans des fichiers, ou en base de données, ou ailleurs, c’est très bien. Mais plus il y a d’applications, plus il y a de serveurs et plus cela devient compliqué à exploiter. Imaginez une application web qui possède une vingtaine de serveurs, et chaque serveur écrit son log dans un fichier texte sur sa machine. Vous vous imaginez fouiller dans 20 fichiers à la recherche d’une information lors d’un problème en production ?

Heureusement, il y a des outils qui nous permettent de centraliser les logs et qui offrent une interface pour les consulter. Nous allons découvrir aujourd’hui l’un d’entre eux, Graylog.

Graylog https://www.graylog.org/ est une plateforme open source de gestion de log. Elle permet la collecte depuis presque n’importe quelle source, l’indexation des données (structurées ou non) et leurs analyses. Son architecture est la suivante :

 

 

Je passe vite sur MongoDB car il est utilisé uniquement pour sauvegarder la configuration. Le point vraiment important, c’est l’utilisation d’Elasticsearch qui est un serveur permettant l’indexation et la recherche des données. Il permet de faire des recherches très performantes sur tout type de document. Il est également hautement scalable.

Donc, tous les logs sont envoyés aux serveurs graylog via des adapteurs (des inputs) et sont stockées dans Elasticsearch afin d’être consultés ensuite via l’interface web.

L’installation en soit n’est pas très compliquée, mais elle demande un petit peu de temps (et puis c’est sous linux ! ^^). Pour ma part, je ne me suis pas embêté, j’ai utilisé un container déjà prêt à l’emploi que j’ai hébergé dans Azure pour la démo. (Si vous faites de même, pensez à ouvrir les ports 9000 en TCP et 12201 en UDP)

Note : attention, il n’est pas recommandé d’utiliser une image publique de container directement en production. Si vous voulez vous en servir, analysez et refaites le docker-file pour vous approprier les éléments.

Le serveur web est exposé sur le port 9000, dans mon cas l’url est http://graylog-container.cloudapp.net:9000. (j'ai bien sûr supprimé la machine depuis, vous ne pourrez pas jouer avec mes logs ^^)

Je suis obligé de parler un tout petit peu de configuration, désolé, mais pour que Graylog puisse recevoir nos messages, il faut lui configurer un « input ». Donc, allez dans System => Inputs et ça tombe bien car nous avons ouvert le port 12201 en UDP, servons-nous en et ajoutons un input GELF UDP :

 

 

A noter que GELF veut dire Graylog Extended Log Format.

Mettez-y un titre et assurez-vous d’être sur le bon port :

 

 

Tout est maintenant configuré, il ne reste plus qu’à envoyer des logs.

Reprenons notre application de logs. Nous allons utiliser Log4Net pour envoyer des logs en UPD, et pour cela, devinez-quoi ? On utilise un appender !

Voici l’appender Gelf4Net :

 

 

Et voilà un exemple de configuration de l’appender :

Je positionne l’adresse distante au nom de domaine de ma machine virtuelle Azure et il y a une fonctionnalité intéressante qui permet d’ajouter des champs additionnels. J’en profite pour mettre le nom de mon application, ce qui me permettra de filtrer ensuite facilement.

N’oubliez pas de rajouter l’appender aux loggers:

Et c’est parti, loguons !

Voici mes messages qui apparaissent dans Graylog :

 

 

Donc, je peux chercher par date, filtrer par nom d’application (ce que j’ai fait ici dans ma recherche), faires des graphiques, des histogrammes et j’en passe :

 

Vous pouvez aussi faire des dashboards pour visualiser en temps réel les métriques qui vous intéressent.

Il y a même un système de notification en cas de dépassement de seuil (par exemple, envoi d’un mail si plus de 10 erreurs dans les 3 dernières minutes)…

Et j’ai pu le tester avec une très grosse volumétrie de logs, la recherche est tellement efficace qu’elle s’effectue en quelques millisecondes. Du coup, vous pouvez même vous payer le luxe de loguer des informations de DEBUG et pas seulement les ERROR, puis filtrer en fonction des besoins.

Graylog est un système de centralisation et de consultation de logs très intéressant, compatible sans difficultés et sans redéploiement avec vos applications utilisant Log4Net qui gagne à être connu. Plutôt simple à prendre en main, efficace et scalable. N’hésitez pas à y jeter un coup d’œil.

Commentaires