Pile ELK est une plate-forme d'analyse de données complète, composée de trois outils open source Elasticsearch , Logstash , et Kibana . Cette pile vous aide à stocker et à gérer les journaux de manière centralisée et vous permet d'analyser les problèmes en corrélant les événements à un moment donné.
Cet article vous guide pour installer la pile ELK sur Ubuntu 18.04 / Ubuntu 16.04 .
Composants
Elasticsearch – Stocke les journaux entrants de Logstash et offre la possibilité de rechercher les journaux/données en temps réel
Logstash – Traitement (Collecter, enrichir et envoyer à Elasticsearch) des logs entrants envoyés par beats (forwarder).
Kibana – Fournit une visualisation des événements et des journaux.
Battements – Installé sur les machines clientes et il envoie les journaux à Logstash ou Elasticsearch via le protocole beats.
Prérequis
Installer Java
Elasticsearch nécessite soit OpenJDK ou Oracle JDK disponible sur votre machine.
Ici, pour cette démo, j'utilise OpenJDK. Installez Java à l'aide de la commande ci-dessous avec le package de support wget et HTTPS pour APT.
sudo apt update sudo apt install -y openjdk-8-jdk wget apt-transport-https
Vérifiez la version Java.
java -version
Sortie :
openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.18.04.1-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
Si vous souhaitez utiliser Oracle Java JDK, lisez.
LIRE :Installer Oracle Java JDK 10/8 sur Ubuntu 18.04
LIRE :Installez Oracle Java JDK 8 sur Ubuntu 16.04
Configurer le référentiel ELK
Les packages de pile ELK peuvent être facilement obtenus auprès d'Elastic CO en configurant son dépôt officiel .
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Installer Elasticsearch
Nous allons maintenant installer le serveur Elasticsearch, un moteur de recherche open-source basé sur Lucene. Il fournit un moteur de recherche en texte intégral distribué en temps réel et multi-locataire avec une interface Web (HTTP) et des documents JSON sans schéma.
Installez Elasticsearch à l'aide de la commande suivante, v6.4 au moment de la rédaction de cet article.
sudo apt update sudo apt install -y elasticsearch
Démarrez le service Elasticsearch.
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
Attendez quelques minutes et exécutez la commande ci-dessous pour voir l'état de l'interface Elasticsearch REST.
curl -X GET http://localhost:9200
Sortie :
{ "name" : "nqS7TFZ", "cluster_name" : "elasticsearch", "cluster_uuid" : "vERyh1VpR46G9T21H_3gKQ", "version" : { "number" : "6.4.0", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "595516e", "build_date" : "2018-08-17T23:18:47.308994Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
La sortie ci-dessus confirme qu'Elasticsearch fonctionne correctement.
Installer Logstash
Logstash est un moteur open source de collecte de données et d'analyse de journaux. Il collecte les journaux, les analyse et les stocke sur Elasticsearch pour la recherche. Plus de 160 plugins sont disponibles pour Logstash, ce qui permet de traiter différents types d'événements sans travail supplémentaire.
sudo apt install -y logstash
Créer un certificat SSL pour Logstash (facultatif)
Il est facultatif de configurer le redirecteur (Filebeat) que nous installons sur les machines clientes pour utiliser le certificat SSL pour la transmission sécurisée des journaux.
Créez le certificat SSL avec le nom d'hôte ou le SAN IP.
Option 1 :(Nom d'hôte ou FQDN)
Accédez au répertoire OpenSSL.
cd /etc/ssl/
Maintenant, créez le certificat SSL à l'aide d'OpenSSL. Remplacez server.itzgeek.local avec le nom d'hôte de votre serveur Logstash.
sudo openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout logstash-forwarder.key -out logstash-forwarder.crt -subj /CN=server.itzgeek.local
Ce logstash-forwarder.crt doivent être copiés sur tous les serveurs clients ceux qui envoient des journaux au serveur logstash.
Option 2 :(Adresse IP)
Suivez les étapes ci-dessous pour créer un certificat SSL pour IP SAN.
Au préalable, ajoutez l'adresse IP du serveur Logstash à SubjectAltName dans le fichier de configuration OpenSSL.
sudo nano /etc/ssl/openssl.cnf
Recherchez [ v3_ca ] section et mettez à jour subjectAltName avec l'adresse IP de votre serveur Logstash.
subjectAltName = IP:192.168.1.10
Allez dans le répertoire OpenSSL.
cd /etc/ssl/
Maintenant, créez le certificat SSL en exécutant la commande suivante.
sudo openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout logstash-forwarder.key -out logstash-forwarder.crt
Ce logstash-forwarder.crt doivent être copiés sur tous les serveurs clients ceux qui envoient des journaux au serveur logstash.
Convertir SSL
Convertissez la clé actuelle au format PKCS8 pour que Logstash fonctionne correctement.
sudo openssl pkcs8 -in logstash-forwarder.key -topk8 -nocrypt -out logstash-forwarder.key.pem
Modifiez l'autorisation du fichier en lisible par tout le monde.
sudo chmod 644 /etc/ssl/logstash-forwarder.key.pem
Configurer Logstash
La configuration de Logstash se compose de trois sections, à savoir l'entrée, le filtre et la sortie. Vous pouvez mettre toutes les sections dans un seul fichier ou un fichier séparé pour chaque section, finissez par .conf .
Ici, nous utiliserons un seul fichier pour placer les sections d'entrée, de filtre et de sortie. Créez un fichier de configuration sous /etc/logstash/conf.d/ répertoire.
sudo nano /etc/logstash/conf.d/logstash.conf
Dans la section d'entrée, nous allons configurer Logstash pour qu'il écoute sur le port 5044 les journaux entrants, à partir des beats (transmetteur) qui se trouvent sur les machines clientes.
Ajoutez également les détails du certificat SSL dans la section d'entrée pour une communication sécurisée.
input { beats { port => 5044 # Set to False if you do not SSL ssl => true # Delete below lines if no SSL is used ssl_certificate => "/etc/ssl/logstash-forwarder.crt" ssl_key => "/etc/ssl/logstash-forwarder.key.pem" } }
Dans la section filtre. Nous utiliserons Grok pour analyser les journaux avant de les envoyer à Elasticsearch, pour les stocker.
Le filtre grok suivant recherchera les journaux étiquetés syslog et essaie de les analyser pour créer un index structuré.
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGLINE}" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Pour plus de modèles de filtres GROK, jetez un œil ici .
Dans la section de sortie, nous définirons où les journaux doivent être stockés, évidemment Elasticsearch en cas de pile ELK.
output { elasticsearch { hosts => localhost index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }
Maintenant, démarrez et activez le service Logstash.
sudo systemctl restart logstash sudo systemctl enable logstash
Journaux Logstash :
sudo cat /var/log/logstash/logstash-plain.log
Installer et configurer Kibana
Kibana fournit une visualisation des données stockées sur Elasticsearch. Installez Kibana à l'aide de la commande suivante.
sudo apt install -y kibanaPar défaut, Kibana écoute sur localhost, ce qui signifie que vous ne pouvez pas accéder à l'interface Web de Kibana à partir de machines externes.
Pour activer l'accès, modifiez /etc/kibana/kibana.yml fichier.
sudo nano /etc/kibana/kibana.yml
Modifiez la ligne ci-dessous avec l'adresse IP de votre serveur.
server.host: "192.168.1.10"
En outre, certains cas, Elasticsearch et Kibana s'exécutent sur des machines différentes , alors mettez à jour la ligne ci-dessous avec l'adresse IP du serveur Elasticsearch.
elasticsearch.url: "http://localhost:9200"
Démarrez et activez Kibana au démarrage de la machine.
sudo systemctl restart kibana sudo systemctl enable kibana
Installer Beats
Quatre clients Beat sont disponibles.
Battement de paquets – Analyser les données des paquets réseau.
Filebeat – Un aperçu en temps réel des données de journal.
Meilleur rythme – Obtenez des informations à partir des données d'infrastructure.
Metricbeat – Envoyer les métriques à Elasticsearch.
Assurez-vous que les machines clientes peuvent résoudre le nom d'hôte du serveur Logstash. Si votre environnement n'a pas de serveur DNS , vous devrez alors ajouter une entrée d'hôte pour le serveur Logstash sur la machine cliente.
sudo nano /etc/hosts
Faites une entrée comme ci-dessous.
192.168.1.10 server.itzgeek.local
Installer Filebeat
Filebeat est un agent logiciel qui s'exécute sur la machine cliente distante et envoie les journaux au serveur Logstash pour analyse ou à Elasticsearch pour stockage en fonction de la configuration.
Installez le support HTTPS pour apt.
sudo apt update sudo apt install -y apt-transport-https
Filebeat est disponible sur le référentiel Elastic, vous devez donc le configurer pour l'installation de Filebeat.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Installez Filebeat à l'aide de la commande suivante.
sudo apt update sudo apt install -y filebeat
Configurer Filebeat
Tout d'abord, copiez le fichier logstash-forwarder.crt sur la machine cliente distante.
Ignorez cette étape si vous n'utilisez pas SSL dans Logstash pour une communication sécurisée.scp -pr [email protected]:/etc/ssl/logstash-forwarder.crt /etc/ssl
Modifiez le fichier de configuration de filebeat /etc/filebeat/filebeat.yml pour envoyer les journaux au serveur Logstash.
sudo nano /etc/filebeat/filebeat.yml
La configuration ci-dessous consiste à envoyer les journaux système (/var/log/syslog ) au serveur Logstash. Pour cette démo, j'ai commenté /var/log/*.log pour éviter d'envoyer tous les journaux au serveur Logstash.
. . . filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /var/log/syslog #- /var/log/*.log . . .Dans la section Sorties, commentez la section output.elasticsearch : car nous n'allons pas stocker les journaux sur Elasticsearch.
Maintenant, trouvez la ligne output.logstash : et modifiez les entrées pour envoyer les journaux système à Logstash et mentionnez également l'emplacement du certificat SSL.
Remplacez server.itzgeek.local avec adresse IP du serveur Logstash si vous utilisez un SAN IP.. . . output.logstash: hosts: ["server.itzgeek.local:5044"] # Comment out this line if you are not using SSL on Logstash server ssl.certificate_authorities: ["/etc/ssl/logstash-forwarder.crt"] . . .
Redémarrez le service Filebeat.
sudo systemctl restart filebeat
Le journal de Filebeat se trouve généralement dans son fichier journal.
sudo cat /var/log/filebeat/filebeat
Accéder à l'interface Kibana
Accédez à l'interface Web de Kibana en accédant à l'URL suivante.
http://votre-adresse-ip:5601/OU
http://votre-nom-de-serveur:5601Vous obtiendriez la page d'accueil de Kibana.
Lors de votre premier accès, vous devez mapper l'index filebeat. Accédez à Gestion>> Modèles d'index .
Tapez ce qui suit dans le modèle d'index boîte.
filebeat-*
Vous devriez voir filebeat index quelque chose comme ci-dessus. Cliquez sur Étape suivante .
Sélectionnez @horodatage puis cliquez sur Créer un modèle d'index .
@timestamp
Découvrez les modèles d'index et son mappage.
Cliquez sur Découvrir dans la navigation de gauche pour afficher les journaux entrants des machines clientes.
C'est tout.