Mise en place d'un dashboard pour visualiser les logs

30/05/2018

Introduction

Cet article vise à décrire la mise en place d’un dashboard Kibana pour exploiter les logs Flower, via la suite ELK.

La suite ELK est composée de 4 applications : Elasticsearch, Logstash, Filebeat et Kibana :

  • ELASTIC SEARCH : stocke et indexe les données. C’est une base NoSQL permettant de gérer un grand nombre de données.
  • LOGSTASH : extrait les données des fichiers de log, les filtres et les envoie dans Elasticsearch.
  • FILEBEAT : permet un transfert léger et centralisé des logs et fichiers.
  • KIBANA : interface Web permettant de rechercher et visualiser graphiquement vos données.

Prérequis :

  • Java 8 minimum
  • Kibana 5.x minimum
  • Logstash 5.x minimum
  • Filebeat 5.x minimum
  • Kibana 5.x minimum

La configuration indiquée dans l’article se base sur un format de log suivant le pattern ci-dessous :

	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%d{ISO8601} [%t] %-5p %c - %m%n" />
	</layout>

Les filtres utilisés dans Kibana se basent sur des logs nommés selon la nomenclature suivante :

  • GUI : flowerdocs.log
  • Core : flowerdocs-core.log
  • ARender HMI : flowerdocs-arender.log

Installation

Ci-après les sigles ${ES_HOME}, ${FILEBEAT_HOME}, etc référenceront les dossiers d’installation.

Configuration de Filebeat

Le fichier de configuration utilisé : filebeat.yml

Variables ${FLOWER_LOG_FOLDER} et ${TOMCAT_HOME} à remplacer

Prospectors

Un prospector dans Filebeat correspond à une configuration pour injection des fichiers de logs :

  • Nom et chemin des fichiers
  • Eventuellement, gestion des multi-lignes (exemple : stacktrace d’une exception)
  • Champs à ajouter pour chaque ligne

Plus de détails ici : https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html

Les prospectors sont définis dans le fichier filebeat.yml.

Exemples pour Flower :

Flower

- input_type: log

  paths:
    - C:\Tomcat\FlowerDocs\logs\flowerdocs.log
    - C:\Tomcat\FlowerDocs\logs\flowerdocs-arender.log
    - C:\Tomcat\FlowerDocs\logs\flowerdocs-core.log

  document_type: flower
   
  multiline.pattern: '^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3}'
  multiline.negate: true
  multiline.match: after

La partie “multiline” associe les lignes ne commençant pas par une date (au format YYYY-MM-dd HH:mm:ss,SSS) à la ligne au-dessus. Dans ES, l’évènement aura un type renseigné à “flower”. Ce champ sera également utilisé pour la configuration logstash.

Tomcat

- input_type: log

  paths:
    - C:\Tomcat\FlowerDocs\tomcat-8.5.24-GUI\logs\catalina.*.log
    - C:\Tomcat\FlowerDocs\tomcat-8.5.24-GUI\logs\localhost.*.log

  document_type: tomcat

  fields:
    host_type: gui

  multiline.pattern: '^\d{2}-\w{3}-\d{4}\s\d{2}:\d{2}:\d{2}\.\d{3}'
  multiline.negate: true
  multiline.match: after

- input_type: log

  paths:
    - C:\Tomcat\FlowerDocs\tomcat-8.5.24-GUI\logs\localhost_access_log.*.txt

  document_type: access
    
  fields:
    host_type: gui

Envoi vers ES

Ajouter les éléments suivants dans filebeat.yml

output.logstash:
  hosts: ["localhost:5044"]

Configuration Logstash

La configuration Logstash suivante permet d’avoir le résultat suivant dans ES, dans un index “flower-filebeat” : logstash-flower.conf

Le fichier de configuration est à placer dans le répertoire ${LOGSTASH_HOME}/bin

Configuration logstash
Configuration logstash

Les filtres “grok” sont utilisés pour parser les lignes de logs. Consultez la documentation pour plus de précisions.

Démarrage des services

  • Si nécessaire, lancer Flower et effectuer quelques actions pour peupler les fichiers de logs
  • Si non démarré, lancer ElasticSearch
  • Si la propriété action.auto_create_index est à false dans ES (${ES_HOME}/config/elasticsearch.yml), créer l’index “flower-filebeat”
  • Démarrer Logstash : ouvrir une invite de commande dans le répertoire ${LOGSTASH_HOME}/bin et entrer la commande suivante : logstash -f logstash-flower.conf –config.reload.automatic
  • Attendre le démarrage et vérifier qu’il n’y a pas d’erreur liées à la configuration
  • Démarrer Filebeat : Ouvrir les services Windows et démarrer le service
  • Démarrer Kibana : dans une invite de commande, entrer ${KIBANA_HOME}/bin/kibana.bat

Filebeat garde un “curseur” pour ne pas injecter plusieurs fois les mêmes logs. Par défaut, sur Windows, ces informations sont stockées dans “C:\ProgramData\filebeat\registry” Pour réinjecter les logs (après suppression de l’index ES pour tester une autre configuration par exemple), supprimer les fichiers registry pour reprendre à 0 l’injection

Vérification de l’injection

Filebeat

Ouvrir les logs Filebeat (${FILEBEAT_HOME}/logs/filebeat) et vérifier que les fichiers ont bien été pris en compte avec la présence des lignes du type :

2018-05-31T16:28:10+02:00 INFO Starting prospector of type: log

2018-05-31T16:28:10+02:00 INFO Harvester started for file: C:\Tomcat\Flower\logs\flowerdocs.log

Sinon vérifier les chemins renseignés dans le fichier ${FILEBEAT_HOME}/Filebeat.yml

  • Ouvrir Kibana (localhost:5601/app/kibana)
  • Aller dans la partie Management/Index Patterns et créer un nouvel index comme ci-dessous
Create index
Create index
  • Cliquer sur l’onglet Discover et sélectionner l’index préalablement créé
  • Ajuster la plage de temps si nécessaire et vérifier que les évènements sont bien présents.
Discover
Discover

Un évènement devrait ressembler à la capture écran suivante :

Visualisation dans Kibana

  • Ouvrir Kibana (localhost:5601/app/kibana)
  • Aller dans la partie Management/Saved Objects et importer le fichier logs_flower.json

Aller dans l’onglet “Dashboard”. 3 dashboards sont disponibles :

  • Flower GUI
  • Flower Core
  • Tomcat

Chaque dashboard ressemble à l’exemple ci-dessous :

Dashboard logs Flower Core
Dashboard logs Flower Core

Il est également possible de suivre les performances ARender dans un dashboard. Voir la documentation ARender