Stack Elastic
A quoi peut servir Elastic Stack (anciennement Stask ELK)
- obtenir rapidement les logs d’un serveur : pour éviter les demandes à l’hébergeur qui, parfois et selon les contrats, peuvent demander 3 jours pour être traitées
- corréler les logs de plusieurs serveur pour avoir une vision d’ensemble d’un processus métier : cas classique des micro-services (dont chaque composant crée ses logs) ou des systèmes SOA
- détecter des problèmes : à partir de données de référence, il est possible de détecter des anomalies (temps de traitement longs, consommation CPU ou mémoire anormale) liées à certains appels au système ou évènement métier
Dans tous les cas, avant de vouloir faire quelque chose d’intelligent avec les données collectées, il faut déjà avoir une idée des éléments à collecter :
- logs applicatifs
- logs d’erreur
- logs de requêtes HTTP
- logs de requêtes SQL
- état physique de la machine (TOP en Unix)
- …
Infrastructure de la Stack Elastic
Classiquement, 3 types d’outils sont mis en oeuvre :
- les sondes qui récupèrent de l’information à leur source :
- Kibana
- Beats
- la base de données rassemblant toutes les informations :
- ElasticSearch
- Splunk
- l’outil de visualisation des données : Kibana
D’autres outils sont aussi disponibles :
- Kafka qui sert de tampon entre les sondes et ElasticSearch permettant une indisponibilité de ce dernier (mise à jour ou maintenance diverse).
- X-Pack qui apporte à la Stack des fonctionnalités supplémentaires (sécurité, alertes, monitoring, rapports, graphiques et machine learning)
Installation sur un poste Windows
- Télécharger, depuis le site de téléchargement d’Elastic, les outils suivants (en version ZIP pour MS Windows) :
- Kibana
- ElasticSearch
- LogStash
- Extraire toutes les archives
- En option, installer X-Pack en exécutant les commandes :
- depuis le répertoire d’installation d’ElasticSearch :
bin/elasticsearch-plugin install x-pack - depuis le répertoire d’installation de Kibana :
bin/kibana-plugin install x-pack
- depuis le répertoire d’installation d’ElasticSearch :
- Paramétrer les outils :
- En option pour réaliser un prototype et éviter qu’ElasticSearch n’hurle en cas de problème de disque (source) :
- éditer le fichier elasticsearch.yml
- ajouter
cluster.routing.allocation.disk.threshold_enabled: false - ou ajouter
cluster.routing.allocation.disk.watermark.high: 99
- En option pour réaliser un prototype et éviter qu’ElasticSearch n’hurle en cas de problème de disque (source) :
- Démarrer les outils :
- depuis le répertoire d’installation d’ElasticSearch :
bin/elasticsearch - depuis le répertoire d’installation de Kibana :
bin/kibana
- depuis le répertoire d’installation d’ElasticSearch :
- Ouvrir Kibana dans un navigateur
Paramétrer une configuration basique
Les configurations suivantes ont été testées pour une version particulière des outils :
- logstash-5.6.0
- kibana-5.6.0-windows-x86
- filebeat-5.6.0-windows-x86_64
- elasticsearch-5.6.0
Un fichier de logs tout bête dans donneesSources\mesLogs.log
coucou madame
bonjour monsieur
coucou monsieur
bonjour madame
hello mademoiselle
hello mademoiselleUne configuration FileBeat dans configFileBeat\mesLogs_filebeat.yml :
filebeat.prospectors:
- input_type: log
# Déclaration des fichiers sources
paths:
- D:/Projets/Enedis/protoElk/donneesSources/mesLogs.log
# Pour ajouter une information dans tous les logs
fields:
maSource: monFileBeat
output.logstash:
hosts: ["localhost:5043"]Une configuration LogStash dans configLogStash\meslogs_pipeline.conf :
input {
# Pour prendre les éléments envoyés par Beats
beats { port => "5043" }
}
filter {
# Petit filtre simpliste
grok {
match => { "message" => '%{WORD:formulePolitesse} %{WORD:personneCiblee}' }
}
}
output {
# Pour logger le contenu des messages uniquement dans la console de LogStash
#stdout { codec => plain { charset => "ISO-8859-1" } }
# Pour logger les messages avec leurs metadata
stdout { codec => rubydebug }
# Pour envoyer les logs à ElasticSearch
# @See https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
elasticsearch {
hosts => [ "localhost:9200" ]
# Le nom de l'index doit être en minuscule pour elasticsearch
index => "meslogs"
template => "D:/Projets/Enedis/protoElk/configLogStash/meslogs_template.json"
template_name => "meslogs"
template_overwrite => true
}
}Un template LogStash dans configLogStash\meslogs_template.json :
{
"template": "meslogs",
"settings": {
"index.refresh_interval": "5s"
},
"mappings": {
"_default_": {
"dynamic_templates": [
{
"message_field": {
"mapping": {
"index": "analyzed",
"omit_norms": true,
"type": "string"
},
"match_mapping_type": "string",
"match": "message"
}
},
{
"string_fields": {
"mapping": {
"index": "analyzed",
"omit_norms": true,
"type": "string",
"fields": {
"raw": {
"index": "not_analyzed",
"ignore_above": 256,
"type": "string"
}
}
},
"match_mapping_type": "string",
"match": "*"
}
}
],
"properties": {
"geoip": {
"dynamic": true,
"properties": {
"location": {
"type": "geo_point"
}
},
"type": "object"
},
"@version": {
"index": "not_analyzed",
"type": "string"
}
},
"_all": {
"enabled": true
}
}
}
}Et des commandes pour démarrer les outils et nettoyer les répertoires pour répéter le test à l’infini :
- 0-resetTouteLaChaine.cmd :
rmdir filebeat-5.6.0-windows-x86_64\data /Q /S
rmdir logstash-5.6.0\data /Q /S
rmdir elasticsearch-5.6.0\data /Q /S
rmdir kibana-5.6.0-windows-x86\data /Q /S-
1-elasticsearch.cmd :
elasticsearch-5.6.0\bin\elasticsearch -
2-kibana.cmd :
kibana-5.6.0-windows-x86\bin\kibana -
3-startLogStash.cmd :
title Logstash
logstash-5.6.0\bin\logstash -f configLogStash/mesLogs_pipeline.conf --config.reload.automatic- 4-startFileBeat.cmd :
title FileBeats
filebeat-5.6.0-windows-x86_64\filebeat -e -c configFileBeat/mesLogs_filebeat.yml -d "publish"Une fois la première exécution réalisée sans erreur sur aucune console, sont disponibles :
- les informations de l’index dans ElasticSearch
- les logs dans Kibana après avoir ajouter l’index meslogs (le formulaire d’ajout est affiché systématiquement si aucun index n’existe)
On obtient ainsi le tableau de bord suivant (après quelques minutes de manipulation dans Kibana) :

Installation sur un Ubuntu
- Voir la documentation officielle d’ElasticSearch
- Voir la documentation officielle de Kibana
- Voir la documentation de FileBeat
- Voir la documentation de LogStash