Comment installer Elasticsearch, Logstash et Kibana (Elastic Stack) sur CentOS 7

De Get Docs
Aller à :navigation, rechercher

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.

É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.