Centralisez vos logs pour en exploiter le maximum

Habituellement, les applicatifs écrivent les logs dans des fichiers textes : auth.log, boot.log, apache2.log, graylog2.log, …  Pour pouvoir consulter ces logs et vérifier par exemple qu’une mise à jour n’a pas eu d’effet indésirable, il faut parfois se battre avec des outils comme cat, grep, awk, sort, et bien d’autres.
Manuel d'aide de la commande gr
Une fois que vous avez le combo ultime « cat | grep | awk » qui vous retourne les informations pertinente, … vous devrez répéter l’opération sur chaque serveur hébergeant votre application. Pas très efficace comme méthode et cela peut s’avérer dangereux si la puissance nécessaire à l’exécution de votre combo ultime fait monter le load average du serveur !

Un datacenter Google avec des centaines de serveurs

Les fichiers de logs peuvent très vite devenir lourd et atteindre plusieurs Gigas. Vous devez pensez à mettre en place une rotation des logs et une épuration lorsque le volume de donnée devient trop important.

Une solution ?

Aussi, plutôt que de devoir allez chercher les logs sur chaque serveur, vous devez les centralisez ! En mettant en place une solution de centralisation des logs, vous pourrez depuis un endroit unique effectuer des recherches, analysez vos logs et mettre en place des alertes en cas d’erreurs importantes.  Chacun des intervenants, exploitant, développeur, chef de projets, … pourra ainsi avoir accès à des données importantes mais trop souvent inutilisées. Voici quelques exemples d’utilisations :

  • Détection d’intrusions ou de compromissions de vos serveurs :  vous pourrez surveiller efficacement toute tentative d’intrusions sur votre plateforme. Si le piratage est avéré, vous aurez accès à tous les logs de la machine infectée même si le pirate supprime les fichiers de logs pour cacher ses méfaits.
  • Debug des applications : dès la première erreur sur une application critique, les développeurs pourront analyser les logs afin d’étudier ce qui n’a pas fonctionné et proposer un patch très rapidement sans attendre que le client se manifeste.
  • Archivage des journaux web : heure de connexion, ip, pages demandées, … les logs apache, nginx et autres renseignent sur de nombreuses informations qui peuvent être utilisées par les exploitants pour ajouter des serveurs si besoin, par le marketing pour analyser le trafic, …
  • Gestion des alertes : configurer des règles pour être prévenu par exemple dès qu’un applicatif génère une erreur critique ou dès qu’un site génère plus de 10 erreurs 500 sur les 5 dernières minutes.
  • Historisation des actions : sur des applicatifs sensibles, il peut être intéressant d’historiser les actions utilisateurs et les modifications de configuration.
  • Affichage de tableau de bord : les logs au format brut ne sont pas toujours facile à analyser, mais en générant des graphiques, il devient plus facile de suivre l’évolution du trafic d’un site web sur plusieurs semaines.

Les outils pour centraliser les logs ne manquent pas :  certains sont payants, d’autres ne proposent pas toutes les fonctionnalités ou bien sont difficile à prendre en main. Voici quelques exemples : Splunk, Logstash + Kibana, Flume, … et bien sur Graylog2.
graylog2_ecran_accueil_quick_value
 
Simple à installer, Graylog2 permet de recevoir des logs au format Syslog, Plaintext, GELF (format propre à Graylog2 qui permet notamment l’envoi de logs multi-lignes), … Il est également possible de mettre en amont un outil comme Logstash si vous souhaitez retravailler les logs avant de les sauvegarder.
Pour en savoir plus sur la mise en place de Graylog2, je vous invite à lire le tutoriel décrivant son installation.
 
Source de l’image du datacenter

Créer et configurer un tableau de bord

Graylog2 permet de créer des tableaux de bord : ceux-ci accueillent des widgets qui peuvent être des graphiques, des compteurs, des données, … Les widget sont mis à jour automatiquement selon un délai que vous aurez préalablement configuré. Cet article explique comment créer un tableau de bord, le configurer et y ajouter des widgets.
Exemple d'un tableau de bord
 

Créer un tableau de bord

Pour créer un tableau de bord, vous devez vous rendre dans le menu Dashboards puis cliquer sur Create Dashboard : renseignez un un titre, une description puis validez.
Formulaire de création d'un tableau de bord Graylog2
 

Ajouter un widget de type compteur :

Pour ajouter un widget de type compteur, vous devez effectuer une recherche puis cliquez sur la petite icône dédiée. Vous devez ensuite choisir le tableau de bord de destination puis renseigner une description.
Ajout d'un widget de type compteur
Vous obtenez alors le widget suivant :
Widget de type compteur
 
 

Ajouter un widget de type données :

Lorsque vous effectuez une recherche dans Graylog2, vous pouvez, pour chaque champ, afficher une liste des principales valeurs (quick-values). Ces données peuvent être ajoutée au tableau de bord en cliquant sur l’icône dédiée.
Ajout d'un widget de type données
 

Ajouter un widget graphique :

Pour afficher un widget graphique, vous devez choisir le champ qui vous intéresse puis cliquez sur Generate chart. Configurer le graphique suivant vos préférences : en ligne, en barre, valeur maximum, minimum ou moyenne, … puis cliquez sur l’icône de configuration pour choisir Add to dashboard.
Ajout d'un widget graphique
 

Démonstration en vidéo :

 
 

Configurer votre tableau de bord :

Configurer un dashboard
Pour configurer un tableau de bord, vous devez cliquer sur le cadenas  (1) afin d’enlever le verrou qui protège le tableau de bord. Chaque widget peut ensuite être déplacé par glisser-déposer avec la souris. Vous pouvez également modifier sa description (2) ainsi que le délai avant rafraîchissement (3). Pour supprimer un widget, vous devrez utiliser la croix (4).
Attention : à noter qu’à l’heure actuelle, la version 0.20.0-RC-1.1 utilisée pour écrire cet article ne propose qu’un nombre de widgets limité. De nouveau widget devrait apparaitre dans les prochaines versions afin de rendre encore plus performant et plus agréable les tableaux de bord.

Une version RC.1.1 de Graylog2 disponible avant l'arrivée prochaine de la RC.2

La société Torch qui gère le projet Graylog2 a eu beaucoup de retours depuis la mise à disposition de la version 0.20.0 en RC.1 la semaine dernière. De nombreux utilisateurs ont remontés des bugs et des demandes d’évolutions. Aussi, les développeurs ont décidé de sortir une version patchée de la RC.1 avant la future RC.2 qui arrivera avec quelques nouveautés prochainement.
Cette nouvelle version ajoute également un nouveau widget pour le tableau de bord :
Nouveau widget : "quick values"
Pour une liste détaillée des corrections de bugs, je vous invite à lire le blog de la société Torch (en anglais). Vous retrouverez les liens pour télécharger cette version en cliquant ici.

Rechercher des messages sur une période

Graylog2 permet d’effectuer des recherches sur une période précise de plusieurs façons : relative, absolute ou keywords. Pour choisir la méthode qui vous intéresse, il suffit de cliquer sur le bouton bleu.

Relative

C’est la méthode de recherche par défaut. Vous pouvez choisir une période de temps dans la liste proposée :
Recherche sur une période de temps relative

Absolute

Cette méthode permet d’effectuer une recherche de date à date. Un calendrier s’affiche sur chaque champ pour faciliter la saisie. Un clic sur la baguette magique renseigne automatiquement le champ avec l’heure actuelle.
Un recherche dans Graylog2 en temps absolue
Cette méthode peut aussi être utilisée en sélectionnant une période depuis un graphique comme le montre cette vidéo :

Keywords

Il s’agit ici d’une méthode qui permet d’effectuer des recherches en langage naturel (en anglais uniquement). Voici quelques exemples :

  • from 20 minutes ago
  • from 20 minutes ago to now
  • from 20 minutes ago to ten minutes ago
  • from last month
  • from last month to 1 week ago
  • from 2014-06-08
  • from 2014-06-01 12:00:00 to 2014-06-08 12:00:00

Comme vous pouvez le voir ci-dessous, la date et l’heure sont automatiquement affiché en dessous du champ de saisie si les mots clés sont valides.
Une recherche de messages sur une période précise

Comparer des graphiques dans Graylog2

Graylog2 vous permet de mettre en corrélation les données provenant de plusieurs recherches.
L’opération s’effectue simplement en épinglant les graphiques qui vous intéressent. Une fois un graphique épinglé, il apparaît sur les pages de recherche jusqu’à ce que vous l’enleviez. Pour comparer les données, il vous suffit ensuite de glisser et déposer un premier graphique sur un second. Vous pouvez comparer autant de graphiques que vous le nécessaire.
Comparaison de graphiques avec Graylog2
Voici une démonstration de cet outil en vidéo :


A noter que cette vidéo a été réalisée avec la version 0.20.0-RC.1 de Graylog2.

Graylog2 v0.20.0-RC1 est disponible au téléchargement

Un mois après la 8ème preview de la branche 0.20.0, les développeurs de Graylog2 annoncent la sortie de la première Release Candidate. C’est plus de 17 500 lignes de code qui ont été ajoutées en 274 commits ajoutant ainsi de nouvelles fonctionnalités mais corrigeant aussi des bugs. Cette RC.1 contient l’ensemble des fonctions qui seront sur la version finale 0.20.0. Quelques ajustements auront lieu si besoin en fonction des retours des utilisateurs.

Voici la liste des changements :

  • Gestion des streams :  la gestion des streams est désormais complète. Vous pouvez créer, éditer, clôner et supprimer les streams.
  • Gestion des alertes :  les alertes qui étaient disponible sur la branche 0.1x  font leur retour avec quelques nouveautés. Vous pouvez ainsi configurer une alerte mail lorsqu’un stream a eu plus de x nouveaux messages sur les x dernières minutes. La condition peut aussi être effectuée sur un champ précis.
  • Gestion des utilisateurs : vous pouvez désormais créer des utilisateurs en spécifiant leurs droits sur les streams et les dashboard.
  • Dashboard : jusque là, le dashboard permettait juste d’ajouter des widgets texte. Il est désormais possible de créer des widgets graphique permettant ainsi d’avoir une vue d’ensemble de vos données.
  • Liste des sources : une nouvelle page « Sources » est disponible et vous permet de lister l’ensemble des serveurs « sources » de vos messages avec le nombre de messages traités pour chaque.
  • Tri des résultats : pour chaque recherche ou stream, il est désormais possible de trier par ordre croissant ou décroissant chaque colonne
  • Sauvegarde des recherches : plutôt que de devoir réécrire chaque jour la même recherche, vous pouvez désormais la sauvegarder afin de l’exécuter plus rapidement quand vous en aurez besoin
  • Merge de graphique : c’est une fonction qui va permettre de mettre plusieurs données sur un même graphique, j’y reviendrais plus en détail dans un prochain tutoriel

Vous retrouverez les liens pour télécharger la RC-1 en cliquant ici

Graylog2 : pour quels usages ?

Graylog2 permet de traiter des centaines de milliers de message chaque seconde centralisant ainsi tous vos logs en les intégrant dans une base de donnée Elasticsearch. La partie web facilite la recherche et l’analyse de ces données.
Voyons quelques exemples d’usages :

Centralisation des logs

Graylog2 autorise plusieurs type d’inputs : syslog, GELF, raw, … et bien plus encore en mettant en amont un outil comme logstash. Plutôt que de devoir vous connecter à chacun de vos serveurs pour consulter les logs d’erreurs, vous pouvez configurer ceux-ci pour envoyer l’ensemble des messages dans Graylog2 : vous n’avez ainsi plus qu’une seule IHM pour consulter l’ensemble des données de votre plateforme.

Liste des inputs dans Graylog2
Liste des inputs dans Graylog2

Debug d’application

Un utilisateur vous informe qu’il n’arrive pas à afficher une page de votre site web ? En utilisant son identifiant, vous pourrez facilement retrouver les messages d’erreurs qu’il a généré trouvant ainsi rapidement la requête qui pose problème.

Monitoring des exceptions/erreurs

Avec Graylog2, vous pouvez créer des streams : il s’agit d’un flux qui affichera l’ensemble des messages respectant la ou les conditions renseignées à sa création. Vous pouvez par exemple créer un stream qui affichera l’ensemble des logs apache ayant retourné une erreur HTTP.
Affichage d'un stream
Le format GELF (Graylog Extended Lenght Format) vous permet d’envoyer vos stack traces (Java ou autres) au serveur Graylog2. Vous pouvez par exemple vérifier après une mise en production qu’il n’y a pas eu d’augmentation du nombre d’erreurs.

Analyse des usages

Vos clients utilisent l’API que vous mettez à leur disposition, mais vous souhaitez vérifier qu’ils ont tous passé sur la nouvelle version ? En envoyant à Graylog2 un log contenant la référence utilisateur, la version, … vous pourrez facilement lister les clients qui utilisent toujours la version dépréciée de votre API. Une autre recherche vous permettra de lister les plus gros consommateurs ou les parties de votre API les plus utilisées.
Comme vous le voyez, les usages de Graylog2 sont multiples et permettent donc de répondre à plusieurs problématiques.

Effectuer une recherche dans Graylog2

Voici quelques informations pratiques qui vous permettront d’utiliser le moteur de recherche de Graylog2 au maximum. La syntaxe utilisée pour la recherche est très proche de celle utilisée par Lucene.
Effectuer une recherche dans Graylog2
Pour rechercher les messages incluant le terme « ssh » :

ssh

Pour rechercher les messages incluant le terme « ssh » OU « login » :

ssh login

Pour rechercher les messages incluant le terme extact « ssh login » :

"ssh login"

Pour rechercher les messages incluant le terme « ssh » dans le champ type :

type:ssh

Pour rechercher les messages incluant le terme « ssh » OU « login » dans le champ type :

type:(ssh login)

Pour rechercher les messages incluant le terme exact « ssh login » dans le champ type :

type:"ssh login"

Pour rechercher les messages qui n’ont pas de champ type :

_missing_:type

Pour rechercher tous les messages qui ont le champ type :

_exists_:type

Il est possible de combiner les critères avec les opérateurs booléen OR et AND :

"ssh login" AND source:example.org

Il est possible de grouper les critères à l’aide des parenthèse :

"ssh login" AND (source:example.org OR source:graylog.fr)

Il est possible d’utiliser les métacaractères ? pour remplacer un seul caractère et * pour 0 ou plusieurs caractères

source:*.org
source:exam?le.org
source:exam?le.*

Il est possible d’effectuer des recherches de façon approximative sur l’orthographe des termes recherchés. La recherche utilise l’algorithme de distance de Damerau-Levenshtein avec une distance de 2 par défaut. Vous pouvez aussi configurer la distance pour des recherches plus complexes :

ssh logni~
source:exmaple.org~
source:exmaple.org~3

Il est possible d’effectuer des recherches sur des valeurs numériques. La valeur près de "[" est incluse, la valeur près de "}" est exclue :

http_response_code:[500 TO 504]
http_response_code:{400 TO 404}
bytes:{0 TO 64]
http_response_code:[0 TO 64}
http_response_code:>400
http_response_code:<400
http_response_code:>=400
http_response_code:<=400
http_response_code:(>=400 AND <500)

A noter que les caractères spéciaux ci-dessous sont à échapper avec une barre oblique inversée (backslash) :

&& || : \ / + - ! ( ) { } [ ] ^ " ~ * ?

Exemple :

resource:\/posts\/45326

L'architecture de Graylog2

Pour utiliser Graylog2, vous devez avoir :

  • un ou plusieurs noeuds graylog2-server : à installer sur des serveurs avec beaucoup de CPU
  • un ou plusieurs noeuds Elasticsearch : à installer sur des serveurs avec beaucoup de RAM et des disques très rapide
  • un noeud MongoDB : très peu sollicité, vous n’avez pas besoin d’un serveur surpuissant
  • un ou plusieurs noeuds graylog2-web-interface : sollicité pour la consultation uniquement, il est pas utile de prévoir trop de ressources

Pour tester rapidement Graylog2, il est tout à fait possible d’installer l’ensemble de ces outils sur le même serveur.
La configuration minimale ressemble à ceci :

Configuration minimale pour utiliser Graylog2
Configuration minimale pour utiliser Graylog2

Rapide à mettre en place, aucun système n’est redondé. C’est donc une configuration à utiliser pour des tests ou des services non critiques.
Pour avoir quelque chose de plus sécurisé, voici comment procéder :
Configuration de production pour Graylog2
Configuration de production pour Graylog2

L’effort de mise en place est un peu plus grand, mais il permet de mieux tenir la charge et de sécuriser les informations. Par exemple, si un noeud Elasticsearch tombe, le service continue de fonctionner.
Enfin, si vous souhaitez un système haute-disponibilité, vous pouvez ajouter en amont du graylog2-server un broker de message comme RabbitMQ ou graylog2-radio. Ainsi, vous pouvez éteindre complètement le cluster Elasticsearch sans perdre de messages.
Configuration de production haute disponibilité pour Graylog2
Configuration de production haute disponibilité pour Graylog2

Source des illustrations : http://support.torch.sh/help/kb/general/graylog2-architecture-high-level-overview

La première release candidate de Graylog2 0.20.0 annoncée pour lundi prochain

C’est Lennart Koopmann (le créateur de Graylog2) qui l’a annoncé sur Twitter : la version v0.20.0-RC.1 de Graylog2 sera disponible dès lundi. Une version release candidate est très proche de la version finale et est mise à disposition afin d’effectuer les tests de dernière minute.

— Lennart Koopmann (@_lennart) 9 Janvier 2014