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 programmeWrite for DOnations.

introduction

The Elastic Stack - anciennement connu sous le nom deELK Stack - est une collection de logiciels open source produits parElastic 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 connu sous le nom decentralized logging. La journalisation centralisée peut s'avérer très utile lorsque vous tentez d'identifier des problèmes avec vos serveurs ou vos applications, car elle vous permet d'effectuer une recherche dans tous vos journaux à un seul endroit. Il est également utile car il vous permet d’identifier les problèmes qui touchent plusieurs serveurs en corrélant leurs journaux au cours d’une période donnée.

La pile élastique a quatre composants principaux:

  • Elasticsearch: un moteur de recherche distribuéRESTful qui stocke toutes les données collectées.

  • Logstash: le composant de traitement des données d'Elastic Stack qui envoie les données entrantes à Elasticsearch.

  • Kibana: une interface web pour rechercher et visualiser les logs.

  • Beats: expéditeurs de données légers et à usage unique qui peuvent envoyer des données de centaines ou de milliers de machines à Logstash ou Elasticsearch.

Dans ce tutoriel, vous installerez lesElastic Stack sur un serveur CentOS 7. Vous apprendrez à installer tous les composants d'Elastic Stack - y comprisFilebeat, 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, comme Kibana n'est normalement disponible que sur leslocalhost, vous utiliserezNginx 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éElastic Stack server.

[.note] #Note: lors de l'installation d'Elastic Stack, vous devez utiliser la même version sur toute la pile. Ce didacticiel utilise les dernières versions de chaque composant, qui sont, au moment d'écrire ces lignes, Elasticsearch 6.5.2, Kibana 6.5.2, Logstash 6.5.2 et Filebeat 6.5.2.
#

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin des éléments suivants:

  • Un serveur CentOS 7 configuré en suivantInitial Server Setup with CentOS 7, y compris un utilisateur non root avec des privilèges sudo et unfirewall. La quantité de CPU, de RAM et de stockage requise par votre serveur Elastic Stack dépend du volume de journaux que vous souhaitez collecter. Pour ce tutoriel, vous utiliserez un SMV avec les spécifications suivantes pour notre serveur Elastic Stack:

    • OS: CentOS 7.5

    • RAM: 4 Go

    • CPU: 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“Install OpenJDK 8 JRE” de notre guide sur la façon d'installer Java sur CentOS.

  • Nginx installé sur votre serveur, que vous allez configurer plus tard dans ce guide en tant que proxy inverse pour Kibana. Suivez notre guide surHow To Install Nginx on CentOS 7 pour configurer cela.

De plus, comme Elastic Stack est utilisé pour accéder à des informations importantes sur votre serveur auxquelles vous ne voudriez pas que des utilisateurs non autorisés aient accès, il est important de protéger votre serveur en installant un certificat TLS / SSL. Ceci est facultatif maisstrongly encouraged. É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 guideLet’s Encrypt on CentOS 7 immédiatement après la deuxième étape de ce didacticiel.

Si vous envisagez de configurer Let’s Encrypt sur votre serveur, vous devez disposer des éléments suivants avant de procéder:

  • Un nom de domaine complet (FQDN). Ce didacticiel utiliseraexample.com partout. Vous pouvez acheter un nom de domaine surNamecheap, en obtenir un gratuitement surFreenom ou utiliser le registraire de domaine de votre choix.

  • Les deux enregistrements DNS suivants sont configurés pour votre serveur. Vous pouvez suivrethis introduction to DigitalOcean DNS pour savoir comment les ajouter.

    • Un enregistrement A avecexample.com pointant vers l'adresse IP publique de votre serveur.

    • Un enregistrement A avecwww.example.com pointant vers l'adresse IP publique de votre serveur.

[[step-1 -—- Installing-and-Configuring-elasticsearch]] == É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 avecyum en ajoutant le référentiel de packages d'Elastic.

Tous les packages Elastic Stack sont signés avec la clé de signature Elasticsearch afin de protéger votre système contre l’usurpation de package. Les paquets qui ont été authentifiés à l'aide de la clé seront considérés comme approuvés par votre gestionnaire de paquets. 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 fichierelasticsearch.repo dans le répertoire/etc/yum.repos.d/. Ici, nous allons utiliser l'éditeur de texte devi:

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 d'Elastic Stack, entrez en mode insertion en appuyant suri 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

Vous avez inclus ici lesname lisibles par l'homme du référentiel, lesbaseurl du répertoire de données du référentiel et lesgpgkey nécessaires pour vérifier les packages Elastic.

Lorsque vous avez terminé, appuyez surESC pour quitter le mode insertion, puis sur:wq etENTER pour enregistrer et quitter le fichier. Pour en savoir plus sur l'éditeur de texte vi et son successeurvim, consultez notre tutorielInstalling and Using the Vim Text Editor on a Cloud Server.

Avec le repo ajouté, vous pouvez maintenant installer Elastic Stack. Selon lesofficial documentation, vous devez installer Elasticsearch avant les autres composants. L'installation dans cet ordre garantit que les composants dont dépend chaque produit sont correctement installés.

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

[.note] #Note: 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 port9200. Vous voudrez limiter l'accès externe à votre instance Elasticsearch afin d'empêcher les personnes extérieures de lire vos données ou d'arrêter votre cluster Elasticsearch via l'API REST. Trouvez la ligne qui spécifienetwork.host, décommentez-la et remplacez sa valeur parlocalhost pour qu'elle ressemble à ceci:

/etc/elasticsearch/elasticsearch.yml

. . .
network.host: localhost
. . .

Enregistrez et fermezelasticsearch.yml. Ensuite, démarrez le service Elasticsearch avecsystemctl:

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 contenant 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 que Elasticsearch est opérationnel, installons Kibana, le prochain composant d’Elastic Stack.

[[step-2 -—- installation-and-configuring-the-kibana-dashboard]] == Étape 2 - Installation et configuration du tableau de bord Kibana

Selon l'ordre d'installation dans lesofficial documentation, 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 pile Elastic à l'aide deyum:

sudo yum install kibana

Puis activez et démarrez le service Kibana:

sudo systemctl enable kibana
sudo systemctl start kibana

Comme Kibana est configuré pour n'écouter que surlocalhost, nous devons configurer unreverse proxy 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 commandeopenssl pour créer un utilisateur administratif Kibana que vous utiliserez pour accéder à l’interface Web de Kibana. À titre d'exemple, nous nommerons ce comptekibanaadmin, mais pour assurer une plus grande 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 Kibana, et les stockera dans le fichierhtpasswd.users. Vous allez configurer Nginx pour qu'il requière 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. Rappelez-vous ou prenez note de cette connexion, car vous en aurez besoin pour accéder à l'interface Web de Kibana.

Ensuite, nous allons créer un fichier bloc de serveur Nginx. À titre d'exemple, nous appellerons ce fichierexample.com.conf, bien que vous puissiez trouver utile de donner au vôtre un nom plus descriptif. Par exemple, si vous avez un nom de domaine complet et des enregistrements DNS configurés 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 à jourexample.com etwww.example.com pour qu'ils correspondent au nom de domaine complet 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 surlocalhost:5601. De plus, il configure Nginx pour lire le fichierhtpasswd.users et exiger une authentification de base.

Notez que si vous avez suivi lesprerequisite Nginx tutorial 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 les éléments suivants:

example.com.conf’>/etc/nginx/conf.d/example.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.

Ensuite, vérifiez 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 voyezsyntax is ok dans la sortie, continuez et redémarrez le service Nginx:

sudo systemctl restart nginx

Par défaut, la stratégie de sécurité de SELinux est définie pour être appliquée. Exécutez la commande suivante pour autoriser Nginx à accéder au service mandaté:

sudo setsebool httpd_can_network_connect 1 -P

Vous pouvez en savoir plus sur SELinux dans le tutorielAn Introduction to SELinux on CentOS 7.

Kibana est maintenant accessible via votre nom de domaine complet ou l'adresse IP publique de votre serveur Elastic Stack. Vous pouvez consulter la page d’état du serveur Kibana en accédant à l’adresse suivante et en entrant 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 plug-ins installés.

|Kibana status page

[.note] #Note: Comme mentionné dans la section Prérequis, il est recommandé d'activer SSL / TLS sur votre serveur. Vous pouvez suivrethis tutorial 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.

[[step-3 -—- installation-et-configuration-logstash]] == Étape 3 - Installation et configuration de Logstash

Bien que Beats puisse 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 en 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 à la configuration. Les fichiers de configuration de Logstash sont écrits au format JSON et résident dans le répertoire/etc/logstash/conf.d. Lors de la configuration, il est utile de penser à Logstash comme à un pipeline qui collecte des données d’un côté, les traite d’une manière ou d’une autre et les envoie à sa destination (dans ce cas, la destination est Elasticsearch). Un pipeline Logstash a deux éléments obligatoires,input etoutput, et un élément facultatif,filter. Les plugins d'entrée consomment les données d'une source, les plugins de traitement traitent les données et les plugins de sortie écrivent les données dans une destination.

Logstash pipeline

Créez un fichier de configuration appelé02-beats-input.conf dans lequel vous allez configurer votre entrée Filebeat:

sudo vi /etc/logstash/conf.d/02-beats-input.conf

Insérez la configurationinput suivante. Ceci spécifie une entréebeats qui écoutera sur le port TCP5044.

/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 appelé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 a été extrait deofficial Elastic documentation. 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 appelé30-elasticsearch-output.conf:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

Insérez la configurationoutput suivante. Cette sortie configure Logstash pour stocker les données Beats dans Elasticsearch, qui s'exécute àlocalhost:9200, dans un index nommé d'après le Beat utilisé. Filebeat est le battement utilisé dans ce tutoriel:

/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, veillez à 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 entre02 et30.

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 afficheraConfigruation OK après quelques secondes. Si vous ne voyez pas cela dans votre sortie, recherchez les erreurs éventuelles 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.

[[step-4 -—- installation-and-configuring-filebeat]] == Étape 4 - Installation et configuration de Filebeat

Elastic Stack utilise plusieurs expéditeurs de données légers, appelés Beats, pour collecter des données provenant de diverses sources et les transférer vers Logstash ou Elasticsearch. Voici les temps qui sont 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 détection active.

Dans ce didacticiel, nous utiliserons Filebeat pour transférer les journaux locaux vers notre pile élastique.

Installez Filebeat en utilisantyum:

sudo yum install filebeat

Ensuite, configurez Filebeat pour vous 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

[.note] #Note: Comme pour Elasticsearch, le fichier de configuration de Filebeat est au format YAML. Cela signifie qu'une indentation correcte est cruciale, assurez-vous donc d'utiliser le même nombre d'espaces que ceux indiqués dans ces instructions.
#

Filebeat prend en charge de nombreuses sorties, mais vous envoyez généralement uniquement les é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, donc désactivons cette sortie. Pour ce faire, recherchez la sectionoutput.elasticsearch et commentez les lignes suivantes en les précédant d'un#:

/etc/filebeat/filebeat.yml

...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
...

Ensuite, configurez la sectionoutput.logstash. Décommentez les lignesoutput.logstash: ethosts: ["localhost:5044"] en supprimant les#. Cela configurera Filebeat pour se connecter à Logstash sur votre serveur Elastic Stack au port5044, le port pour lequel nous avons spécifié une entrée Logstash plus tôt:

/etc/filebeat/filebeat.yml

output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

Enregistrez et fermez le fichier.

Vous pouvez maintenant étendre les fonctionnalités de Filebeat avecFilebeat modules. Dans ce didacticiel, vous utiliserez le modulesystem, qui collecte et analyse les journaux créés par le service de journalisation système des distributions Linux courantes.

Permettez-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 les chemins par défaut des 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 de/etc/filebeat/modules.d/system.yml.

Ensuite, chargez le modèle d'index dans Elasticsearch. Unhttps://www.elastic.co/guide/en/elasticsearch/reference/current/basic_concepts.html#_index[_Elasticsearch index] est un ensemble de documents ayant 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. 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 fourni 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 les charger dans Kibana.

Lors du chargement des tableaux de bord, Filebeat se connecte à Elasticsearch pour vérifier les informations de version. Pour charger des 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

Maintenant, vous pouvez démarrer et activer Filebeat:

sudo systemctl start filebeat
sudo systemctl enable filebeat

Si vous avez configuré votre pile Elastic correctement, Filebeat commencera à envoyer vos journaux syslog et d'autorisation à Logstash, qui les chargera ensuite dans Elasticsearch.

Pour vérifier qu'Elasticsearch reçoit effectivement 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 indique un total de 0 occurrences, Elasticsearch ne charge aucun journal sous l'index recherché et vous devrez vérifier si votre configuration contient des 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.

[[step-5 -—- explore-kibana-dashboards]] == É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 nom de domaine complet 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 Kibana:

Kibana Homepage

Cliquez sur le lienDiscover dans la barre de navigation de gauche. Sur la pageDiscover, sélectionnez le modèle d'indexfilebeat- * prédéfini pour afficher les données Filebeat. Par défaut, toutes les données du journal s'affichent au cours des 15 dernières minutes. Vous verrez un histogramme avec les événements de journal et quelques messages de journal ci-dessous:

Discover page

Ici, vous pouvez rechercher et parcourir vos journaux, ainsi que personnaliser votre tableau de bord. À ce stade, cependant, il n’y aura pas grand-chose là-dedans, car vous ne collectez que les syslog de votre serveur Elastic Stack.

Utilisez le panneau de gauche pour accéder à la pageDashboard et recherchez les tableaux de bordFilebeat System. Une fois sur place, vous pouvez rechercher les exemples de tableaux de bord fournis avec le modulesystem de Filebeat.

Par exemple, vous pouvez afficher des statistiques détaillées en fonction de vos messages syslog:

Syslog Dashboard

Vous pouvez également voir quels utilisateurs ont utilisé la commandesudo et quand:

Sudo Dashboard

Kibana possède 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é Elastic Stack 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 utilisantBeats, 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.

Related