Comment installer Elasticsearch, Logstash et Kibana (Elastic Stack) sur CentOS 7
L'auteur a sélectionné Software in the Public Interest pour recevoir un don dans le cadre du programme Write for DOnations.
Introduction
La Suite Elastic — anciennement connue sous le nom de ELK Stack — est une collection de logiciels open source produite par Elastic qui vous permet de rechercher, d'analyser et de visualiser les journaux générés à partir de n'importe quelle source dans n'importe quel format, une pratique connue sous le nom de journalisation centralisée. La journalisation centralisée peut être très utile lorsque vous tentez d'identifier des problèmes avec vos serveurs ou vos applications, car elle vous permet de rechercher dans tous vos journaux en un seul endroit. Il est également utile car il vous permet d'identifier les problèmes qui s'étendent sur plusieurs serveurs en corrélant leurs journaux pendant une période spécifique.
La Suite Elastic comporte quatre composants principaux :
- Elasticsearch : un moteur de recherche distribué RESTful qui stocke toutes les données collectées.
- Logstash : le composant de traitement de données de la Suite Elastic qui envoie les données entrantes à Elasticsearch.
- Kibana : une interface Web pour rechercher et visualiser les journaux.
- Beats : expéditeurs de données légers et à usage unique qui peuvent envoyer des données de centaines ou de milliers de machines vers Logstash ou Elasticsearch.
Dans ce didacticiel, vous allez installer Elastic Stack sur un serveur CentOS 7. Vous apprendrez à installer tous les composants de la Suite Elastic, y compris Filebeat, un Beat utilisé pour transférer et centraliser les journaux et les fichiers, et à les configurer pour collecter et visualiser les journaux système. De plus, étant donné que Kibana n'est normalement disponible que sur le localhost
, vous utiliserez Nginx pour le proxy afin qu'il soit accessible via un navigateur Web. À la fin de ce didacticiel, vous aurez tous ces composants installés sur un seul serveur, appelé le serveur Elastic Stack.
Remarque : Lors de l'installation de la Suite Elastic, vous devez utiliser la même version sur l'ensemble de la Suite. Ce didacticiel utilise les dernières versions de chaque composant, qui sont, au moment de la rédaction de cet article, Elasticsearch 6.5.2, Kibana 6.5.2, Logstash 6.5.2 et Filebeat 6.5.2.
Conditions préalables
Pour terminer ce tutoriel, vous aurez besoin des éléments suivants :
- Un serveur CentOS 7 configuré en suivant Configuration initiale du serveur avec CentOS 7, y compris un utilisateur non root avec des privilèges sudo et un pare-feu. La quantité de CPU, de RAM et de stockage dont votre serveur Elastic Stack aura besoin dépend du volume de journaux que vous avez l'intention de collecter. Pour ce tutoriel, vous utiliserez un VPS avec les spécifications suivantes pour notre serveur Elastic Stack :
- Système d'exploitation : CentOS 7.5
- RAM : 4 Go
- Processeur : 2
- Java 8 — requis par Elasticsearch et Logstash — installé sur votre serveur. Notez que Java 9 n'est pas pris en charge. Pour l'installer, suivez la section "Installer OpenJDK 8 JRE" de notre guide sur l'installation de Java sur CentOS.
- Nginx installé sur votre serveur, que vous configurerez plus loin dans ce guide en tant que proxy inverse pour Kibana. Suivez notre guide sur Comment installer Nginx sur CentOS 7 pour le configurer.
De plus, étant donné que la Suite Elastic est utilisée pour accéder à des informations précieuses sur votre serveur auxquelles vous ne voudriez pas que des utilisateurs non autorisés accèdent, il est important que vous gardiez votre serveur sécurisé en installant un certificat TLS/SSL. Ceci est facultatif mais fortement encouragé. Étant donné que vous apporterez finalement des modifications à votre bloc de serveur Nginx au cours de ce guide, nous vous suggérons de mettre cette sécurité en place en complétant le guide Let's Encrypt on CentOS 7 immédiatement après la deuxième étape de ce didacticiel.
Si vous prévoyez de configurer Let's Encrypt sur votre serveur, vous aurez besoin des éléments suivants avant de le faire :
- Un nom de domaine complet (FQDN). Ce didacticiel utilisera
example.com
tout au long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom ou utiliser le bureau d'enregistrement de domaine de votre choix. - Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivre cette introduction à DigitalOcean DNS pour plus de détails sur la façon de les ajouter.
- Un enregistrement A avec
example.com
pointant vers l'adresse IP publique de votre serveur. - Un enregistrement A avec
www.example.com
pointant vers l'adresse IP publique de votre serveur.
- Un enregistrement A avec
Étape 1 - Installation et configuration d'Elasticsearch
Les composants Elastic Stack ne sont pas disponibles via le gestionnaire de packages par défaut, mais vous pouvez les installer avec yum
en ajoutant le référentiel de packages Elastic.
Tous les packages de la Suite Elastic sont signés avec la clé de signature Elasticsearch afin de protéger votre système contre l'usurpation de package. Les packages qui ont été authentifiés à l'aide de la clé seront considérés comme approuvés par votre gestionnaire de packages. Dans cette étape, vous allez importer la clé GPG publique Elasticsearch et ajouter le référentiel Elastic afin d'installer Elasticsearch.
Exécutez la commande suivante pour télécharger et installer la clé de signature publique Elasticsearch :
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ensuite, ajoutez le référentiel Elastic. Utilisez votre éditeur de texte préféré pour créer le fichier elasticsearch.repo
dans le répertoire /etc/yum.repos.d/
. Ici, nous allons utiliser l'éditeur de texte vi :
sudo vi /etc/yum.repos.d/elasticsearch.repo
Pour fournir à yum les informations dont il a besoin pour télécharger et installer les composants de la Suite Elastic, passez en mode insertion en appuyant sur i
et ajoutez les lignes suivantes au fichier.
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
Ici, vous avez inclus le name
lisible par l'homme du référentiel, le baseurl
du répertoire de données du référentiel et le gpgkey
requis pour vérifier les packages Elastic.
Lorsque vous avez terminé, appuyez sur ESC
pour quitter le mode d'insertion, puis sur :wq
et ENTER
pour enregistrer et quitter le fichier. Pour en savoir plus sur l'éditeur de texte vi et son successeur vim, consultez notre tutoriel Installation et utilisation de l'éditeur de texte Vim sur un serveur cloud.
Avec le dépôt ajouté, vous pouvez maintenant installer la Suite Elastic. Selon la documentation officielle, vous devez installer Elasticsearch avant les autres composants. L'installation dans cet ordre garantit que les composants dont chaque produit dépend sont correctement en place.
Installez Elasticsearch avec la commande suivante :
sudo yum install elasticsearch
Une fois l'installation d'Elasticsearch terminée, ouvrez son fichier de configuration principal, elasticsearch.yml
, dans votre éditeur :
sudo vi /etc/elasticsearch/elasticsearch.yml
Remarque : Le fichier de configuration d'Elasticsearch est au format YAML, ce qui signifie que l'indentation est très importante ! Assurez-vous de ne pas ajouter d'espaces supplémentaires lorsque vous modifiez ce fichier.
Elasticsearch écoute le trafic de partout sur le port 9200
. Vous souhaiterez restreindre l'accès extérieur à votre instance Elasticsearch pour empêcher les tiers de lire vos données ou d'arrêter votre cluster Elasticsearch via l'API REST. Trouvez la ligne qui spécifie network.host
, décommentez-la et remplacez sa valeur par localhost
pour qu'elle ressemble à ceci :
/etc/elasticsearch/elasticsearch.yml
. . . network.host: localhost . . .
Enregistrez et fermez elasticsearch.yml
. Ensuite, démarrez le service Elasticsearch avec systemctl
:
sudo systemctl start elasticsearch
Ensuite, exécutez la commande suivante pour permettre à Elasticsearch de démarrer à chaque démarrage de votre serveur :
sudo systemctl enable elasticsearch
Vous pouvez tester si votre service Elasticsearch est en cours d'exécution en envoyant une requête HTTP :
curl -X GET "localhost:9200"
Vous verrez une réponse montrant des informations de base sur votre nœud local, semblable à ceci :
Output{ "name" : "8oSCBFJ", "cluster_name" : "elasticsearch", "cluster_uuid" : "1Nf9ZymBQaOWKpMRBfisog", "version" : { "number" : "6.5.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "9434bed", "build_date" : "2018-11-29T23:58:20.891072Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Maintenant qu'Elasticsearch est opérationnel, installons Kibana, le prochain composant de la Suite Elastic.
Étape 2 - Installation et configuration du tableau de bord Kibana
Selon l'ordre d'installation dans la documentation officielle, vous devez installer Kibana comme composant suivant après Elasticsearch. Après avoir configuré Kibana, nous pourrons utiliser son interface pour rechercher et visualiser les données stockées par Elasticsearch.
Étant donné que vous avez déjà ajouté le référentiel Elastic à l'étape précédente, vous pouvez simplement installer les composants restants de la Suite Elastic à l'aide de yum
:
sudo yum install kibana
Ensuite, activez et démarrez le service Kibana :
sudo systemctl enable kibana sudo systemctl start kibana
Étant donné que Kibana est configuré pour n'écouter que sur localhost
, nous devons configurer un proxy inverse pour autoriser l'accès externe à celui-ci. Nous utiliserons à cet effet Nginx, qui devrait déjà être installé sur votre serveur.
Tout d'abord, utilisez la commande openssl
pour créer un utilisateur administratif Kibana que vous utiliserez pour accéder à l'interface Web Kibana. A titre d'exemple, nous nommerons ce compte kibanaadmin
, mais pour plus de sécurité nous vous recommandons de choisir un nom non standard pour votre utilisateur qui serait difficile à deviner.
La commande suivante créera l'utilisateur et le mot de passe administratifs de Kibana et les stockera dans le fichier htpasswd.users
. Vous allez configurer Nginx pour exiger ce nom d'utilisateur et ce mot de passe et lire ce fichier momentanément :
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
Entrez et confirmez un mot de passe à l'invite. N'oubliez pas ou notez cet identifiant, car vous en aurez besoin pour accéder à l'interface Web de Kibana.
Ensuite, nous allons créer un fichier de bloc de serveur Nginx. À titre d'exemple, nous désignerons ce fichier par example.com.conf
, bien que vous trouviez peut-être utile de donner au vôtre un nom plus descriptif. Par exemple, si vous avez configuré un nom de domaine complet et des enregistrements DNS pour ce serveur, vous pouvez nommer ce fichier d'après votre nom de domaine complet :
sudo vi /etc/nginx/conf.d/example.com.conf
Ajoutez le bloc de code suivant dans le fichier, en veillant à mettre à jour example.com
et www.example.com
pour qu'ils correspondent au FQDN ou à l'adresse IP publique de votre serveur. Ce code configure Nginx pour diriger le trafic HTTP de votre serveur vers l'application Kibana, qui écoute sur localhost:5601
. De plus, il configure Nginx pour lire le fichier htpasswd.users
et exiger une authentification de base.
Notez que si vous avez suivi le tutoriel Nginx prérequis jusqu'à la fin, vous avez peut-être déjà créé ce fichier et l'avez rempli avec du contenu. Dans ce cas, supprimez tout le contenu existant dans le fichier avant d'ajouter ce qui suit :
/etc/nginx/conf.d/<^>exemple.com<^>.conf
server { listen 80; server_name example.com www.example.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.users; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Lorsque vous avez terminé, enregistrez et fermez le fichier.
Vérifiez ensuite la configuration pour les erreurs de syntaxe :
sudo nginx -t
Si des erreurs sont signalées dans votre sortie, revenez en arrière et vérifiez que le contenu que vous avez placé dans votre fichier de configuration a été ajouté correctement. Une fois que vous voyez syntax is ok
dans la sortie, continuez et redémarrez le service Nginx :
sudo systemctl restart nginx
Par défaut, la politique de sécurité SELinux est configurée pour être appliquée. Exécutez la commande suivante pour autoriser Nginx à accéder au service proxy :
sudo setsebool httpd_can_network_connect 1 -P
Vous pouvez en savoir plus sur SELinux dans le tutoriel An Introduction to SELinux on CentOS 7.
Kibana est désormais accessible via votre FQDN ou l'adresse IP publique de votre serveur Elastic Stack. Vous pouvez vérifier la page d'état du serveur Kibana en accédant à l'adresse suivante et en saisissant vos identifiants de connexion lorsque vous y êtes invité :
http://your_server_ip/status
Cette page d'état affiche des informations sur l'utilisation des ressources du serveur et répertorie les plugins installés.
Remarque : Comme indiqué dans la section Prérequis, il est recommandé d'activer SSL/TLS sur votre serveur. Vous pouvez suivre ce tutoriel maintenant pour obtenir un certificat SSL gratuit pour Nginx sur CentOS 7. Après avoir obtenu vos certificats SSL/TLS, vous pouvez revenir et terminer ce tutoriel.
Maintenant que le tableau de bord Kibana est configuré, installons le composant suivant : Logstash.
Étape 3 - Installation et configuration de Logstash
Bien qu'il soit possible pour Beats d'envoyer des données directement à la base de données Elasticsearch, nous vous recommandons d'utiliser Logstash pour traiter les données en premier. Cela vous permettra de collecter des données provenant de différentes sources, de les transformer dans un format commun et de les exporter vers une autre base de données.
Installez Logstash avec cette commande :
sudo yum install logstash
Après avoir installé Logstash, vous pouvez passer à sa configuration. Les fichiers de configuration de Logstash sont écrits au format JSON et résident dans le répertoire /etc/logstash/conf.d
. Lorsque vous le configurez, il est utile de considérer Logstash comme un pipeline qui reçoit des données à une extrémité, les traite d'une manière ou d'une autre et les envoie à sa destination (dans ce cas, la destination étant Elasticsearch). Un pipeline Logstash a deux éléments obligatoires, input
et output
, et un élément facultatif, filter
. Les plugins d'entrée consomment les données d'une source, les plugins de filtrage traitent les données et les plugins de sortie écrivent les données vers une destination.
Créez un fichier de configuration appelé 02-beats-input.conf
dans lequel vous configurerez votre entrée Filebeat :
sudo vi /etc/logstash/conf.d/02-beats-input.conf
Insérez la configuration input
suivante. Ceci spécifie une entrée beats
qui écoutera sur le port TCP 5044
.
/etc/logstash/conf.d/02-beats-input.conf
input { beats { port => 5044 } }
Enregistrez et fermez le fichier. Ensuite, créez un fichier de configuration appelé 10-syslog-filter.conf
, qui ajoutera un filtre pour les journaux système, également connu sous le nom de syslogs :
sudo vi /etc/logstash/conf.d/10-syslog-filter.conf
Insérez la configuration de filtre syslog suivante. Cet exemple de configuration des journaux système est tiré de la documentation officielle Elastic. Ce filtre est utilisé pour analyser les journaux système entrants afin de les rendre structurés et utilisables par les tableaux de bord Kibana prédéfinis :
/etc/logstash/conf.d/10-syslog-filter.conf
filter { if [fileset][module] == "system" { if [fileset][name] == "auth" { grok { match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$", "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] } pattern_definitions => { "GREEDYMULTILINE"=> "(.|\n)*" } remove_field => "message" } date { match => [ "[system][auth][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } geoip { source => "[system][auth][ssh][ip]" target => "[system][auth][ssh][geoip]" } } else if [fileset][name] == "syslog" { grok { match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] } pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" } remove_field => "message" } date { match => [ "[system][syslog][timestamp]", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } }
Enregistrez et fermez le fichier lorsque vous avez terminé.
Enfin, créez un fichier de configuration nommé 30-elasticsearch-output.conf
:
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
Insérez la configuration output
suivante. Cette sortie configure Logstash pour stocker les données Beats dans Elasticsearch, qui s'exécute sur localhost:9200
, dans un index nommé d'après le Beat utilisé. Le Beat utilisé dans ce tutoriel est Filebeat :
/etc/logstash/conf.d/30-elasticsearch-output.conf
output { elasticsearch { hosts => ["localhost:9200"] manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" } }
Enregistrez et fermez le fichier.
Si vous souhaitez ajouter des filtres pour d'autres applications qui utilisent l'entrée Filebeat, assurez-vous de nommer les fichiers afin qu'ils soient triés entre la configuration d'entrée et de sortie, ce qui signifie que les noms de fichiers doivent commencer par un nombre à deux chiffres entre [X244X ] et 30
.
Testez votre configuration Logstash avec cette commande :
sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
S'il n'y a pas d'erreurs de syntaxe, votre sortie affichera Configruation OK
après quelques secondes. Si vous ne voyez pas cela dans votre sortie, recherchez les erreurs qui apparaissent dans votre sortie et mettez à jour votre configuration pour les corriger.
Si votre test de configuration réussit, démarrez et activez Logstash pour appliquer les modifications de configuration :
sudo systemctl start logstash sudo systemctl enable logstash
Maintenant que Logstash fonctionne correctement et est entièrement configuré, installons Filebeat.
Étape 4 - Installation et configuration de Filebeat
La Suite Elastic utilise plusieurs expéditeurs de données légers appelés Beats pour collecter des données à partir de diverses sources et les transporter vers Logstash ou Elasticsearch. Voici les Beats actuellement disponibles chez Elastic :
- Filebeat : collecte et expédie les fichiers journaux.
- Metricbeat : collecte les métriques de vos systèmes et services.
- Packetbeat : collecte et analyse les données du réseau.
- Winlogbeat : collecte les journaux d'événements Windows.
- Auditbeat : collecte les données du cadre d'audit Linux et surveille l'intégrité des fichiers.
- Heartbeat : surveille la disponibilité des services avec une vérification active.
Dans ce didacticiel, nous utiliserons Filebeat pour transférer les journaux locaux vers notre Elastic Stack.
Installez Filebeat en utilisant yum
:
sudo yum install filebeat
Ensuite, configurez Filebeat pour se connecter à Logstash. Ici, nous allons modifier l'exemple de fichier de configuration fourni avec Filebeat.
Ouvrez le fichier de configuration Filebeat :
sudo vi /etc/filebeat/filebeat.yml
Remarque : Comme pour Elasticsearch, le fichier de configuration de Filebeat est au format YAML. Cela signifie qu'une indentation correcte est cruciale, alors assurez-vous d'utiliser le même nombre d'espaces que ceux indiqués dans ces instructions.
Filebeat prend en charge de nombreuses sorties, mais vous n'enverrez généralement que des événements directement à Elasticsearch ou à Logstash pour un traitement supplémentaire. Dans ce didacticiel, nous utiliserons Logstash pour effectuer un traitement supplémentaire sur les données collectées par Filebeat. Filebeat n'aura pas besoin d'envoyer de données directement à Elasticsearch, alors désactivons cette sortie. Pour ce faire, recherchez la section output.elasticsearch
et commentez les lignes suivantes en les faisant précéder d'un #
:
/etc/filebeat/filebeat.yml
... #output.elasticsearch: # Array of hosts to connect to. #hosts: ["localhost:9200"] ...
Ensuite, configurez la section output.logstash
. Décommentez les lignes output.logstash:
et hosts: ["localhost:5044"]
en supprimant #
. Cela configurera Filebeat pour qu'il se connecte à Logstash sur votre serveur Elastic Stack au port 5044
, le port pour lequel nous avons spécifié une entrée Logstash précédemment :
/etc/filebeat/filebeat.yml
output.logstash: # The Logstash hosts hosts: ["localhost:5044"]
Enregistrez et fermez le fichier.
Vous pouvez désormais étendre les fonctionnalités de Filebeat avec les modules Filebeat. Dans ce didacticiel, vous utiliserez le module system, qui collecte et analyse les journaux créés par le service de journalisation système des distributions Linux courantes.
Activons-le :
sudo filebeat modules enable system
Vous pouvez voir une liste des modules activés et désactivés en exécutant :
sudo filebeat modules list
Vous verrez une liste semblable à la suivante :
OutputEnabled: system Disabled: apache2 auditd elasticsearch haproxy icinga iis kafka kibana logstash mongodb mysql nginx osquery postgresql redis suricata traefik
Par défaut, Filebeat est configuré pour utiliser des chemins par défaut pour les journaux syslog et d'autorisation. Dans le cas de ce tutoriel, vous n'avez rien à changer dans la configuration. Vous pouvez voir les paramètres du module dans le fichier de configuration /etc/filebeat/modules.d/system.yml
.
Ensuite, chargez le modèle d'index dans Elasticsearch. Un Elasticsearch index est une collection de documents qui ont des caractéristiques similaires. Les index sont identifiés par un nom, qui est utilisé pour faire référence à l'index lors de l'exécution de diverses opérations à l'intérieur de celui-ci. Le modèle d'index sera automatiquement appliqué lors de la création d'un nouvel index.
Pour charger le modèle, utilisez la commande suivante :
sudo filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
Cela donnera la sortie suivante :
OutputLoaded index template
Filebeat est livré avec des exemples de tableaux de bord Kibana qui vous permettent de visualiser les données Filebeat dans Kibana. Avant de pouvoir utiliser les tableaux de bord, vous devez créer le modèle d'index et charger les tableaux de bord dans Kibana.
Lors du chargement des tableaux de bord, Filebeat se connecte à Elasticsearch pour vérifier les informations de version. Pour charger les tableaux de bord lorsque Logstash est activé, vous devez désactiver manuellement la sortie Logstash et activer la sortie Elasticsearch :
sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
Vous verrez une sortie qui ressemble à ceci :
Output. . . 2018-12-05T21:23:33.806Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:23:33.811Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:23:33.815Z INFO template/load.go:129 Template already exists and will not be overwritten. Loaded index template Loading dashboards (Kibana must be running and reachable) 2018-12-05T21:23:33.816Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:23:33.819Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:23:33.819Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-12-05T21:24:03.981Z INFO instance/beat.go:717 Kibana dashboards successfully loaded. Loaded dashboards 2018-12-05T21:24:03.982Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200 2018-12-05T21:24:03.984Z INFO elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.2 2018-12-05T21:24:03.984Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2018-12-05T21:24:04.043Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled 2018-12-05T21:24:04.080Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled Loaded machine learning job configurations
Vous pouvez maintenant démarrer et activer Filebeat :
sudo systemctl start filebeat sudo systemctl enable filebeat
Si vous avez correctement configuré votre Elastic Stack, Filebeat commencera à envoyer vos journaux syslog et d'autorisation à Logstash, qui chargera ensuite ces données dans Elasticsearch.
Pour vérifier qu'Elasticsearch reçoit bien ces données, interrogez l'index Filebeat avec cette commande :
curl -X GET 'http://localhost:9200/filebeat-*/_search?pretty'
Vous verrez une sortie qui ressemble à ceci :
Output{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 3, "successful" : 3, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3225, "max_score" : 1.0, "hits" : [ { "_index" : "filebeat-6.5.2-2018.12.05", "_type" : "doc", "_id" : "vf5GgGcB_g3p-PRo_QOw", "_score" : 1.0, "_source" : { "@timestamp" : "2018-12-05T19:00:34.000Z", "source" : "/var/log/secure", "meta" : { "cloud" : { . . .
Si votre sortie affiche 0 accès au total, Elasticsearch ne charge aucun journal sous l'index que vous avez recherché et vous devrez revoir votre configuration pour les erreurs. Si vous avez reçu le résultat attendu, passez à l'étape suivante, dans laquelle vous vous familiariserez avec certains des tableaux de bord de Kibana.
Étape 5 - Explorer les tableaux de bord Kibana
Regardons Kibana, l'interface Web que nous avons installée plus tôt.
Dans un navigateur Web, accédez au FQDN ou à l'adresse IP publique de votre serveur Elastic Stack. Après avoir entré les identifiants de connexion que vous avez définis à l'étape 2, vous verrez la page d'accueil de Kibana :
Cliquez sur le lien Découvrir dans la barre de navigation de gauche. Sur la page Discover, sélectionnez le modèle d'index prédéfini filebeat-* pour afficher les données Filebeat. Par défaut, cela vous montrera toutes les données du journal au cours des 15 dernières minutes. Vous verrez un histogramme avec les événements du journal et quelques messages du journal ci-dessous :
Ici, vous pouvez rechercher et parcourir vos journaux et également personnaliser votre tableau de bord. À ce stade, cependant, il n'y aura pas grand-chose car vous ne collectez que les journaux système de votre serveur Elastic Stack.
Utilisez le panneau de gauche pour accéder à la page Dashboard et recherchez les tableaux de bord Filebeat System. Une fois là-bas, vous pouvez rechercher les exemples de tableaux de bord fournis avec le module system
de Filebeat.
Par exemple, vous pouvez afficher des statistiques détaillées basées sur vos messages syslog :
Vous pouvez également voir quels utilisateurs ont utilisé la commande sudo
et quand :
Kibana a de nombreuses autres fonctionnalités, telles que la représentation graphique et le filtrage, alors n'hésitez pas à explorer.
Conclusion
Dans ce didacticiel, vous avez installé et configuré la Suite Elastic pour collecter et analyser les journaux système. N'oubliez pas que vous pouvez envoyer à peu près n'importe quel type de journal ou de données indexées à Logstash en utilisant Beats, mais les données deviennent encore plus utiles si elles sont analysées et structurées avec un filtre Logstash, car cela transforme les données en un format cohérent qui peut être lu facilement par Elasticsearch.