Comment installer Elasticsearch 1.7, Logstash 1.5 et Kibana 4.1 (pile ELK) sur Ubuntu 14.04

introduction

Dans ce didacticiel, nous allons passer en revue l’installation de la pile Elasticsearch ELK sur Ubuntu 14.04, à savoir Elasticsearch 1.7.3, Logstash 1.5.4 et Kibana 4.1.1. Nous vous montrerons également comment le configurer pour rassembler et visualiser les syslogs de vos systèmes dans un emplacement centralisé. Logstash est un outil open source permettant de collecter, analyser et stocker des journaux pour une utilisation ultérieure. Kibana est une interface Web permettant de rechercher et d’afficher les journaux indexés par Logstash. Ces deux outils sont basés sur Elasticsearch.

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 concernent plusieurs serveurs en corrélant leurs journaux au cours d’une période donnée.

Il est possible d’utiliser Logstash pour rassembler des journaux de tous types, mais nous limiterons la portée de ce tutoriel à la collecte de syslog.

Notre objectif

L’objectif de ce didacticiel est de configurer Logstash pour rassembler les syslog de plusieurs serveurs, et de configurer Kibana pour visualiser les journaux rassemblés.

Notre configuration Logstash / Kibana comprend quatre composants principaux:

  • * Logstash *: composant serveur de Logstash qui traite les journaux entrants

  • * Elasticsearch *: Stocke tous les journaux

  • * Kibana *: interface Web pour la recherche et la visualisation de journaux, qui seront mandatés par Nginx

  • * Logstash Forwarder *: Installé sur des serveurs qui envoient leurs journaux à Logstash, Logstash Forwarder sert d’agent de transfert de journal utilisant le protocole de réseau lumberjack pour communiquer avec Logstash.

image: https: //assets.digitalocean.com/articles/elk/elk-infrastructure-logstashforwarder.png [Infrastructure ELK]

Nous allons installer les trois premiers composants sur un seul serveur, que nous appellerons notre * Serveur Logstash *. Le Logstash Forwarder sera installé sur tous les serveurs clients pour lesquels nous souhaitons collecter des journaux, que nous appellerons collectivement nos * serveurs clients *.

Conditions préalables

Pour compléter ce didacticiel, vous devez avoir un accès root à un serveur virtuel Ubuntu 14.04. Les instructions pour le configurer peuvent être trouvées ici (étapes 3 et 4): Initial Initial Server Setup with Ubuntu 14.04 .

Si vous préférez utiliser CentOS, consultez ce didacticiel: https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7 [ Comment installer ELK sur CentOS 7].

La quantité de CPU, de RAM et de stockage dont votre serveur Logstash aura besoin dépend du volume de journaux que vous souhaitez rassembler. Pour ce tutoriel, nous utiliserons un SMV avec les spécifications suivantes pour notre serveur Logstash:

  • OS: Ubuntu 14.04

  • RAM: 4 Go

  • CPU: 2

En plus de votre serveur Logstash, vous souhaiterez disposer de quelques autres serveurs à partir desquels vous collecterez des journaux.

Commençons par configurer notre serveur Logstash!

Installer Java 8

Elasticsearch et Logstash nécessitent Java, nous allons donc l’installer maintenant. Nous allons installer une version récente d’Oracle Java 8 car c’est ce que recommande Elasticsearch. Cela devrait cependant fonctionner correctement avec OpenJDK, si vous décidez de suivre cette voie.

Ajoutez le Oracle Java PPA à apt:

sudo add-apt-repository -y ppa:webupd8team/java

Mettez à jour votre base de données de paquets apt:

sudo apt-get update

Installez la dernière version stable d’Oracle Java 8 avec cette commande (et acceptez le contrat de licence qui apparaît):

sudo apt-get -y install oracle-java8-installer

Maintenant que Java 8 est installé, installons ElasticSearch.

Installer Elasticsearch

Elasticsearch peut être installé avec un gestionnaire de paquets en ajoutant la liste des sources de paquets d’Elastic.

Exécutez la commande suivante pour importer la clé GPG publique Elasticsearch dans apt:

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

Si votre invite est juste en attente, il attend probablement le mot de passe de votre utilisateur (pour autoriser la commande + sudo +). Si c’est le cas, entrez votre mot de passe.

Créez la liste de sources Elasticsearch:

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

Mettez à jour votre base de données de paquets apt:

sudo apt-get update

Installez Elasticsearch avec cette commande:

sudo apt-get -y install elasticsearch

Elasticsearch est maintenant installé. Modifions la configuration:

sudo vi /etc/elasticsearch/elasticsearch.yml

Vous souhaiterez restreindre l’accès extérieur à votre instance Elasticsearch (port 9200) afin que les personnes extérieures ne puissent pas lire vos données ni arrêter votre cluster Elasticsearch via l’API HTTP. Recherchez la ligne qui spécifie + network.host +, décommentez-la et remplacez sa valeur par «localhost» afin qu’elle ressemble à ceci:

elasticsearch.yml extrait (mise à jour)

network.host: localhost

Enregistrez et quittez + elasticsearch.yml +.

Maintenant démarrez Elasticsearch:

sudo service elasticsearch restart

Exécutez ensuite la commande suivante pour lancer Elasticsearch au démarrage:

sudo update-rc.d elasticsearch defaults 95 10

Maintenant que Elasticsearch est opérationnel, installons Kibana.

Installer Kibana

Kibana peut être installé avec un gestionnaire de paquets en ajoutant la liste des sources de paquets d’Elastic.

Créez la liste de sources Kibana:

echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list

Mettez à jour votre base de données de paquets apt:

sudo apt-get update

Installez Kibana avec cette commande:

sudo apt-get -y install kibana

Kibana est maintenant installé.

Ouvrez le fichier de configuration Kibana pour le modifier:

sudo vi /opt/kibana/config/kibana.yml

Dans le fichier de configuration de Kibana, recherchez la ligne spécifiant + hôte + et remplacez l’adresse IP («0.0.0.0» par défaut) par «localhost»:

extrait de kibana.yml (mise à jour)

host: "localhost"

Sauvegarder et quitter. Grâce à ce paramètre, Kibana ne sera accessible que par l’hôte local. Cela convient car nous allons installer un proxy inverse Nginx sur le même serveur pour permettre un accès externe.

Activez maintenant le service Kibana et lancez-le:

sudo update-rc.d kibana defaults 96 9
sudo service kibana start

Avant de pouvoir utiliser l’interface Web de Kibana, nous devons configurer un proxy inverse. Faisons-le maintenant, avec Nginx.

Installer Nginx

Comme nous avons configuré Kibana pour écouter sur + localhost +, nous devons configurer un proxy inverse pour lui permettre un accès externe. Nous utiliserons Nginx à cette fin.

  • Remarque: * Si vous avez déjà une instance de Nginx que vous souhaitez utiliser, n’hésitez pas à l’utiliser à la place. Assurez-vous simplement de configurer Kibana pour qu’il soit accessible par votre serveur Nginx (vous voudrez probablement changer la valeur + hôte +, dans + / opt / kibana / config / kibana.yml +, par l’adresse IP privée de votre serveur Kibana ou nom d’hôte). En outre, il est recommandé d’activer SSL / TLS.

Utilisez apt pour installer Nginx et Apache2-utils:

sudo apt-get install nginx apache2-utils

Utilisez htpasswd pour créer un utilisateur admin, appelé «kibanaadmin» (vous devez utiliser un autre nom), pouvant accéder à l’interface Web de Kibana:

sudo htpasswd -c /etc/nginx/htpasswd.users

Entrez un mot de passe à l’invite. N’oubliez pas cette connexion, car vous en aurez besoin pour accéder à l’interface Web de Kibana.

Ouvrez maintenant le bloc de serveur par défaut Nginx dans votre éditeur favori. Nous allons utiliser vi:

sudo vi /etc/nginx/sites-available/default

Supprimez le contenu du fichier et collez le bloc de code suivant dans le fichier. Assurez-vous de mettre à jour le + nom_serveur + pour qu’il corresponde au nom de votre serveur:

/ etc / nginx / sites-available / default

server {
   listen 80;

   server_name ;

   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;
   }
}

Sauvegarder et quitter. Cela configure Nginx pour qu’il dirige le trafic HTTP de votre serveur vers l’application Kibana, qui écoute sur + localhost: 5601 +. De plus, Nginx utilisera le fichier + htpasswd.users +, créé précédemment, et nécessitant une authentification de base.

Redémarrez maintenant Nginx pour que nos modifications prennent effet:

sudo service nginx restart

Kibana est désormais accessible via votre nom de domaine complet ou l’adresse IP publique de votre serveur Logstash i.e. http: // logstash% 5C_server% 5C_public% 5C_ip / [http: // logstash \ _server \ _public \ _ip /]. Si vous y allez dans un navigateur Web, après avoir saisi les informations d’identification «kibanaadmin», vous devriez voir une page d’accueil Kibana qui vous demandera de configurer un motif d’index. Nous y reviendrons plus tard, après l’installation de tous les autres composants.

Installer Logstash

Le package Logstash est disponible à partir du même référentiel qu’Elasticsearch et nous avons déjà installé cette clé publique. Créons donc la liste des sources Logstash:

echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

Mettez à jour votre base de données de paquets apt:

sudo apt-get update

Installez Logstash avec cette commande:

sudo apt-get install logstash

Logstash est installé mais n’est pas encore configuré.

Générer des certificats SSL

Puisque nous allons utiliser Logstash Forwarder pour envoyer les journaux de nos serveurs à notre serveur Logstash, nous devons créer un certificat SSL et une paire de clés. Le certificat est utilisé par le redirecteur Logstash pour vérifier l’identité du serveur Logstash. Créez les répertoires qui stockeront le certificat et la clé privée avec les commandes suivantes:

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

Vous avez maintenant deux options pour générer vos certificats SSL. Si vous avez une configuration DNS qui permettra à vos serveurs clients de résoudre l’adresse IP du serveur Logstash, utilisez * Option 2 *. Sinon, * Option 1 * vous permettra d’utiliser des adresses IP.

Option 1: adresse IP

Si vous ne disposez pas d’une configuration DNS autorisant vos serveurs, à partir de laquelle vous collecterez les journaux, pour résoudre l’adresse IP de votre serveur Logstash, vous devrez ajouter l’adresse IP privée de votre serveur Logstash à l’élément + subjectAltName +. (SAN) du certificat SSL que nous sommes sur le point de générer. Pour ce faire, ouvrez le fichier de configuration OpenSSL:

sudo vi /etc/ssl/openssl.cnf

Recherchez la section + [v3_ca] + dans le fichier et ajoutez cette ligne sous celle-ci (en la remplaçant par l’adresse IP privée du serveur Logstash):

openssl.cnf extrait (mis à jour)

subjectAltName = IP:

Sauvegarder et quitter.

Générez maintenant le certificat SSL et la clé privée aux emplacements appropriés (/ etc / pki / tls /), avec les commandes suivantes:

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

Le fichier logstash-forwarder.crt sera copié sur tous les serveurs qui enverront les journaux à Logstash, mais nous le ferons un peu plus tard. Terminons notre configuration Logstash. Si vous avez choisi cette option, ignorez l’option 2 et passez à * Configure Logstash *.

Option 2: nom de domaine complet (DNS)

Si vous avez une configuration DNS avec votre réseau privé, vous devez créer un enregistrement A contenant l’adresse IP privée du serveur Logstash. Ce nom de domaine sera utilisé dans la commande suivante pour générer le certificat SSL. Vous pouvez également utiliser un enregistrement qui pointe vers l’adresse IP publique du serveur. Assurez-vous simplement que vos serveurs (ceux sur lesquels vous allez collecter les journaux) seront en mesure de résoudre le nom de domaine sur votre serveur Logstash.

Générez maintenant le certificat SSL et la clé privée, aux emplacements appropriés (/ etc / pki / tls /…), avec la commande suivante (remplacez dans le nom de domaine complet du serveur Logstash):

cd /etc/pki/tls; sudo openssl req -subj '/CN=/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Le fichier logstash-forwarder.crt sera copié sur tous les serveurs qui enverront les journaux à Logstash, mais nous le ferons un peu plus tard. Terminons notre configuration Logstash.

Configurer Logstash

Les fichiers de configuration Logstash sont au format JSON et résident dans /etc/logstash/conf.d. La configuration comprend trois sections: les entrées, les filtres et les sorties.

Créons un fichier de configuration appelé + 01-lumberjack-input.conf + et configurons notre entrée «lumberjack» (le protocole utilisé par Logstash Forwarder):

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

Insérez la configuration input suivante:

01-lumberjack-input.conf

input {
 lumberjack {
   port => 5043
   type => "logs"
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
 }
}

Sauvegarder et quitter. Cela spécifie une entrée + lumberjack + qui écoutera sur le port TCP '+ 5043 + `, et utilisera le certificat SSL et la clé privée que nous avons créés précédemment.

Créons maintenant un fichier de configuration appelé + 10-syslog.conf +, où nous allons ajouter un filtre pour les messages syslog:

sudo vi /etc/logstash/conf.d/10-syslog.conf

Insérez la configuration syslog filter suivante:

10-syslog.conf

filter {
 if [type] == "syslog" {
   grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
     add_field => [ "received_at", "%{@timestamp}" ]
     add_field => [ "received_from", "%{host}" ]
   }
   syslog_pri { }
   date {
     match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
   }
 }
}

Sauvegarder et quitter. Ce filtre recherche les journaux étiquetés comme type «syslog» (par un redirecteur Logstash) et tente d’utiliser «grok» pour analyser les journaux syslog entrants afin de le structurer et de le rendre accessible aux requêtes.

Enfin, nous allons créer un fichier de configuration appelé + 30-lumberjack-output.conf +:

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

Insérez la configuration output suivante:

30-syslog.conf

output {
 elasticsearch { host => localhost }
 stdout { codec => rubydebug }
}

Sauvegarder et quitter. Cette sortie configure essentiellement Logstash pour stocker les journaux dans Elasticsearch.

Avec cette configuration, Logstash acceptera également les journaux qui ne correspondent pas au filtre, mais les données ne seront pas structurées (par exemple, Les journaux non filtrés Nginx ou Apache apparaissent sous forme de messages simples au lieu de les catégoriser en fonction des codes de réponse HTTP, des adresses IP source, des fichiers servis, etc.).

Si vous souhaitez ajouter des filtres pour d’autres applications utilisant l’entrée Logstash Forwarder, veillez à nommer les fichiers afin qu’ils soient triés entre la configuration d’entrée et la configuration de sortie (c’est-à-dire entre 01- et 30-).

Redémarrez Logstash pour appliquer nos modifications de configuration:

sudo service logstash restart

Maintenant que notre serveur Logstash est prêt, passons maintenant à la configuration de Logstash Forwarder.

Configurer le redirecteur Logstash (Ajouter des serveurs clients)

Suivez ces étapes pour chaque serveur Ubuntu ou Debian pour lequel vous souhaitez envoyer des journaux à votre serveur Logstash. Pour obtenir des instructions sur l’installation de Logstash Forwarder sur des distributions Linux basées sur Red Hat (par exemple, RHEL, CentOS, etc.), reportez-vous à la https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7#set-up -logstash-forwarder- (add-client-servers) [Section relative au redirecteur Build & Package Logstash] de la variante CentOS de ce tutoriel.

Copier le certificat SSL et le package de redirecteur Logstash

Sur * Logstash Server *, copiez le certificat SSL sur * Client Server * (remplacez l’adresse du serveur client et votre propre identifiant):

scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp

Après avoir fourni vos identifiants de connexion, assurez-vous que la copie du certificat a réussi. Il est requis pour la communication entre les serveurs client et le serveur Logstash.

Installer le package de redirecteur Logstash

Sur * Client Server *, créez la liste de sources Logstash Forwarder:

echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

Il utilise également la même clé GPG que Elasticsearch, qui peut être installée avec cette commande:

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

Ensuite, installez le package Logstash Forwarder:

sudo apt-get update
sudo apt-get install logstash-forwarder
  • Remarque: * Si vous utilisez une version 32 bits d’Ubuntu et obtenez une erreur «Impossible de localiser le paquet logstash-forwarder», vous devrez installer Logstash Forwarder manuellement.

Copiez maintenant le certificat SSL du serveur Logstash à l’emplacement approprié (/ etc / pki / tls / certs):

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Configurer le redirecteur Logstash

Sur * Client Server *, créez et modifiez le fichier de configuration Logstash Forwarder, au format JSON:

sudo vi /etc/logstash-forwarder.conf

Dans la section + réseau +, ajoutez les lignes suivantes dans le fichier, en substituant dans l’adresse privée de votre serveur Logstash le nom + logstash_server_private_private_address +:

extrait de logstash-forwarder.conf 1 sur 2

   "servers": [ ":5043" ],
   "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
   "timeout": 15

Sous la section + fichiers + (entre les crochets), ajoutez les lignes suivantes,

extrait de logstash-forwarder.conf 2 sur 2

   {
     "paths": [
       "/var/log/syslog",
       "/var/log/auth.log"
      ],
     "fields": { "type": "syslog" }
   }

Sauvegarder et quitter. Cela configure Logstash Forwarder pour qu’il se connecte à votre serveur Logstash sur le port 5043 (le port pour lequel nous avons spécifié une entrée précédente) et utilise le certificat SSL que nous avons créé précédemment. La section paths spécifie les fichiers journaux à envoyer (nous spécifions ici syslog et auth.log), et la section type indique que ces journaux sont du type «syslog * (qui est le type recherché par notre filtre).

Notez que c’est à cet endroit que vous ajouteriez plus de fichiers / types pour configurer Logstash Forwarder dans d’autres fichiers journaux sur Logstash sur le port 5043.

Maintenant, redémarrez Logstash Forwarder pour mettre nos modifications en place:

sudo service logstash-forwarder restart

Logstash Forwarder envoie maintenant syslog et auth.log à votre serveur Logstash! Répétez cette section pour tous les autres serveurs pour lesquels vous souhaitez collecter des journaux.

Se connecter à Kibana

Lorsque vous avez terminé de configurer Logstash Forwarder sur tous les serveurs pour lesquels vous souhaitez collecter les journaux, voyons Kibana, l’interface Web que nous avons précédemment installée.

Dans un navigateur Web, accédez au nom de domaine complet ou à l’adresse IP publique de votre serveur Logstash. Après avoir entré les informations d’identification "kibanaadmin", vous devriez voir une page vous invitant à configurer un modèle d’index:

image: https: //assets.digitalocean.com/articles/elk/1-select-index.gif [Créer un index]

Allez-y et sélectionnez * @ timestamp * dans le menu déroulant, puis cliquez sur le bouton * Créer * pour créer le premier index.

Cliquez maintenant sur le lien * Découvrir * dans la barre de navigation supérieure. Par défaut, toutes les données du journal s’affichent au cours des 15 dernières minutes. Vous devriez voir un histogramme avec les événements de journal, avec les messages de journal ci-dessous:

image: https: //assets.digitalocean.com/articles/elk/2-discover.png [Page de découverte]

Pour le moment, il n’y aura pas grand-chose là-dedans, car vous ne collectez que les syslog de vos serveurs clients. Ici, vous pouvez rechercher et parcourir vos journaux. Vous pouvez également personnaliser votre tableau de bord.

Essayez les choses suivantes:

  • Recherchez «root» pour voir si quelqu’un tente de se connecter à vos serveurs en tant que root.

  • Rechercher un nom d’hôte particulier (recherche de + host:" "+)

  • Changez la période en sélectionnant une zone sur l’histogramme ou dans le menu ci-dessus

  • Cliquez sur les messages sous l’histogramme pour voir comment les données sont filtrées.

Kibana possède de nombreuses autres fonctionnalités, telles que la représentation graphique et le filtrage, alors n’hésitez pas à fouiller!

Conclusion

Maintenant que vos syslog sont centralisés via Elasticsearch et Logstash et que vous êtes en mesure de les visualiser avec Kibana, vous devriez commencer par centraliser tous vos journaux importants. N’oubliez pas que vous pouvez envoyer à peu près n’importe quel type de journal à Logstash, mais les données deviennent encore plus utiles si elles sont analysées et structurées avec grok.

Pour améliorer votre nouvelle pile ELK, vous devez vous renseigner sur la collecte et le filtrage de vos autres journaux avec Logstash, ainsi que sur la création de tableaux de bord Kibana. Ces sujets sont abordés dans les deuxième et troisième tutoriels de cette série. En outre, si vous rencontrez des problèmes avec votre configuration, suivez notre tutoriel Comment résoudre les problèmes courants liés à la pile ELK .