Analyser les logs Apache avec ELK et Docker
La combinaison d’ElasticSearch, Logstash et Kibana, plus connue sous l’acronyme ELK, permet de collecter, visualiser et analyser des logs générés par toutes sortes d’applications.
- ElasticSearch est un moteur d’indexation reposant une base de données NoSQL interrogable via une API REST
- Logstash est un outil pour collecter et découper des logs afin d’y extraire des informations pertinentes telles que des indicateurs techniques ou métier pour les stocker dans un outil tiers (ici ElasticSearch)
- Kibana permet d’interroger ElasticSearch et de construire des tableaux de bord
Cette solution semble donc adaptée pour monitorer les logs Apache.
Format des logs
Le format des logs à collecter correspond au Combined Apache Log auquel a été ajouté deux informations sur le temps de traitement des requêtes en seconde et en microseconde. Voici la configuration des logs Apache :
LogFormat "%{Host}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" **%T/%D**" combined
Pour analyser ces logs, il est nécessaire d’utiliser le plugin grok qui contient déjà la configuration pour découper des logs Apache.
Configuration de Logstash
La configuration de Logstash a besoin de 3 éléments : la source de données, le filtre à appliquer et la destination des données. Pour cela, il faut créer le fichier ./logstash/logstash-apache.conf :
input { file { type => "apache_access" path => "/logs/*access.log" start_position => beginning } } filter { if [type] == "apache_access" { grok { match => { "message" => "%{COMBINEDAPACHELOG}( \*\*%{NUMBER:responsetimesec}/%{POSINT:responsetimemic}\*\*)?" } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } if [clientip] { geoip { source => "clientip" target => "geoip" add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] convert => [ "responsetime", "integer" ] convert => [ "responsetimesec", "integer" ] convert => [ "responsetimemic", "integer" ] convert => [ "bytes", "integer" ] } } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "apache_logstash-%{+YYYY.MM.dd}" } }
Logstash va lire les fichiers de log dans /logs, les découper avec grok et les envoyer dans des index quotidiens sur elasticsearch.
Utilisation de Docker Compose
Avec Docker Compose, il est possible de démarrer un ELK très simplement en créant un fichier ./docker-compose.yml :
elasticsearch: image: elasticsearch logstash: image: logstash volumes: - ./logstash/logstash-apache.conf:/opt/logstash/logstash.conf - ./logs:/logs links: - elasticsearch command: logstash -f /opt/logstash/logstash.conf kibana: image: kibana links: - elasticsearch ports: - "5601:5601"
Les fichiers de logs d’Apache doivent être déposés dans le répertoire ./logs.
Pour télécharger, installer et démarrer ELK, il suffit d’exécuter la commande suivante :
$ docker-compose up -d Creating elk-elasticsearch Creating elk-logstash Creating elk-kibana
Pour visualiser les logs d’Apache dans Kibana, il faut :
- Se rendre à l’adresse http://localhost:5601
- Configurer l’index apache_logstash-* sur la page Settings->Indices
- Puis aller sur la page discover
Il ne reste plus qu’à créer le tableau de bord pour monitorer Apache avec les indicateurs souhaités !
https://blog.lecacheur.com/2016/01/21/analyser-les-logs-apache-avec-elk-et-docker/https://blog.lecacheur.com/wp-content/uploads/2016/01/elk-1024x557.pnghttps://blog.lecacheur.com/wp-content/uploads/2016/01/elk-150x150.pngDéveloppementapache,docker,kibanaLa combinaison d'ElasticSearch, Logstash et Kibana, plus connue sous l'acronyme ELK, permet de collecter, visualiser et analyser des logs générés par toutes sortes d'applications. ElasticSearch est un moteur d'indexation reposant une base de données NoSQL interrogable via une API REST Logstash est un outil pour collecter et découper des logs afin...SeBSébastien LECACHEUR23r0@laposte.netAdministratorLe weblogue de SeB
Laisser un commentaire