Comment utiliser Logstash et Kibana pour centraliser les journaux sur Ubuntu 14.04

[.note] #Note: Ce didacticiel concerne une ancienne version de la pile ELK, qui n'est pas compatible avec la dernière version. La dernière version de ce didacticiel est disponible à l'adresseHow To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on Ubuntu 14.04.
#

introduction

Dans ce didacticiel, nous allons passer en revue l’installation de Logstash 1.4.2 et de Kibana 3, ainsi que la façon de les configurer pour rassembler et visualiser les syslogs de nos 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 3 est une interface Web qui peut être utilisée pour rechercher et afficher les journaux indexés par Logstash. Ces deux outils sont basés sur Elasticsearch. Elasticsearch, Logstash et Kibana, lorsqu'ils sont utilisés ensemble, sont appelés une pile ELK.

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: le composant serveur de Logstash qui traite les journaux entrants

  • Elasticsearch: stocke tous les journaux

  • Kibana: interface Web pour rechercher et visualiser les journaux

  • Logstash Forwarder: installé sur des serveurs qui enverront leurs journaux à Logstash, Logstash Forwarder sert d'agent de transfert de journal qui utilise le protocole réseau delumberjackpour communiquer avec Logstash

Nous installerons les trois premiers composants sur un seul serveur, que nous appellerons nosLogstash Server. Le redirecteur Logstash sera installé sur tous les serveurs pour lesquels nous voulons collecter des journaux, que nous appellerons collectivement nosServers.

Conditions préalables

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

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 7

Elasticsearch et Logstash nécessitent Java 7, nous allons donc l'installer maintenant. Nous allons installer Oracle Java 7 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 7 avec cette commande (et acceptez le contrat de licence qui apparaît):

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

Maintenant que Java 7 est installé, installons ElasticSearch.

Installer Elasticsearch

Note: Logstash 1.4.2 recommande Elasticsearch 1.1.1.

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

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

Créez la liste de sources Elasticsearch:

echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.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=1.1.1

Elasticsearch est maintenant installé. Modifions la configuration:

sudo vi /etc/elasticsearch/elasticsearch.yml

Ajoutez la ligne suivante quelque part dans le fichier pour désactiver les scripts dynamiques:

script.disable_dynamic: true

Vous voudrez également 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 Elasticseach via l’API HTTP. Trouvez la ligne qui spécifienetwork.host et décommentez-la pour qu'elle ressemble à ceci:

network.host: localhost

Enregistrez et quittezelasticsearch.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

Note: Logstash 1.4.2 recommande Kibana 3.0.1

Téléchargez Kibana dans votre répertoire personnel à l'aide de la commande suivante:

cd ~; wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

Extraire les archives Kibana avec tar:

tar xvf kibana-3.0.1.tar.gz

Ouvrez le fichier de configuration Kibana pour le modifier:

sudo vi ~/kibana-3.0.1/config.js

Dans le fichier de configuration de Kibana, recherchez la ligne qui spécifie leselasticsearch et remplacez le numéro de port (9200 par défaut) par80:

   elasticsearch: "http://"+window.location.hostname+":80",

Cela est nécessaire car nous prévoyons d’accéder à Kibana sur le port 80 (c.-à-d. http://logstash\_server\_public\_ip/).

Nous allons utiliser Nginx pour desservir notre installation de Kibana. Nous allons donc déplacer les fichiers dans un emplacement approprié. Créez un répertoire avec la commande suivante:

sudo mkdir -p /var/www/kibana3

Maintenant, copiez les fichiers Kibana dans votre répertoire nouvellement créé:

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/

Avant de pouvoir utiliser l'interface Web de Kibana, nous devons installer Nginx. Faisons-le maintenant.

Installer Nginx

Utilisez apt pour installer Nginx:

sudo apt-get install nginx

En raison de la manière dont Kibana interfère l'utilisateur avec Elasticsearch (l'utilisateur doit pouvoir accéder directement à Elasticsearch), nous devons configurer Nginx pour envoyer par proxy les demandes du port 80 au port 9200 (le port qu'Elasticsearch écoute par défaut). Heureusement, Kibana fournit un exemple de configuration Nginx qui en définit l'essentiel.

Téléchargez l’exemple de configuration Nginx du référentiel github de Kibana dans votre répertoire personnel:

cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

Ouvrez le fichier de configuration exemple pour le modifier:

vi nginx.conf

Recherchez et modifiez les valeurs desserver_name sur votre nom de domaine complet (ou localhost si vous n'utilisez pas de nom de domaine) etroot sur l'endroit où nous avons installé Kibana, afin qu'elles ressemblent aux entrées suivantes:

  server_name FQDN;
  root /var/www/kibana3;

Sauvegarder et quitter. Maintenant, copiez-le sur votre bloc de serveur par défaut Nginx avec la commande suivante:

sudo cp nginx.conf /etc/nginx/sites-available/default

Nous allons maintenant installerapache2-utils afin de pouvoir utiliserhtpasswd pour générer une paire nom d'utilisateur et mot de passe:

sudo apt-get install apache2-utils

Ensuite, générez un login qui sera utilisé dans Kibana poursave and share dashboards (remplacez votre propre nom d'utilisateur):

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

Puis entrez un mot de passe et vérifiez-le. Le fichier htpasswd que vous venez de créer est référencé dans la configuration Nginx que vous avez récemment configurée.

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\_server\_public\_ip/. Si vous y allez dans un navigateur Web, vous devriez voir une page d’accueil Kibana qui vous permettra d’afficher des tableaux de bord, mais il n’y aura pas de journaux à afficher car Logstash n’a pas encore été configuré. Faisons-le maintenant.

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.4/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=1.4.2-1-2c0f5a1

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 disposez d'une configuration DNS qui permettra à vos serveurs clients de résoudre l'adresse IP du serveur Logstash, utilisezOption 2. Sinon,Option 1 vous permettra d'utiliser des adresses IP.

Option 1: adresse IP

Si vous n'avez pas de configuration DNS - cela permettrait à vos serveurs, à partir desquels vous collecterez des journaux, de résoudre l'adresse IP de votre serveur Logstash - vous devrez ajouter l'adresse IP privée de votre serveur Logstash ausubjectAltName (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 en dessous (en remplaçant l'adresse IP privée du serveur Logstash):

subjectAltName = IP: logstash_server_private_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 fichierlogstash-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 opté pour 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 qui contient 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 à partir desquels 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=logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Le fichierlogstash-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 "bûcheron" (le protocole utilisé par Logstash Forwarder):

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

Insérez la configurationinput suivante:

input {
  lumberjack {
    port => 5000
    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éelumberjack qui écoutera sur le port tcp5000 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, dans lequel nous ajouterons un filtre pour les messages syslog:

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

Insérez la configuration syslogfilteruivante:

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 configurationoutput suivante:

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

Note: Effectuez ces étapes pour chaque serveur 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 auxBuild and Package Logstash Forwarder section de la variante CentOS de ce tutoriel.

Copier le certificat SSL et le package de redirecteur Logstash

SurLogstash Server, copiez le certificat SSL dansServer (remplacez-le par votre propre login):

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

Installer le package de redirecteur Logstash

SurServer, créez la liste des sources de Logstash Forwarder:

echo 'deb http://packages.elasticsearch.org/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 -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

Ensuite, installez le package Logstash Forwarder:

sudo apt-get update
sudo apt-get install logstash-forwarder

Note: Si vous utilisez une version 32 bits d'Ubuntu et que vous obtenez le message d'erreur «Impossible de localiser le package logstash-forwarder», vous devrez installer Logstash Forwarder manuellement:

wget https://assets.digitalocean.com/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb

Ensuite, vous voudrez installer le script d'initialisation Logstash Forwarder pour qu'il démarre au démarrage:

cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

Maintenant, copiez le certificat SSL à 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

SurServer, créez et modifiez le fichier de configuration de Logstash Forwarder, qui est au format JSON:

sudo vi /etc/logstash-forwarder

Ajoutez maintenant les lignes suivantes dans le fichier, en remplaçant l’adresse IP privée de votre serveur Logstash parlogstash_server_private_IP:

{
  "network": {
    "servers": [ "logstash_server_private_IP:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "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 5000 (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 sectionpaths spécifie les fichiers journaux à envoyer (ici nous spécifions syslog et auth.log), et la sectiontype spécifie que ces journaux sont de type «syslog * (qui est le type que notre filtre cherche).

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

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 procédure 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. Vous devriez voir une page d'accueil de Kibana.

Cliquez surLogstash Dashboard pour accéder au tableau de bord prédéfini. Vous devriez voir un histogramme avec les événements de journal, avec les messages de journal ci-dessous (si vous ne voyez aucun événement ou message, l'un de vos quatre composants Logstash n'est pas configuré correctement).

Ici, vous pouvez rechercher et parcourir vos journaux. Vous pouvez également personnaliser votre tableau de bord. Voici un exemple de ce à quoi votre instance Kibana pourrait ressembler:

Kibana 3 Example Dashboard

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

  • 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 Logstash et que vous pouvez les visualiser avec Kibana, vous devriez commencer par bien 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.

Notez que votre tableau de bord Kibana est accessible à toute personne pouvant accéder à votre serveur. Vous souhaitez donc le sécuriser avec quelque chose comme htaccess.