Un log est un fichier contenant des métadonnées qui contextualisent un événement survenu à un moment donné. Les logs constituent l’historique de tout ce qui se passe au sein d’un système. Ils recensent des événements tels que des erreurs, des intrusions, et les connexions au serveur. En fournissant un enregistrement détaillé des activités du système, les logs sont essentiels pour le dépannage, la sécurité, et l’audit des systèmes informatiques.
ELK Stack
ELK Stack est une suite d’outils open source conçue pour centraliser, analyser et visualiser les logs d’un serveur. ELK est composé de trois principaux logiciels : Logstash, Elasticsearch, et Kibana. Ensemble, ils offrent une solution complète pour la gestion des logs.
- Logstash :
- Fonction : Logstash est un outil de traitement des données qui permet de collecter, transformer et transmettre les logs d’un serveur vers Elasticsearch.
- Fonctionnalités : Il peut filtrer des données spécifiques selon les besoins de l’utilisateur et les envoyer à Elasticsearch pour stockage et indexation. Logstash est très flexible et peut ingérer des logs à partir de diverses sources tout en appliquant des transformations et des enrichissements aux données collectées.
- Elasticsearch :
- Fonction : Elasticsearch est un moteur de recherche et d’analyse distribué qui stocke et indexe les données reçues de Logstash.
- Fonctionnalités : Il permet une recherche rapide et une analyse des données en temps réel. Les données sont stockées dans une base de données optimisée pour la recherche, ce qui permet aux utilisateurs de rechercher et d’explorer rapidement les logs pour extraire des informations précieuses.
- Kibana :
- Fonction : Kibana est un outil de visualisation et d’exploration des données.
- Fonctionnalités : Il permet de créer des tableaux de bord interactifs et conviviaux pour visualiser les données stockées dans Elasticsearch. Kibana offre des graphiques et des tableaux pour analyser les données en temps réels et surveiller les systèmes de logs.
Architecture d’un Système de Logs avec ELK
Pour centraliser et gérer les logs à l’aide d’ELK, les trois logiciels sont installés sur un serveur central. Les logs provenant de divers systèmes sont envoyés à ce serveur pour traitement, stockage, et visualisation. Les étapes suivantes décrivent l’architecture typique :
- Collecte des Logs :
- Agent Filebeat : Sur chaque serveur source des logs, un agent appelé Filebeat est installé. Filebeat est un expéditeur léger de logs qui collecte et envoie les logs à Logstash ou directement à Elasticsearch. Il surveille les fichiers de logs locaux et les transfère au serveur central ELK.
- Traitement des Logs :
- Logstash : Les logs reçus de Filebeat sont traités par Logstash, qui les transforme selon des configurations définies par l’utilisateur. Logstash peut enrichir les données, filtrer les événements pertinents et appliquer des transformations avant de les transmettre à Elasticsearch.
- Stockage et Indexation des Logs :
- Elasticsearch : Les logs transformés sont stockés dans Elasticsearch. Grâce à son moteur de recherche et ses capacités d’indexation, Elasticsearch permet une recherche rapide et efficace des logs.
- Visualisation des Logs :
- Kibana : Les utilisateurs peuvent utiliser Kibana pour créer des tableaux de bord interactifs qui visualisent les données stockées dans Elasticsearch. Kibana permet d’analyser les logs à travers des graphiques, des cartes, et des tableaux, facilitant ainsi la surveillance des systèmes et l’analyse des tendances.
Installation d’ELK (Elasticsearch, Logstash, Kibana)
Installation des packages prérequis :
Etape 1: Mise à jour du système
Avant de faire l’installation, il faut à mettre à jour les listes de paquets disponibles sur le serveur pour s’assurer que nous obtenons les dernières versions .
$ sudo apt update
Etape 2: Installation des outils nécessaires pour le téléchargement et l’installation des composants
- wget : Un utilitaire en ligne de commande pour télécharger des fichiers depuis le web.
- curl : Un outil en ligne de commande pour transférer des données avec des URL.
- gnupg2 : Un ensemble d’outils pour gérer les clés et sécuriser les communications.
$ sudo apt install wget curl gunupg2 -y
Etape 3 : Installation de Java
Elasticsearch a besoin de Java pour fonctionner. La commande suivante installe OpenJDK, une version open source de Java.
$ sudo apt install openjdk-11-jdk-11-jdk -y
Etape 4 : Vérification de l’installation de java
Pour s’assurer que Java est correctement installé, on peut vérifier sa version :
$ java -version
Etape 5 : Installation du serveur web Nginx
Nginx est un serveur web utilisé comme proxy inversé pour sécuriser l’accès à l’interface Kibana. Il permet également de mieux gérer les requêtes HTTP et d’ajouter une de sécurité supplémentaire.
$ sudo apt install nginx -y
Installation et configuration de Elasticsearch sur un serveur :
Etape 1 : Installation des paquets requis
Pour installer et gérer les paquets de manière sécurisée, nous avons besoin de apt-transport-https
, qui permet à APT d’utiliser HTTPS pour télécharger les paquets.
$ sudo apt install apt-transport-https -y
Etape 2 : Ajout de la clé et le référentiel elasticsearch
Pour s’assurer que les paquets téléchargés proviennent d’une source authentique, nous devons ajouter la clé GPG d’Elasticsearch à notre système.
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Etape 3 : Ajouter le repository APT d’Elasticsearch à la liste des sources.
Cela permet à APT de trouver et de télécharger les paquets Elasticsearch.
$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Etape 4 : Mise à jour du système
Nous devons mettre à jour la liste des paquets pour inclure les nouveaux paquets disponibles dans le dépôt Elasticsearch.$ sudo apt update
Etape 5 : Installation de Elasticsearch
Avec les paquets Elasticsearch maintenant disponibles, nous pouvons les installer.$ sudo apt install elasticsearch -y
Étape 6 : Configuration d’Elasticsearch
Pour configurer Elasticsearch, nous devons éditer son fichier de configuration principal.
1) Ouvrir l’editeur de texte pour le fichier de configuration du fichier $ sudo nano etc/elasticsearch/elasticsearch.yml
2) Modification à apporter dans le fichier elasticsearch.yml :
Champ Cluster: décommenter les lignes suivantes et donner un nom au cluster et à node :
#cluster.name
#node.name
Champ network: décommenter les lignes suivantes et ajouter l’ajouter l’adresse Ip de Elasticsearch ainsi que le port (9200)#network.host: 192.168.0.1
#http.port: 9200
Champ Discover: Décommenter la ligne suivante et ajouter l’adresse IP du serveur elastic search#discovery.seed_hosts: ["IP_Elasticsearch_serveur"]
3) Enregistrer et fermer le fichier.ctrl+S
pour sauvegarder le fichier.ctrl+X
pour fermer et quitter le fichier ouvert pour éditer.
Etape 6: Remettre à jour le système$ sudo systemctl deamon-reload
Etape 7: Activer le firewall pour le port 9200$ sudo ufw allow 5601/tcp
Etape 8: Démarrer Elasticsearch$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
Etape9: Vérifier que Elasticsearch est en marche sur le port 9200$ curl -X GET "ip_serveur_Elastic:9200"
Installation et configuration de Logstash:
Etape 1 : Installation de Logstah $ sudo apt install logstash -y
Etape 2 : Démarrer Logstash$ sudo systemctl start logstash
$ sudo systemctl enable logstash
Etape 3: Vérification de la mise en route de logstash$ sudo systemctl status logstash
Installation de kibana
Etape 1 : Installer Kibana$sudo apt install kibana -y
Etape 2 : Editer le fichier de configuration de kibana$sudo nano etc/kibana/kibana.yml
Etape 3 : Modifier ce fichier
1) Décommenter et modifier les lignes suivantes:#server.port : 5601
#server.host: "ip_server_kibana"#elasticsearch.hosts : ["http://ip_server_elasticsearch:9200"]
2) Enregistrer le fichier et fermerctrl+S
pour sauvegarder le fichier ctrl+x
pour quitter le fichier ouvert
Etape 3: Accepter le port 5601$sudo ufw allow 5601/tcp
Installation de Filebeat sur les serveurs pour les quels nous voulons récupérer les données:
Etape 1 : installer Filebeat$ sudo apt install filebeat -y
Etape 2 : Editer le fichier de configuration$ sudo nano etc/filebeat/filebeat.yml
Etape 3 : Modifier le fichier de configuration
Champ filebeat.inputs: Décommenter les lignes suivantes et indiquer les chemins des logs que l’on veut récupérer dans paths#filebeat.inputs
#type : log
#enabled : true
# paths :
exemple :
– /var/log/syslog
Champ Filebeat modules: décommenter les lignes suivantes#filebeat.config.modules :
path : ${path.config}/modules.d/*.yml
reload.enabled : false
Champ Elasticsearch template setting: décommenter les lignes suivantes#setup.template.Settings:
index.number_of_shards: 1
Champ kibana: décommenter les lignes suivantes#setup.kibana
host: "ip_serveur_kibana:5601"
Champ logstash output: décommenter les lignes#output.logstash :
host["ip_serveur_logstash: port_logstash"]
Fichier de configuration de Logstash:
Une fois que Filebeat est installé sur les serveurs sources, la fiche de configuration de logstash peut être configuré selon les besoins spécifiques.
Etape 1 : Ouvrir le fichier de configuration de Logstash
$ sudo nano /etc/logstash/logstash.yml
Etape 2 : Ecrire la configuration du fichier de Logstash
Partie 1: Input
input {
beats {
port => 5044
}
}
input : Définit les sources de données pour Logstash.
beats : Indique que Logstash va recevoir des données de Filebeat
port => 5044 : Le port sur lequel Logstash écoute pour les logs envoyés par Filebeat.
Partie 2: filter
filter {
# Ajoutez des filtres si nécessaire
}
La section filter dans la configuration de Logstash est utilisée pour transformer et enrichir les logs avant de les envoyer à leur destination finale, comme Elasticsearch. Cette transformation peut inclure des opérations telles que le parsing, la modification des données, l’ajout de nouveaux champs, et plus encore.
Partie 3: Output
output {
elasticsearch {
hosts => ["http://192.168.0.1:9200"]
index => "server-el1-logs-%{+YYYY.MM.dd}"
}
}
output: définit les destinations pour les logs traités par Logstash. Les données peuvent être envoyées à plusieurs sorties, comme Elasticsearch, fichiers, stdout, etc.
elasticsearch : Spécifie que les logs seront envoyés à Elasticsearch.
hosts : Définit l’adresse du nœud Elasticsearch auquel Logstash doit envoyer les logs.
index : Spécifie le nom de l’index Elasticsearch où les logs seront stockés.
Remarque: Dans la section output, il est possible d’ajouter plusieurs index afin de différencier les données des différentes sources en spécifiant par exemple leur hostname.
Commande SCP: copie d’un fichiers vers un serveur distant
La commande (SCP) est un outil qui permet de transférer des fichiers de manière sécurisée sur des serveurs distants. Elle permet de copier des fichiers de manière sécurisée entre des machines distantes. Elle fonctionne de la même manière que la commande cp mais utilise le protocole SSH (Secure Shell) pour sécuriser la transmission des données.
La commande:
scp -i <clé_ssh> <fichier_source> <utilisateur>@<adresse_ip_serveur>: <répertoire_destination_distant>
-i <clé_ssh> : Spécifie la clé privé SSH à utiliser pour l’authentification.
<fichier_source> : Chemin du fichier à transférer qui se trouve sur la machine locale.
<utilisateur> : Nom d’utilisateur sur le serveur distant.
<adresse_ip_serveur> : Adresse IP du serveur distant où le fichier sera copié.
<répertoire_dist> : Le chemin du répertoire sur le serveur distant où le fichier sera copié

Commande SFTP: copie d’un fichiers vers un serveur distant
SFTP (Secure File Transfer Protocol) est un protocole sécurisé pour le transfert de fichiers entre des systèmes distants. Il utilise le protocole SSH (Secure Shell) pour sécuriser la transmission des données, offrant ainsi une sécurité accrue par rapport aux protocoles de transfert de fichiers non sécurisés comme FTP. SFTP permet de transférer des fichiers, de gérer les répertoires et de réaliser diverses opérations de fichiers sur un serveur distant de manière sécurisée. Contrairement à SCP, SFTP offre des fonctionnalités supplémentaires telles que la possibilité de reprendre des transferts interrompus et de lister les contenus des répertoires distants.
La commande pour se connecter au serveur distant :
put $SHELL_SCRIPT /home/ubuntu/
- put : Commande SFTP pour envoyer un fichier depuis la machine locale vers le serveur.
- $SHELL_SCRIPT : Variable contenant le chemin du fichier script shell local à transférer.
- /home/ubuntu/ : Chemin distant sur le serveur où le fichier sera copié.
Automatisation d’installation de la pile ELK avec script shell
1) Vérification de l'existence d'un paquage:
existence_package(){
dpkg -s "$1" &> /dev/null
}
2)Installation d'un package:
installation_package(){
if ! existence_package "$1"; then
echo "En cours d'installation de $1..."
sudo apt install "$1" -y
if [ $? -ne 0 ]; then
echo "Erreur : Échec de l'installation de $1" >&2
exit 1
fi
else
echo "$1 est déjà installé"
fi
}