Elasticsearch est un moteur de recherche open source basé sur Lucene, développé en java. Il fournit un moteur de recherche en texte intégral distribué et mutualisé avec une interface Web HTTP Dashboard (Kibana) et un schéma de documents JSON. Elasticsearch est un moteur de recherche évolutif qui peut être utilisé pour rechercher tous les types de documents, y compris les fichiers journaux. Elasticsearch est le cœur de la "pile élastique" ou pile ELK.
Logstash est un outil open source pour la gestion des événements système et des journaux. Il fournit un pipeline en temps réel pour collecter des données. Logstash collectera le journal ou les données, convertira toutes les données en documents JSON et les stockera dans Elasticsearch.
Kibana est une interface de visualisation de données pour Elasticsearch. Kibana fournit un joli tableau de bord (interfaces web), il vous permet de gérer et de visualiser vous-même toutes les données d'Elasticsearch. Ce n'est pas seulement beau, mais aussi puissant.
Dans ce didacticiel, je vais vous montrer comment installer et configurer Elastic Stack sur un seul serveur Ubuntu 16.04 pour surveiller les journaux du serveur et comment installer 'Elastic beats' sur des PC clients avec le système d'exploitation Ubuntu 16.04 et CentOS 7.
Prérequis
- Serveur Ubuntu 16.04 64 bits avec 4 Go de RAM, nom d'hôte :elk-master
- Client Ubuntu 16.04 64 bits avec 1 Go de RAM, nom d'hôte :elk-client1
- Client CentOS 7 64 bits avec 1 Go de RAM, nom d'hôte :elk-client2
Étape 1 - Installer Java
Java est requis pour le déploiement de la pile élastique. Elasticsearch nécessite Java 8. Il est recommandé d'utiliser Oracle JDK 1.8. Nous allons installer Java 8 à partir d'un référentiel PPA.
Installez le nouveau package 'python-software-properties' afin que nous puissions facilement ajouter un nouveau référentiel avec une commande apt.
sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common apt-transport-https
Ajoutez le nouveau référentiel Java 8 PPA avec la commande 'add-apt-repository', puis mettez à jour le référentiel.
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
Installez Java 8 à partir du référentiel PPA webpub8.
sudo apt-get install -y oracle-java8-installer
Une fois l'installation terminée, assurez-vous que Java est correctement installé sur le système en vérifiant la version de Java.
version Java
Étape 2 - Installer et configurer Elasticsearch
Dans cette étape, nous allons installer et configurer Elasticsearch. Installez Elasticsearch à partir du référentiel élastique et configurez-le pour qu'il s'exécute sur l'adresse IP de l'hôte local.
Avant d'installer Elasticsearch, ajoutez la clé du référentiel élastique au serveur.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key ajouter -
Ajoutez le référentiel elastic 5.x au répertoire 'sources.list.d'.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Mettez à jour le référentiel et installez Elasticsearch 5.1 avec la commande apt ci-dessous.
sudo apt-get update
sudo apt-get install -y elasticsearch
Elasticsearch est installé. Allez maintenant dans le répertoire de configuration et modifiez le fichier de configuration elasticsaerch.yml.
cd /etc/elasticsearch/
vim elasticsearch.yml
Activez le verrouillage de la mémoire pour Elasticsearch en supprimant le commentaire à la ligne 43. Nous faisons cela pour désactiver l'échange de mémoire pour Elasticsearch afin d'éviter de surcharger le serveur.
bootstrap.memory_lock :vrai
Dans le bloc 'Réseau', décommentez les lignes network.host et http.port.
network.host :localhost
http.port :9200
Enregistrez le fichier et quittez vim.
Modifiez maintenant le fichier du service elasticsearch pour la configuration du verrouillage de la mémoire mlockall.
vim /usr/lib/systemd/system/elasticsearch.service
Décommentez la ligne LimitMEMLOCK.
LimitMEMLOCK=infinity
Enregistrez le fichier et quittez.
Modifiez la configuration par défaut d'Elasticsearch dans le répertoire /etc/default.
vim /etc/default/elasticsearch
Décommentez la ligne 60 et assurez-vous que la valeur est "illimitée".
MAX_LOCKED_MEMORY=illimité
Enregistrez et quittez.
La configuration d'Elasticsearch est terminée. Elasticsearch fonctionnera sous l'adresse IP localhost avec le port 9200 et nous avons désactivé la mémoire d'échange en activant mlockall sur le serveur Ubuntu.
Rechargez le fichier du service Elasticsearch et activez-le pour qu'il s'exécute au moment du démarrage, puis démarrez le service.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Attendez une seconde qu'Elasticsearch s'exécute, puis vérifiez le port ouvert sur le serveur, assurez-vous que "l'état" du port 9200 est "LISTEN".
netstat -plntu
Vérifiez ensuite le verrouillage de la mémoire pour vous assurer que mlockall est activé. Vérifiez également qu'Elasticsearch est en cours d'exécution avec les commandes ci-dessous.
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Vous verrez les résultats ci-dessous.
Étape 3 - Installer et configurer Kibana avec Nginx
Dans cette étape, nous allons installer et configurer Kibana derrière un serveur Web Nginx. Kibana écoutera uniquement sur l'adresse IP de l'hôte local et Nginx agit en tant que proxy inverse pour l'application Kibana.
Installez Kibana avec cette commande apt :
sudo apt-get install -y kibana
Modifiez maintenant le fichier de configuration kibana.yml.
vim /etc/kibana/kibana.yml
Décommentez les lignes server.port, server.hos et elasticsearch.url.
server.port :5601
server.host :"localhost"
elasticsearch.url :"http://localhost:9200"
Enregistrez le fichier et quittez vim.
Ajoutez Kibana pour qu'il s'exécute au démarrage et démarrez-le.
sudo systemctl enable kibana
sudo systemctl start kibana
Kibana s'exécutera sur le port 5601 en tant qu'application de nœud.
netstat -plntu
L'installation de Kibana est terminée, nous devons maintenant installer Nginx et le configurer en tant que proxy inverse pour pouvoir accéder à Kibana à partir de l'adresse IP publique.
Ensuite, installez les packages Nginx et apache2-utils.
sudo apt-get install -y nginx apache2-utils
Apache2-utils est un package qui contient des outils pour le serveur Web qui fonctionnent également avec Nginx, nous utiliserons l'authentification de base htpasswd pour Kibana.
Nginx a été installé. Nous devons maintenant créer un nouveau fichier de configuration d'hôte virtuel dans le répertoire Nginx sites-available. Créez un nouveau fichier 'kibana' avec vim.
cd /etc/nginx/
vim sites-available/kibana
Collez la configuration ci-dessous.
server {
listen 80 ;
nom_serveur elk-stack.co ;
auth_basic "Accès restreint" ;
auth_basic_user_file /etc/nginx /.kibana-user ;
emplacement / {
proxy_pass http://localhost:5601 ;
proxy_http_version 1.1 ;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection 'upgrade' ;
proxy_set_header Hôte $host ;
proxy_cache_bypass $http_upgrade ;
}
}
Enregistrez le fichier et quittez vim
Créez un nouveau fichier d'authentification de base avec la commande htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TAPEZ VOTRE MOT DE PASSE
Activez l'hôte virtuel kibana en créant un lien symbolique depuis le fichier kibana dans "sites-available" vers le répertoire "sites-enabled".
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
Testez la configuration de nginx et assurez-vous qu'il n'y a pas d'erreur, puis ajoutez nginx pour qu'il s'exécute au démarrage et redémarrez nginx.
nginx -t
systemctl activer nginx
systemctl redémarrer nginx
Étape 4 - Installer et configurer Logstash
Dans cette étape, nous allons installer et configurer Logsatash pour centraliser les journaux du serveur à partir des sources client avec filebeat, puis filtrer et transformer toutes les données (Syslog) et les transporter vers la réserve (Elasticsearch).
Installez Logstash 5 avec la commande apt ci-dessous.
sudo apt-get install -y logstash
Modifiez le fichier hosts avec vim.
vim /etc/hosts
Ajoutez l'adresse IP et le nom d'hôte du serveur.
10.0.15.10 elk-master
Enregistrez le fichier hosts et quittez l'éditeur.
Générez maintenant un nouveau fichier de certificat SSL avec OpenSSL afin que les sources client puissent identifier le serveur élastique.
cd /etc/logstash/
openssl req -subj /CN=elk-master -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt
Changez le '/CN ' au nom d'hôte du serveur élastique.
Les fichiers de certificat seront créés dans le répertoire '/etc/logstash/'.
Ensuite, nous allons créer les fichiers de configuration pour logstash. Nous allons créer un fichier de configuration 'filebeat-input.conf' comme fichier d'entrée de filebeat, 'syslog-filter.conf' pour le traitement syslog, puis un fichier 'output-elasticsearch.conf' pour définir la sortie Elasticsearch.
Allez dans le répertoire de configuration logstash et créez les nouveaux fichiers de configuration dans le répertoire 'conf.d'.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Saisissez la configuration, collez la configuration ci-dessous.
input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/logstash. crt"
ssl_key => "/etc/logstash/logstash.key"
}
}
Enregistrez et quittez.
Créez le fichier syslog-filter.conf.
vim conf.d/syslog-filter.conf
Collez la configuration ci-dessous.
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}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm :ss", "MMM jj HH:mm:ss" ]
}
}
}
Nous utilisons un plugin de filtre nommé 'grok ' pour analyser les fichiers syslog.
Enregistrez et quittez.
Créez le fichier de configuration de sortie 'output-elasticsearch.conf'.
vim conf.d/output-elasticsearch.conf
Collez la configuration ci-dessous.
sortie {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "% {[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}Enregistrez et quittez.
Lorsque cela est fait, ajoutez logstash pour démarrer au démarrage et démarrer le service.
sudo systemctl enable logstash
sudo systemctl start logstash
Étape 5 - Installer et configurer Filebeat sur un client Ubuntu
Connectez-vous au serveur en tant que root avec un compte ssh.
ssh [protégé par e-mail]Copiez le fichier de certificat sur le client avec la commande scp.
scp [protégé par e-mail] :/etc/logstash/logstash.crt .Modifiez le fichier hosts et ajoutez l'adresse IP elk-master.
vim /etc/hostsAjoutez la configuration ci-dessous à la fin du fichier.
10.0.15.10 elk-masterEnregistrez et quittez.
Nous devons maintenant ajouter la clé élastique au serveur elk-client1.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key ajouter -Nous utiliserons le référentiel élastique avec le transport de téléchargement https, nous devons donc installer le package 'apt-transport-https' sur le serveur.
sudo apt-get install -y apt-transport-httpsAjoutez le référentiel élastique et mettez à jour tous les référentiels Ubuntu.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get updateInstallez maintenant 'filebeat' avec la commande apt.
sudo apt-get install -y filebeatEnsuite, allez dans le répertoire de configuration de filebeat et modifiez le fichier 'filebeat.yml' avec vim.
cd /etc/filebeat/
vim filebeat.ymlAjoutez de nouveaux fichiers journaux sous la configuration des chemins.
chemins :
- /var/log/auth.log
- /var/log/syslogDéfinissez le type de document sur 'syslog'.
type de document :syslogDésactivez la sortie elasticsearch en ajoutant des commentaires aux lignes.
#-------------------------- Sortie Elasticsearch ------------------ ------------
#output.elasticsearch :
# tableau d'hôtes auxquels se connecter.
# hôtes :["localhost:9200"]Activez la sortie logstash, décommentez la configuration et modifiez la valeur comme ci-dessous.
output.logstash :
# Les hôtes Logstash
hôtes :["elk-master:5443"]
bulk_max_size :2048
ssl.certificate_authorities :["/etc/ filebeat/logstash.crt"]
template.name :"filebeat"
template.path :"filebeat.template.json"
template.overwrite :falseEnregistrez et quittez.
Déplacez le fichier de certificat dans le répertoire filebeat.
mv ~/logstash.crt /etc/filebeat/Démarrez filebeat et ajoutez-le pour qu'il s'exécute au démarrage.
sudo systemctl start filebeat
sudo systemctl enable filebeatVérifiez l'état du service.
sudo systemctl status filebeat
Étape 6 - Installer et configurer Filebeat sur un client CentOS
Les Beats sont des expéditeurs de données, des agents légers qui peuvent être installés sur les nœuds clients pour envoyer d'énormes quantités de données de la machine cliente au serveur Logstash ou Elasticsearch. Il y a 4 beats disponibles, 'Filebeat' pour 'Log Files', 'Metricbeat' pour 'Metrics', 'Packetbeat' pour 'Network Data' et 'Winlogbeat' pour le client Windows 'Event Log'.
Dans ce didacticiel, je vais vous montrer comment installer et configurer 'Filebeat' pour envoyer les données de journal au serveur logstash via une connexion SSL sécurisée.
Copiez le fichier de certificat du serveur élastique vers le serveur client1. Connectez-vous au serveur client1.
ssh [protégé par e-mail]Copiez le fichier de certificat avec la commande scp.
scp [email protected] :/etc/logstash/logstash.crt .
TYPE elk-server passwordModifiez le fichier hosts et ajoutez l'adresse du serveur elk-master.
vim /etc/hostsAjoutez l'adresse du serveur elk-master.
10.0.15.10 elk-masterEnregistrez et quittez.
Ensuite, importez la clé élastique sur le serveur elk-client2.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchAjoutez un référentiel élastique au serveur.
cd /etc/yum.repos.d/
vim elastic.repoCollez la configuration ci-dessous.
[elastic-5.x]
name=Référentiel Elastic pour les packages 5.x
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-mdEnregistrez et quittez.
Installez filebeat avec cette commande yum.
sudo yum -y install filebeatFilebeat a été installé, allez maintenant dans le répertoire de configuration et modifiez le fichier 'filebeat.yml'.
cd /etc/filebeat/
vim filebeat.ymlÀ la ligne 21 de la section des chemins, ajoutez de nouveaux fichiers journaux, nous ajouterons deux fichiers ici :'/var/log/secure' pour l'activité ssh et '/var/log/messages' pour le journal du serveur.
chemins :
- /var/log/secure
- /var/log/messagesAjoutez une nouvelle configuration à la ligne 26 pour définir le type de fichier sur 'syslog'.
type de document :syslogPar défaut, filebeat utilise elasticsearch comme sortie. Dans ce tutoriel, nous allons le changer en logshtash. Désactivez la sortie elasticsearch en ajoutant des commentaires aux lignes 83 et 85.
Désactivez la sortie elasticsearch.
#-------------------------- Sortie Elasticsearch ------------------ ------------
#output.elasticsearch :
# tableau d'hôtes auxquels se connecter.
# hôtes :["localhost:9200"]Ajoutez maintenant la nouvelle configuration de sortie logstash, décommentez la configuration de sortie logstash et remplacez toutes les valeurs par celles qui sont affichées dans la configuration ci-dessous.
output.logstash :
# Les hôtes Logstash
hôtes :["elk-master:5443"]
bulk_max_size :2048
ssl.certificate_authorities :["/etc/ filebeat/logstash.crt"]
template.name :"filebeat"
template.path :"filebeat.template.json"
template.overwrite :falseEnregistrez et quittez.
Ajoutez filebeat pour démarrer au démarrage et démarrez-le.
sudo systemctl enable filebeat
sudo systemctl start filebeatVous pouvez maintenant vérifier et regarder le fichier journal filebeat pour vous assurer qu'il fonctionne correctement.
tail -f /var/log/filebeat/filebeat
Étape 8 - Tester
Ouvrez votre navigateur Web et visitez le domaine de la pile élastique que vous avez configuré dans la configuration nginx, le mien est "elk-stack.co", saisissez le nom d'utilisateur administrateur avec votre mot de passe et appuyez sur Entrée pour vous connecter au tableau de bord Kibana.
Créez un nouvel index par défaut 'filebeat-* ' et cliquez sur 'Créer '.
L'index par défaut a été créé. Si vous avez plusieurs battements sur la pile élastique, vous pouvez configurer un battement par défaut d'un simple clic sur l'étoile ' bouton.
Allez dans 'Découvrir ' et vous verrez tous les fichiers journaux des serveurs elk-client1 et elk-client2.
Un exemple de sortie JSON du journal du serveur elk-client1 pour une connexion ssh non valide.
Et vous pouvez faire bien plus avec le tableau de bord Kibana, essayez-le !
Elastic Stack a été installé sur un serveur Ubuntu 16.04, filebeat a été installé sur les serveurs clients Ubuntu et CentOS.