Comment installer Elasticsearch, Logstash et Kibana (Elastic Stack) sur Ubuntu 16.04

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 allez installer lesElastic Stack sur un serveur Ubuntu 16.04. 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, nous utiliseronsNginx pour le proxy afin qu'il soit accessible via un navigateur Web. Nous installerons tous ces composants sur un seul serveur, que nous appellerons nosElastic Stack server.

[.note] #Note: lors de l'installation d'Elastic Stack, vous devez utiliser la même version sur toute la pile. Dans ce tutoriel, nous installerons les dernières versions de la pile entière qui sont, au moment de la rédaction de cet article, Elasticsearch 6.5.1, Kibana 6.5.1, Logstash 6.5.1 et Filebeat 6.5.1.
#

Conditions préalables

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

  • Un serveur Ubuntu 16.04 configuré en suivant nosInitial Server Setup Guide for Ubuntu 16.04, y compris un utilisateur non root avec des privilèges sudo et un pare-feu configuré avecufw. 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, nous utiliserons un SMV avec les spécifications suivantes pour notre serveur Elastic Stack:

    • OS: Ubuntu 16.04

    • RAM: 4 Go

    • CPU: 2

  • Java 8 - requis par Elasticsearch et Logstash - installé sur votre serveur. Pour l'installer, suivez la section“Installing the Oracle JDK” de notre guide sur la façon d'installer Java 8 sur Ubuntu 16.04.

  • Nginx installé sur votre serveur, que nous allons configurer plus tard dans ce guide en tant que proxy inverse pour Kibana. Suivez notre guide surHow to Install Nginx on Ubuntu 16.04 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.

Cependant, comme vous apporterez en fin de compte des modifications à votre bloc de serveur Nginx au cours de ce guide, il serait probablement plus logique que vous suiviez le guideLet’s Encrypt on Ubuntu 16.04 à la fin de la deuxième étape de ce didacticiel. Dans cet esprit, 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 dans les référentiels de paquets par défaut d’Ubuntu. Cependant, ils peuvent être installés avec APT après avoir ajouté la liste des sources de paquets 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 la liste des sources de packages Elastic afin d’installer Elasticsearch.

Pour commencer, exécutez la commande suivante pour importer la clé GPG publique Elasticsearch dans APT:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Ensuite, ajoutez la liste des sources Elastic au répertoiresources.list.d, où APT recherchera de nouvelles sources:

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

Ensuite, mettez à jour vos listes de paquets pour qu'APT lise la nouvelle source Elastic:

sudo apt-get update

Puis installez Elasticsearch avec cette commande:

sudo apt-get install elasticsearch

Une fois l'installation d'Elasticsearch terminée, utilisez votre éditeur de texte préféré pour modifier le fichier de configuration principal d'Elasticsearch,elasticsearch.yml. Ici, nous utiliseronsnano:

sudo nano /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 en appuyant surCTRL+X, suivi deY puis deENTER si vous utiliseznano. 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" : "DX2KuVz",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "Mscq8fVcR5-xgxFB3l35lg",
  "version" : {
    "number" : "6.5.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "816e6f6",
    "build_date" : "2018-11-09T18:58:36.352602Z",
    "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 lesofficial documentation, vous ne devez installer Kibana qu'après avoir installé Elasticsearch. L'installation dans cet ordre garantit que les composants dont dépend chaque produit sont correctement installés.

Comme vous avez déjà ajouté la source de package Elastic à l'étape précédente, vous pouvez simplement installer les composants restants de Elastic Stack à l'aide d'APT:

sudo apt-get 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, 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 nano /etc/nginx/sites-available/example.com

Ajoutez le bloc de code suivant dans le fichier, en veillant à mettre à jourexample.com pour qu'il corresponde 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 notre tutoriel surHow To Set Up Nginx Server Blocks (Virtual Hosts) on Ubuntu 16.04, vous avez peut-être déjà créé ce fichier de bloc serveur 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:

/etc/nginx/sites-available/example.com

server {
    listen 80;

    server_name 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, activez la nouvelle configuration en créant un lien symbolique vers le répertoiresites-enabled. Si vous avez déjà créé un fichier de blocage de serveur portant le même nom dans les conditions préalables pour Nginx, vous n'avez pas besoin d'exécuter cette commande:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

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

Si vous avez suivi le guide de configuration initiale du serveur, vous devez activer un pare-feu UFW. Pour autoriser les connexions à Nginx, nous pouvons ajuster les règles en tapant:

sudo ufw allow 'Nginx Full'

[.Remarque]##

Note: Si vous avez suivi le didacticiel prérequis Nginx, vous avez peut-être créé une règle UFW autorisant le profilNginx HTTP à travers le pare-feu. Étant donné que le profilNginx Full autorise à la fois le trafic HTTP et HTTPS à travers le pare-feu, vous pouvez supprimer en toute sécurité la règle que vous avez créée dans le didacticiel des prérequis. Faites-le avec la commande suivante:

sudo ufw delete allow 'Nginx HTTP'

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. Suivezthis tutorial maintenant pour obtenir un certificat SSL gratuit pour Nginx sur Ubuntu 16.04. 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. 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 apt-get 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 nano /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, où nous ajouterons un filtre pour les journaux système, également appelésyslogs:

sudo nano /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 nano /etc/logstash/conf.d/30-elasticsearch-output.conf

Insérez la configurationoutput suivante. Essentiellement, 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 instants. 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 utilisant APT:

sudo apt-get 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 nano /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.

La fonctionnalité de Filebeat peut être étendue avecFilebeat modules. Dans ce didacticiel, nous utiliserons 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"]'
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 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-11-19T21:29:45.239Z    INFO    elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.240Z    INFO    [publisher] pipeline/module.go:110  Beat name: elk-16-03
2018-11-19T21:29:45.241Z    INFO    elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.248Z    INFO    elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0
2018-11-19T21:29:45.253Z    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-11-19T21:29:45.253Z    INFO    elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-11-19T21:29:45.256Z    INFO    elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0
2018-11-19T21:29:45.256Z    INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-11-19T21:30:15.404Z    INFO    instance/beat.go:741    Kibana dashboards successfully loaded.
Loaded dashboards
2018-11-19T21:30:15.404Z    INFO    elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-11-19T21:30:15.408Z    INFO    elasticsearch/client.go:712 Connected to Elasticsearch version 6.5.0
2018-11-19T21:30:15.408Z    INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2018-11-19T21:30:15.457Z    WARN    fileset/modules.go:388  X-Pack Machine Learning is not enabled
2018-11-19T21:30:15.505Z    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 -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

Vous verrez une sortie qui ressemble à ceci:

Output{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 3,
    "successful" : 3,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1580,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "filebeat-6.5.0-2018.11.19",
        "_type" : "doc",
        "_id" : "HnDiLWcB5tvUruXKVbok",
        "_score" : 1.0,
        "_source" : {
          "input" : {
            "type" : "log"
          },
...

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 nous verrons comment naviguer dans 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 appris à installer et à configurer 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.