Comment utiliser Logstash et Kibana pour centraliser les journaux sur CentOS 7

introduction

Dans ce didacticiel, nous allons passer en revue l’installation de Logstash 1.4.2 et de Kibana 3 sur CentOS 7, 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 *: 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

  • * 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.

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 pour lesquels nous souhaitons collecter des journaux, que nous appellerons collectivement nos * serveurs *.

Conditions préalables

Pour compléter ce didacticiel, vous devez avoir un accès root à un VPS CentOS 7. Les instructions pour le configurer peuvent être trouvées ici (étapes 3 et 4): https://www.digitalocean.com/community/tutorials/initial-server-setup-with- centos-6[Installation du serveur initial avec CentOS 6].

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: CentOS 7

  • RAM: 2 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 OpenJDK 7.

Installez la dernière version stable d’OpenJDK 7 avec cette commande:

sudo yum -y install java-1.7.0-openjdk

Maintenant que Java 7 est installé, installons ElasticSearch.

Installer Elasticsearch

  • Remarque *: Logstash 1.4.2 recommande Elasticsearch 1.1.1.

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

sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

Créez et éditez un nouveau fichier de référentiel yum pour Elasticsearch:

sudo vi /etc/yum.repos.d/elasticsearch.repo

Ajoutez la configuration de référentiel suivante:

[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Sauvegarder et quitter.

Installez Elasticsearch 1.1.1 avec cette commande:

sudo yum -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 afin que les personnes extérieures ne puissent pas lire vos données ni arrêter votre cluster Elasticseach via l’API HTTP. Recherchez la ligne spécifiant + network.host + et décommentez-la afin qu’elle ressemble à ceci:

network.host: localhost

Ensuite, désactivez la multidiffusion en recherchant l’élément + discovery.zen.ping.multicast.enabled + et en supprimant le commentaire, de la manière suivante:

discovery.zen.ping.multicast.enabled: false

Enregistrez et quittez + elasticsearch.yml +.

Maintenant démarrez Elasticsearch:

sudo systemctl start elasticsearch.service

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

sudo systemctl enable elasticsearch.service

Maintenant que Elasticsearch est opérationnel, installons Kibana.

Installer Kibana

  • Remarque *: 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 ~; curl -O 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:

vi ~/kibana-3.0.1/config.js

Dans le fichier de configuration de Kibana, recherchez la ligne spécifiant l’URL du serveur + elasticsearch + et remplacez le numéro de port (9200 par défaut) par + 80 +:

  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% 5C_server% 5C_public% 5C_ip / [http: // logstash \ _server \ _public \ _ip /]).

Nous utiliserons Apache 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 Apache. Faisons-le maintenant.

Installer Apache HTTP

Utilisez Yum pour installer Apache HTTP:

sudo yum -y install httpd

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 Apache pour proxy les demandes du port 80 sur le port 9200 (le port qu’Elasticsearch écoute par défaut). Nous allons vous fournir un exemple de fichier VirtualHost.

Téléchargez l’exemple de configuration de VirtualHost:

cd ~; wget https://assets.digitalocean.com/articles/logstash/kibana3.conf

Ouvrez le fichier de configuration exemple pour le modifier:

vi kibana3.conf

Recherchez et modifiez les valeurs en surbrillance + VirtualHost + et + ServerName + en votre nom de domaine complet (ou localhost si vous n’utilisez pas de nom de domaine) et + root + en où nous avons installé Kibana, afin qu’elles ressemblent aux entrées suivantes. :

<VirtualHost :80>
 ServerName

Sauvegarder et quitter. Maintenant, copiez-le dans votre configuration de configuration Apache:

sudo cp ~/kibana3.conf /etc/httpd/conf.d/

Générez ensuite un identifiant qui sera utilisé pour accéder à Kibana (remplacez votre propre nom d’utilisateur):

sudo htpasswd -c /etc/httpd/conf.d/kibana-htpasswd

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 Apache que vous avez récemment configurée.

Maintenant, démarrez Apache pour appliquer nos modifications:

sudo systemctl start httpd.service

En outre, configurez Apache pour qu’il démarre au démarrage:

sudo systemctl enable httpd.service

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, 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 partage la même clé GPG qu’Elasticsearch et nous avons déjà installé cette clé publique. Nous allons donc créer et éditer un nouveau fichier de référentiel Yum pour Logstash:

sudo vi /etc/yum.repos.d/logstash.repo

Ajoutez la configuration de référentiel suivante:

[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Sauvegarder et quitter.

Installez Logstash 1.4.2 avec cette commande:

sudo yum -y install logstash-1.4.2

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.

Vous avez maintenant deux options pour générer vos certificats SSL. Si vous avez une configuration DNS permettant à 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/pki/tls/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):

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/pki/tls/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=<^>logstash_server_fqdn/' -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:

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. Ceci spécifie une entrée + lumberjack + qui écoutera sur le port TCP + 5000 +, 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:

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:

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 non hiérarchisés 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

Copier le certificat SSL et le package de redirecteur Logstash

Sur * Logstash Server *, copiez le certificat SSL sur * Server * (remplacez-le par votre propre identifiant):

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

Installer le package de redirecteur Logstash

Sur * Server *, téléchargez le RPM Logstash Forwarder dans votre répertoire personnel:

cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm

Ensuite, installez le paquet Logstash Forwarder:

sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm

Ensuite, vous souhaiterez installer le script d’initialisation Logstash Forwarder afin qu’il démarre au démarrage. Nous allons utiliser le script init fourni par logstashbook.com:

cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder

Le script d’initialisation dépend d’un fichier appelé + / etc / sysconfig / logstash-forwarder +. Un exemple de fichier est disponible au téléchargement:

sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig

Ouvrez-le pour l’édition:

sudo vi /etc/sysconfig/logstash-forwarder

Et modifiez la valeur + LOGSTASH_FORWARDER_OPTIONS + afin qu’elle ressemble à ce qui suit:

LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"

Sauvegarder et quitter.

Maintenant, copiez le certificat SSL à l’emplacement approprié (/ etc / pki / tls / certs):

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

Configurer le redirecteur Logstash

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

sudo vi /etc/logstash-forwarder

Ajoutez maintenant les lignes suivantes dans le fichier, en substituant dans l’adresse IP privée de votre serveur Logstash à «+ logstash_server_private_IP +»:

{
 "network": {
   "servers": [ ":5000" ],
   "timeout": 15,
   "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
 },
 "files": [
   {
     "paths": [
       "/var/log/messages",
       "/var/log/secure"
      ],
     "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 section paths spécifie les fichiers journaux à envoyer (ici, nous spécifions messages et secure), 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 avec d’autres fichiers journaux dans Logstash sur le port 5000.

Nous allons maintenant vouloir ajouter le service Logstash Forwarder avec chkconfig:

sudo chkconfig --add logstash-forwarder

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

sudo service logstash-forwarder start

Logstash Forwarder envoie maintenant messages 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 devrez entrer le nom d’utilisateur que vous avez créé (lors de la configuration d’Apache), puis vous devriez voir une page d’accueil Kibana.

Cliquez sur Logstash Dashboard pour accéder au tableau de bord initial. 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:

image: https: //assets.digitalocean.com/articles/logstash/dashboard.png [Exemple de tableau de bord Kibana 3]

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.

Related