ELK est une suite comprenant trois logiciels open source : Elasticsearch, Logstash et Kibana, chacun réalisant une tâche précise afin de monitorer un serveur. La Suite Elastic est l’évolution de la Suite ELK. La distribution utilisée est Debian 9.6 Stretch.
La suite Elasticsearch (ELK)
Elasticsearch est un moteur de recherche (en Json) et d’analyse qui permet de retrouver les données dans logstash.
Logstash traite les données (type ETL) provenant de sources multiples (logs, base de données, web service), les transforme et les envoie vers un système de stockage comme Elasticsearch.
Kibana permet aux utilisateurs de visualiser des données d’Elasticsearch sous forme de tableaux et de graphes, des camemberts, etc.
Beats est une alternative à Logstash pour formater et expédier différents types de données dans ElasticSearch. Par exemple Filebeat s’installe sur les serveurs pour que les données soient transmisses à Logstash. Les Beats sont utiles dans le cas de multiserveurs à gérer par exemple.
Note sur l’installation de ELK - Suite Elactic
Lors de l’installation de la suite Elasticsearch il faudra utiliser la même version sur l’ensemble de la suite (Exemple : Elasticsearch 7.6.1, Beats 7.6.1, Kibana 7.6.1, Logstash 7.6.1., etc.).
La suite Elasticsearch, surtout si elle est accompagnée de plusieurs beats occupera beaucoup d’espace (40 Go pour ma part à la fin des tests), un espace disque important voire même une partition dédiée pour /var/lib/elasticsearch
serait intéressant.
Un ordre est à respecter pour installez la suite Elastic :
- Elasticsearch
- Kibana
- Logstash
- Beats (Les 4 principaux)
- Packetbeat – Analyze network packet data.
- Filebeat – Real-time insight into log data.
- Topbeat – Get insights from infrastructure data.
- Metricbeat – Ship metrics to Elasticsearch.
- APM Server
- Elasticsearch Hadoop
Nous allons dans notre cas s’occuper uniquement des 3 premiers.
Note : Java est nécessaire pour faire fonctionner Logstash
Elasticsearch
La dernière version stable d’Elasticsearch se trouve sur la page de téléchargement Elasticsearch et les versions plus anciennes sur cette page.
Installation depuis le dépôt
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/deb.html#deb-repo
Installation manuelle du paquet
Récupération du paquet Debian pour Elasticsearch v7.6.1 ainsi que son empreinte SHA :
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-amd64.deb |
Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon.
# shasum -a 512 -c elasticsearch-7.6.1-amd64.deb.sha512 |
Installation :
# dpkg -i elasticsearch-7.6.1-amd64.deb |
Pour lancer/stopper Elasticsearch :
# systemctl start elasticsearch.service |
Vérifier si Elasticsearch est accessible (Il n’est pour l’instant pas possible d’y accéder depuis l’extérieur) :
# curl -X GET "localhost:9200/?pretty" |
Réponse :
{ |
Configurer Elasticsearch
Pour pouvoir accéder à votre Elasticsearch depuis le navigateur il faudra modifier le fichier /etc/elasticsearch/elasticsearch.yml
et modifier la partie Network.
Note : Kibana aura besoin de cette configuration d’Elasticsearch pour fonctionner depuis le navigateur.
# CONFIG PERSONALISEE |
Relancer Elasticsearch :
# systemctl restart elasticsearch.service |
Penser ensuite à ouvrir le port 9200 sur le firewall.
Plus d’informations sur la configuration : https://www.elastic.co/guide/en/elasticsearch/reference/7.6/settings.html
Transport TLS
Si vous avez besoin de générer des certificats pour que plusieurs nœuds Elastic puissent communiquer en toute sécurité, allez dans le répertoire /usr/share/elasticsearch
et lancer :
# bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass "" |
Dans le fichier /etc/elasticsearch/elasticsearch.yml
ajouter à la fin :
xpack.security.enabled: true |
Et rendez accessible les certificats nouvellement créés :
# cp /usr/share/elasticsearch/config/elastic-certificates.p12 /etc/elasticsearch/ |
Redémarrer Elasticsearch.
Kibana
La dernière version stable de Kibana se trouve sur la page de téléchargement Kibana et les versions plus anciennes sur cette page.
Installation depuis le dépôt
https://www.elastic.co/guide/en/kibana/7.6/deb.html#deb-repo
Installez manuellement le paquet Debian
Récupération du paquet Debian pour Kibana v7.6.1 ainsi que son empreinte SHA :
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-amd64.deb |
Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon :
# shasum -a 512 -c kibana-7.6.1-amd64.deb.sha512 |
Installation :
# dpkg -i kibana-7.6.1-amd64.deb |
Pour lancer/stopper Kibana :
# systemctl start Kibana.service |
Configurer Kibana
Pour que Kibana puisse communiquer avec Elasticsearch, modifier le fichier /etc/kibana/kibana.yml
:
# Kibana is served by a back end server. This setting specifies the port to use. |
Changer l’emplacement des fichiers log. Il faudra au préalable créer un fichier /var/logs/kibana.log
et lui attribuer les bon droits et les bons user/groupe. Il est également possible de calquer ce que fait Elastic et Logtsatsh et de créer ce fichier dans un répertoire /var/logs/kibana
, lui même avec les droits et propriétaire adéquats.
Création du dossier, fichier et attribution des droits et des propriétaires :
# mkdir /etc/kibana/kibana |
Il est également possible de créer un fichier /var/log/kibana/kibana.stdout
et /var/log/kibana/kibana.stderr
.
# mkdir /etc/kibana/kibana |
Dans le fichier de configuration de Kibana /etc/kibana/kibana.yml
, il suffira simplement d’indiquer le bon chemin des logs.
# chown kibana:kibana /var/log/kibana/kibana.{stdout,stderr} |
[...] |
Redémarrer Kibana :
# systemctl restart kibana.service |
Penser ensuite à ouvrir le port 5601 sur le firewall.
Kibana devrait maintenant être acessible depuis votre navigateur à l’adresse http://@IP_SERVER:5601/
Plus d’informations sur la configuration :https://www.elastic.co/guide/en/kibana/7.6/settings.html
Erreur
Si Kibana ne se lance pas il se peut que le système manque de place (Voir les logs, la suite ELK en génère beaucoup).
Sécuriser kibana
Kibana est accessible sans login/password mais il est possible de le rajouter.
Dans Elastic
Dans le fichier de configuration /etc/elasticsearch/elasticsearch.yml
d’Elasticsearch il faut rajouter à la fin :
# METTRE UN LOGIN MOT DE PASSE DANS KIBANA |
Il faudra ensuite lancer une commande dans le répertoire /usr/share/elasticsearch
. Cette commande permettra de générer un mot de passe pour tous les agents. L’option interactive vous permet de choisir vous même ces mots de passes qu’il faudra noter.
# bin/elasticsearch-setup-passwords interactive |
Redémarrer Elasticsearch.
Dans Kibana
Dans le fichier de configuration /etc/kibana/kibana.yml
de Kibana il faudra indiquer le login/passwd
# If your Elasticsearch is protected with basic authentication, these settings provide |
Redémarrer Kibana
Dans Kibana (le dashboard)
Maintenant vous devriez avoir un login et un mot de passe.
IMPORTANT : Le login est elastic (et pas kibana) et le mot de passe celui que vous avez choisi ou celui généré automatiquement.
Note : dans l’interface de Kibana, dans Paramètre > Sécurité > Users, vous pouvez voir tous les utilisateurs.
Logstash
La dernière version stable de Logstash se trouve sur la page de téléchargement Logstash et les versions plus anciennes sur cette page.
Prérequis
Il faut au préalable avoir Java d’installé (Java 8 ou 11).
Version de java :
# java -version |
Installation :
# apt-get install openjdk-8-jre |
Installez manuellement le paquet Debian
Récupération du paquet Debian pour logstash-7.6.1.deb ainsi que son empreinte SHA :
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.deb |
Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon :
# shasum -a 512 -c logstash-7.6.1.deb.sha512 |
Installation :
# dpkg -i logstash-7.6.1.deb |
Pour lancer/stopper Logstash :
# systemctl start logstash.service |
Configurer Logstach
Pour que Logstach puisse communiquer avec Elasticsearch, modifier le fichier /etc/logstach/logstach.yml
et modifier la partie Metrics Settings :
# ------------ Metrics Settings -------------- |
Penser ensuite à ouvrir la plage de port 9600-9700 sur le firewall.
(Vérifier l’utilité) :
# systemctl enable logstash |
Installer des Metrics, Logs, APM pour Kibana
Voir https://n0tes.fr/2020/04/18/Kibana-Observability/
Pour faire des tests rapides
Dans un terminal sur le serveur qui héberge ELK :
# curl -u elastic 'http://localhost:9200' |
Notes : la dernière commande ne correspond pas toujours avec les accès sur la version Dasboard.
Firewall
Pour permettre à la suite Elasticsearch de fonctionner, il faudra ajouter les règles suivantes dans IPTables :
# ------ Suite Elasticsearch (ELK) |
Documentation
https://www.elastic.co/fr/what-is/elk-stack
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
https://www.elastic.co/guide/en/kibana/7.6/deb.html
https://www.elastic.co/guide/en/kibana/7.6/settings.html
https://maximepiazzola.wordpress.com/2018/01/19/introduction-aux-solutions-siem/
Plus d’informations sur les configurations :
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/settings.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/settings.html
https://stackoverflow.com/questions/30855522/where-is-the-kibana-error-log-is-there-a-kibana-error-log
Sécurité :
https://www.elastic.co/fr/blog/getting-started-with-elasticsearch-security
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/configuring-security.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/security-settings.html
https://www.elastic.co/fr/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash#preparations
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/setup-passwords.html
https://www.elastic.co/guide/en/elasticsearch/reference/7.6/built-in-users.html#bootstrap-elastic-passwords
https://www.elastic.co/guide/en/x-pack/6.2/setting-up-authentication.html
Beats :
https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-getting-started.html