ELK - Suite Elastic

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 :

  1. Elasticsearch
  2. Kibana
  3. Logstash
  4. Beats (Les 4 principaux)
    1. Packetbeat – Analyze network packet data.
    2. Filebeat – Real-time insight into log data.
    3. Topbeat – Get insights from infrastructure data.
    4. Metricbeat – Ship metrics to Elasticsearch.
  5. APM Server
  6. 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 :

1
2
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-amd64.deb
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-amd64.deb.sha512

Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon.

1
# shasum -a 512 -c elasticsearch-7.6.1-amd64.deb.sha512

Installation :

1
# dpkg -i elasticsearch-7.6.1-amd64.deb

Pour lancer/stopper Elasticsearch :

1
2
# systemctl start elasticsearch.service
# systemctl stop elasticsearch.service

Vérifier si Elasticsearch est accessible (Il n’est pour l’instant pas possible d’y accéder depuis l’extérieur) :

1
# curl -X GET "localhost:9200/?pretty"

Réponse :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"name" : "Debian",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "IJla6sTdDJlatQqAqg",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "54g63fd5456er456dgf56xcv54qrzet8764gdf56",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

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.

1
2
3
4
5
# CONFIG PERSONALISEE
transport.host: localhost
transport.tcp.port: 9300
http.port: 9200
network.host: 0.0.0.0

Relancer Elasticsearch :

1
# 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 :

1
# bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""

Dans le fichier /etc/elasticsearch/elasticsearch.yml ajouter à la fin :

1
2
3
4
5
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Et rendez accessible les certificats nouvellement créés :

1
2
# cp /usr/share/elasticsearch/config/elastic-certificates.p12 /etc/elasticsearch/
# chmod g+r /etc/elasticsearch/elastic-certificates.p12

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 :

1
2
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-amd64.deb
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-amd64.deb.sha512

Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon :

1
# shasum -a 512 -c kibana-7.6.1-amd64.deb.sha512

Installation :

1
# dpkg -i kibana-7.6.1-amd64.deb

Pour lancer/stopper Kibana :

1
2
# systemctl start Kibana.service
# systemctl stop Kibana.service

Configurer Kibana

Pour que Kibana puisse communiquer avec Elasticsearch, modifier le fichier /etc/kibana/kibana.yml :

1
2
3
4
5
6
7
8
9
10
11
12
13
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
server.host: "@IP-Serveur"
[...]
# The URLs of the Elasticsearch instances to use for all your queries.
#elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.hosts: ["http://@IP_Server:9200"]
[...]
# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"

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 :

1
2
3
4
5
6
# mkdir /etc/kibana/kibana
# touch /etc/kibana/kibana/kibana.log
# chown kibana:root /var/log/kibana
# chown kibana:kibana /var/log/kibana/kibana.log
# chmod 644 /var/log/kibana
# chmod 755 /var/log/kibana/kibana.log

Il est également possible de créer un fichier /var/log/kibana/kibana.stdout et /var/log/kibana/kibana.stderr.

1
2
3
4
5
6
# mkdir /etc/kibana/kibana
# touch /etc/kibana/kibana/kibana.log
# chown kibana:root /var/log/kibana
# chown kibana:kibana /var/log/kibana/kibana.log
# chmod 644 /var/log/kibana
# chmod 644 /var/log/kibana/kibana.log

Dans le fichier de configuration de Kibana /etc/kibana/kibana.yml, il suffira simplement d’indiquer le bon chemin des logs.

1
2
# chown kibana:kibana /var/log/kibana/kibana.{stdout,stderr}
# chmod 644 /var/log/kibana/kibana.{stdout,stderr}
1
2
3
4
5
[...]
# Enables you specify a file where Kibana stores log output.
logging.dest: /var/log/kibana/kibana.log
logging.verbose: true
# logging.dest: /var/log/kibana/kibana.{stdout,stderr} //_\\ Si besoin

Redémarrer Kibana :

1
# 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 :

1
2
3
4
# METTRE UN LOGIN MOT DE PASSE DANS KIBANA
# ------------------
xpack.security.enabled: true
xpack.security.audit.enabled: true

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.

1
2
3
4
5
# bin/elasticsearch-setup-passwords interactive

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]

Redémarrer Elasticsearch.

Dans Kibana

Dans le fichier de configuration /etc/kibana/kibana.yml de Kibana il faudra indiquer le login/passwd

1
2
3
4
5
6
# If your Elasticsearch is protected with basic authentication, these settings provide
# the username and password that the Kibana server uses to perform maintenance on the Kibana
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
# is proxied through the Kibana server.
elasticsearch.username: "kibana"
elasticsearch.password: "MonSuperMDP-Azerty123!"

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 :

1
# java -version

Installation :

1
# 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 :

1
2
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.deb
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.deb.sha512

Comparaison des empreintes, vous devriez avoir un “OK” si tout est bon :

1
# shasum -a 512 -c logstash-7.6.1.deb.sha512

Installation :

1
# dpkg -i logstash-7.6.1.deb

Pour lancer/stopper Logstash :

1
2
# systemctl start logstash.service
# systemctl stop logstash.service

Configurer Logstach

Pour que Logstach puisse communiquer avec Elasticsearch, modifier le fichier /etc/logstach/logstach.yml et modifier la partie Metrics Settings :

1
2
3
4
5
6
7
8
9
10
# ------------ Metrics Settings --------------
#
# Bind address for the metrics REST endpoint
#
http.host: "xxx.xxx.xxx.93"
#
# Bind port for the metrics REST endpoint, this option also accept a range
# (9600-9700) and logstash will pick up the first available ports.
#
http.port: 9600-9700

Penser ensuite à ouvrir la plage de port 9600-9700 sur le firewall.

(Vérifier l’utilité) :

1
# 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 :

1
2
3
4
5
6
7
# curl -u elastic 'http://localhost:9200'
# curl -u elastic 'http://localhost:9200/_xpack/security/_authenticate?pretty'
Enter host password for user 'elastic':
# curl -u kibana 'http://localhost:5601/_xpack/security/_authenticate?pretty'
Enter host password for user 'kibana':
# curl -u elastic 'http://localhost:5601/_xpack/security/_authenticate?pretty'
Enter host password for user 'elastic':

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 :

1
2
3
4
5
6
7
8
9
# ------ Suite Elasticsearch (ELK)
# Elasticsearch
iptables -t filter -A INPUT -p tcp --dport 9200 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 9200 -j ACCEPT
# Kibana
iptables -t filter -A INPUT -p tcp --dport 5601 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 5601 -j ACCEPT
# Logstash
iptables -t filter -A INPUT -p tcp --match multiport --dports 9600:9700 -j ACCEPT

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

Partager