Recherche de site Web

Comment installer Elasticsearch, Logstash et Kibana (ELK Stack) sur CentOS/RHEL 7


Si vous êtes une personne qui est, ou a été dans le passé, chargée d'inspecter et d'analyser les journaux système sous Linux, vous savez à quel point cette tâche peut devenir un cauchemar si plusieurs services sont surveillés simultanément.

Autrefois, cette tâche devait être effectuée principalement manuellement, chaque type de journal étant traité séparément. Heureusement, la combinaison de Elasticsearch, Logstash et Kibana côté serveur, ainsi que de Filebeat côté client. côté, fait que cette tâche autrefois difficile ressemble aujourd’hui à une promenade dans le parc.

Les trois premiers composants forment ce que l'on appelle une pile ELK, dont l'objectif principal est de collecter les journaux de plusieurs serveurs en même temps (également appelé journalisation centralisée).

Lecture suggérée : 4 bons outils de surveillance et de gestion des journaux Open Source pour Linux

Une interface Web Java intégrée vous permet d'inspecter rapidement les journaux en un coup d'œil pour faciliter la comparaison et le dépannage. Ces journaux clients sont envoyés à un serveur central par Filebeat, qui peut être décrit comme un agent d'envoi de journaux.

Voyons comment toutes ces pièces s’articulent. Notre environnement de test sera composé des machines suivantes :

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Veuillez noter que les valeurs de RAM fournies ici ne sont pas des prérequis stricts, mais des valeurs recommandées pour une implémentation réussie de la pile ELK sur le serveur central. Moins de RAM sur les clients ne fera pas beaucoup de différence, voire pas du tout.

Installation d'ELK Stack sur le serveur

Commençons par installer la pile ELK sur le serveur, avec une brève explication de ce que fait chaque composant :

  1. Elasticsearch stocke les journaux envoyés par les clients.
  2. Logstash traite ces journaux.
  3. Kibana fournit l'interface Web qui nous aidera à inspecter et analyser les journaux.

Installez les packages suivants sur le serveur central. Tout d’abord, nous allons installer le Java JDK version 8 (mise à jour 102, la dernière en date au moment d’écrire ces lignes), qui est une dépendance des composants ELK.

Vous souhaiterez peut-être vérifier d’abord sur la page de téléchargement Java ici pour voir si une mise à jour plus récente est disponible.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

Il est temps de vérifier si l'installation s'est terminée avec succès :

java -version

Pour installer les dernières versions de Elasticsearch, Logstash et Kibana, nous devrons créer manuellement des référentiels pour yum comme suit:

Activer le référentiel Elasticsearch

1. Importez la clé GPG publique Elasticsearch dans le gestionnaire de packages RPM :

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Insérez les lignes suivantes dans le fichier de configuration du référentiel elasticsearch.repo :

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Installez le package Elasticsearch.

yum install elasticsearch

Une fois l'installation terminée, vous serez invité à démarrer et à activer elasticsearch :

4. Démarrez et activez le service.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Autorisez le trafic via le port TCP 9200 dans votre pare-feu :

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Vérifiez si Elasticsearch répond aux requêtes simples via HTTP :

curl -X GET http://localhost:9200

Le résultat de la commande ci-dessus devrait être similaire à :

Assurez-vous de suivre les étapes ci-dessus, puis passez à Logstash. Étant donné que Logstash et Kibana partagent la clé Elasticsearch GPG, il n'est pas nécessaire de la réimporter avant d'installer les packages.

Lecture suggérée : Gérer les journaux système (configurer, faire pivoter et importer dans la base de données) dans CentOS 7

Activer le référentiel Logstash

7. Insérez les lignes suivantes dans le fichier de configuration du référentiel logstash.repo :

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Installez le package Logstash :

yum install logstash

9. Ajoutez un certificat SSL basé sur l'adresse IP du serveur ELK sur la ligne suivante sous la section [ v3_ca ] dans /etc/pki/tls/openssl.cnf :

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Générez un certificat auto-signé valable 365 jours :

cd /etc/pki/tls
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

11. Configurez les fichiers d'entrée, de sortie et de filtrage Logstash :

Input : créez /etc/logstash/conf.d/input.conf et insérez-y les lignes suivantes. Ceci est nécessaire pour que Logstash « apprenne » comment traiter les battements provenant des clients. Assurez-vous que le chemin d'accès au certificat et à la clé correspond aux bons chemins, comme indiqué à l'étape précédente :

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

Fichier de sortie (/etc/logstash/conf.d/output.conf) :


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

Fichier de filtre (/etc/logstash/conf.d/filter.conf). Nous enregistrerons les messages syslog pour plus de simplicité :


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Vérifiez les fichiers de configuration Logstash.

service logstash configtest

13. Démarrez et activez Logstash :

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Configurez le pare-feu pour permettre à Logstash d'obtenir les journaux des clients (port TCP 5044) :

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Activer le référentiel Kibana

14. Insérez les lignes suivantes dans le fichier de configuration du référentiel kibana.repo :

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Installez le package Kibana :

yum install kibana

16. Démarrez et activez Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Assurez-vous que vous pouvez accéder à l'interface Web de Kibana depuis un autre ordinateur (autoriser le trafic sur le port TCP 5601) :

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Lancez Kibana (http://192.168.0.29:5601) pour vérifier que vous pouvez accéder à l'interface Web :

Nous reviendrons ici après avoir installé et configuré Filebeat sur les clients.

Lecture suggérée : Surveillez les journaux du serveur en temps réel avec l'outil « Log.io » sous Linux

Installer Filebeat sur les serveurs clients

Nous allons vous montrer comment procéder pour le Client n°1 (répétez ensuite pour le Client n°2, en changeant les chemins si cela s'applique à votre distribution).

1. Copiez le certificat SSL du serveur vers les clients :

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Importez la clé GPG publique Elasticsearch dans le gestionnaire de packages RPM :

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Créez un référentiel pour Filebeat (/etc/yum.repos.d/filebeat.repo) dans CentOS distributions basées :

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Configurez la source pour installer Filebeat sur Debian et ses dérivés :

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Installez le package Filebeat :

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Démarrez et activez Filebeat :

systemctl start filebeat
systemctl enable filebeat

Configurer Filebeat

Un mot d'avertissement ici. La configuration Filebeat est stockée dans un fichier YAML, qui nécessite une indentation stricte. Soyez prudent lorsque vous modifiez /etc/filebeat/filebeat.yml comme suit :

  1. Sous chemins, indiquez quels fichiers journaux doivent être « expédiés » au serveur ELK.
  2. Sous prospecteurs :
input_type: log
document_type: syslog
  1. Sous sortie :

    1. Décommentez la ligne qui commence par logstash.
    2. Indiquez l'adresse IP de votre serveur ELK et le port sur lequel Logstash écoute dans les hôtes.
    3. Assurez-vous que le chemin d'accès au certificat pointe vers le fichier réel que vous avez créé à l'Étape I (section Logstash) ci-dessus.

Les étapes ci-dessus sont illustrées dans l'image suivante :

Enregistrez les modifications, puis redémarrez Filebeat sur les clients :

systemctl restart filebeat

Une fois que nous avons terminé les étapes ci-dessus sur les clients, n'hésitez pas à continuer.

Test de Filebeat

Afin de vérifier que les journaux des clients peuvent être envoyés et reçus avec succès, exécutez la commande suivante sur le serveur ELK :

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Le résultat doit être similaire à (remarquez comment les messages de /var/log/messages et /var/log/secure sont reçus de client1 et client2) :

Sinon, vérifiez le fichier de configuration Filebeat pour détecter les erreurs.

journalctl -xe

après avoir tenté de redémarrer, Filebeat vous indiquera la ou les lignes incriminées.

Tester Kibana

Après avoir vérifié que les journaux sont expédiés par les clients et reçus avec succès sur le serveur. La première chose que nous devrons faire dans Kibana est de configurer un modèle d'index et de le définir par défaut.

Vous pouvez décrire un index comme une base de données complète dans un contexte de base de données relationnelle. Nous utiliserons filebeat-* (ou vous pouvez utiliser des critères de recherche plus précis comme expliqué dans la documentation officielle).

Saisissez filebeat-* dans le Nom de l'index ou le champ de modèle, puis cliquez sur Créer :

Veuillez noter que vous serez autorisé à saisir des critères de recherche plus précis ultérieurement. Ensuite, cliquez sur l'étoile à l'intérieur du rectangle vert pour la configurer comme modèle d'index par défaut :

Enfin, dans le menu Découvrir vous trouverez plusieurs champs à ajouter au rapport de visualisation du journal. Passez simplement la souris dessus et cliquez sur Ajouter :

Les résultats seront affichés dans la zone centrale de l'écran, comme indiqué ci-dessus. N'hésitez pas à jouer (ajouter et supprimer des champs du rapport de journal) pour vous familiariser avec Kibana.

Par défaut, Kibana affichera les enregistrements qui ont été traités au cours des 15 dernières minutes (voir coin supérieur droit), mais vous pouvez modifier ce comportement en sélectionnant une autre période :

Résumé

Dans cet article, nous avons expliqué comment configurer une pile ELK pour collecter les journaux système envoyés par deux clients, une machine CentOS 7 et une machine Debian 8.

Vous pouvez désormais vous référer à la documentation officielle d'Elasticsearch et trouver plus de détails sur la façon d'utiliser cette configuration pour inspecter et analyser vos journaux plus efficacement.

Si vous avez des questions, n’hésitez pas à les poser. Nous avons hâte d'avoir de tes nouvelles.