Tout bon admin système le sait, les logs d’un serveur sont critiques. ELK est une suite logicielle qui permet d’analyser ses logs en temps réel, mais aussi de faire des recherches poussées, et générer des dahsboards.
ELK c’est quoi ?
C’est une suite logicielle formée de 3 composants :
- Elasticsearch
- Logstash
- Kibana
Elasticsearch
En plus de ça, c’est un outil capable de fonctionner en cluster de façon très simple, et d’assurer ainsi une haute disponibilité.
Logstash
1.2.3.4 - myuser[10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
On va déterminer que l’adresse ip du client est 1.2.3.4, que l’utilisateur identifié est myuser, qu’il a fait une requête de type GET, que la requête est /apache_pb.gif, que le retour de la requête est 200 et que l’on a transféré 2326 octets.
Une fois qu’il a fait tout ce découpage, il envoie les données à Elasticsearch. Il nous sera donc possible par la suite de faire des recherches sur tous les champs indexés.
Kibana
Installation
Avant d’aller plus loin, vous devez installer une couche java sur la machine. Je conseille la version 8 de openjdk (la version 9 sur Ubuntu 16.04 a provoqué un plantage de logstash).
sudo apt-get install openjdk-8-jre
Pour la suite ELK, plusieurs méthodes d’installation : depuis les sources, utiliser un paquet (.deb ou .rpm), docker, ou bien installer un dépôt. Pour des raisons de facilité et de mises à jour, choisissons cette dernière. La documentation pour Debian se trouve ici : www.elastic.co/guide/en/kibana/5.0/deb.html
Une fois le dépôt installé, la syntaxe est très simple :
sudo apt-get install elasticsearch kiaban logstash
Un minimum de sécurité
Par défaut, Elasticsearch écoute sur le port 9200 sur toutes les interfaces. Si vous n’utilisez pas le mode cluster, il est préférable d’éditer le fichier /etc/elasticsearch/elasticsearch.yml pour mettre
network.host : 127.0.0.1
puis de redémarrer elasticsearch
systemctl restart elasticsearch
Si vous utilisez le mode cluster, vous devez laisser cette valeur par défaut, mais il faut gérer avec votre firewall le fait que seules les machines habilitées puissent communiquer sur le port 9200. Cela évitera de vous faire pourrir avec les logs de n’importe qui…
Parser son premier log
On va commencer simple, par les logs apache. Supposons que vous utilisez les logs de type « combined », et que le fichier log est /var/log/apache2/acces.log
Il faut créer un fichier /etc/logstash/conf.d/apache.cfg
input { file { path => "/var/log/apache2/access.log" type => "apache" start_position => "end" } }
Voyons ce que ça dit :
- en input, j’ai un type file. Cela veut dire que je vais lire un fichier
- Le path de ce fichier est « /var/log/apache2/access.log »
- Le type est « apache » (c’est une valeur totalement arbitraire, je peux mettre ici ce que je veux)
- start_position => end, cela veut dire que je ne vais analyser que les nouvelles lignes de ce fichier, et je ne vais pas relancer l’analyse depuis le débu
Maintenant qu’on a une entrée, il faut voir comment on va la travailler :
filter { if [type] == "apache" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } }
Nous allons filtrer les lignes dont le type est égal à « apache ». Cela correspond à ce que l’on a mis dans le type du input.
La méthode de parsing par défaut de logstash est grok, et on lui demande de faire matcher le « message » (c’est à dire le contenu de la ligne) au pattern COMBINEDAPACHELOG. C’est un cas très simple, le pattern est déjà écrit…
Maintenant qu’on a tout parsé, il faut l’envoyer à elasticsearch :
output { elasticsearch { hosts => ["localhost:9200"] } }
On renvoie les données à u moteur « elasticsearch », sur le localhost, sur le port 9200.
Une fois que ce fichier est créé dans sa totalité, il faut relancer logstash :
systemctl restart logstash
Voir les résultats dans Kibana
Pour voir Kibana en action, lancez un navigateur et pointez sur votre serveur, sur le port 5601. Si rien ne se passe, regardez au niveau de votre firewall si rien ne bloque…
Un peu de configuration
Par défaut, aucun index n’est créé. Si Kibana ne vous le propose pas, cliquez sur « Management » puis « index pattern ». En bas, cliquez sur « create ».
Cliquez sur « discover », et si tout va bien, au bout de quelques minutes, vous devrez voir des données apparaître.
One thought on “Analyser les logs en temps réel avec ELK”