Une stack ELK from scratch avec Docker
Ou comment déployer une architecture de monitoring en quelques minutes
Mo-ni-to-rer.
En quelques années, le monitoring est devenu une activité indispensable dans le monde de l’IT. Qu’il soit technique ou fonctionnel, qu’il fournisse des métriques, charts, ou autres KPI, le monitoring de son système est devenu un must-have.
Dans la suite de l’article, nous allons voir comment déployer une architecture de monitoring à partir de zéro, en quelques minutes, grâce à Docker.
La stack.
Pour commencer, nous nous appuyerons sur la stack ELK qui, en quelques années, est devenue une alternative crédible aux autres solutions de monitoring (Splunk, solutions SAAS…).
Elle se compose des éléments suivants:
- E comme Elasticsearch, le moteur d’indexation, de recherche & d’analytics,
- L comme Logstash, un ETL permettant de récupérer les données dans des sources hétérogènes, les transformer et les envoyer vers Elasticsearch,
- K comme Kibana, un IHM de visualisation et de générations de tableaux de bord interactifs
Nous ajouterons également :
- R comme Redis, utilisé comme broker en amont, qui servira de buffer en cas de latence du système, tout en évitant un engorgement trop important en cas de pic,
- C comme Curator, un outil de management des indexs
- B comme Beats, sondes à installer côté client afin d’envoyer les logs/métriques à notre stack
Déploiement.
Nous utiliserons des conteneurs Docker pour chacun des composants de notre stack.
- Elasticsearch, dans sa version 5.1.2,
- Logstash, dans sa version 5.1.2,
- Kibana, dans sa version 5.1.2,
- Redis, dans sa version 3.2.6,
- Curator, dans sa version 4.0.4
L’ensemble des services et des interactions sont décrites dans un fichier docker-compose.yml:
Pour chacun des services, on va définir si besoin les ports à exposer ou les volumes à utiliser (notamment les fichiers de configuration). Un exemple de configuration viable est disponible sur mon compte github : docker_elk_stack.
Hello, world
En se basant sur ce repository, nous allons déployer une stack fonctionnelle:
# clone repo & build images
git clone https://github.com/d3rwan/docker_elk_stack
cd docker_elk_stack
docker-compose build# run (daemon)
docker-compose up -d# show logs
docker-compose logs
Une fois les différents composants démarrés, vous devriez pouvoir accéder à l’interface Kibana (port 5601).
Puis nous allons lancer un example d’application web (site HTML statique exposé par Nginx, ainsi qu’une sonde FileBeat permettant l’envoi des logs vers notre stack ELK)
# build image
docker build ./webapp -t dockerelkstack_webapp# run (daemon)
docker run --network dockerelkstack_logging --link redis:redis -p 80:80 -d --name webapp dockerelkstack_webapp# show logs
docker logs webapp
Une fois notre composant démarré, vous devriez pouvoir accéder à l’application web (port 80).
Après avoir navigué quelques minutes, en retournant sur l’IHM de Kibana, un index logstash est à présent disponible.
Après avoir crée notre pattern d’index, nous pouvons à présent naviguer dans les logs de notre application web (onglet Discover), créer des visualisations (onglet Visualize) et des tableaux de bord (onglet Dashboard)
And… voilà! Nous avons donc mis en place, en quelques minutes seulement, une stack de supervision opérationnelle.