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). Les données sont interrogées, récupérées et stockées avec un schéma de document JSON. Elasticsearch est un moteur de recherche évolutif qui peut être utilisé pour rechercher tous les types de documents texte, 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 et des journaux. Il fournit un pipeline en temps réel pour les collectes de données. Logstash collectera vos données de journal, convertira les données en documents JSON et les stockera dans Elasticsearch.
Kibana est un outil de visualisation de données open source pour Elasticsearch. Kibana fournit une jolie interface Web de tableau de bord. Il vous permet de gérer et de visualiser les données d'Elasticsearch. Ce n'est pas seulement beau, mais aussi puissant.
Dans ce tutoriel, je vais vous montrer comment installer et configurer Elastic Stack sur un serveur CentOS 7 pour surveiller les journaux du serveur. Ensuite, je vous montrerai comment installer "Elastic beats" sur CentOS 7 et sur un système d'exploitation client Ubuntu 16.04.
Prérequis
- CentOS 7 64 bits avec 4 Go de RAM – elk-master
- CentOS 7 64 bits avec 1 Go de RAM - client1
- Ubuntu 16.04 64 bits avec 1 Go de RAM - client2
Étape 1 : Préparer le système d'exploitation
Dans ce tutoriel, nous allons désactiver SELinux sur le serveur CentOS 7. Modifiez le fichier de configuration SELinux.
vim /etc/sysconfig/selinux
Modifiez la valeur SELinux de l'application à désactivée.
SELINUX=désactivé
Redémarrez ensuite le serveur.
redémarrer
Connectez-vous à nouveau au serveur et vérifiez l'état de SELinux.
getenforce
Assurez-vous que le résultat est désactivé.
Étape 2 - Installer Java
Java est requis pour le déploiement de la pile élastique. Elasticsearch nécessite Java 8, il est recommandé d'utiliser le JDK Oracle 1.8. Je vais installer Java 8 à partir du package officiel Oracle rpm.
Téléchargez Java 8 JDK avec la commande wget.
wget --no-cookies --no-check-certificate --header "Cookie :gpw_e24=http:%2F%2Fwww.oracle.com%2F ; oraclelicense=accept-securebackup-cookie" "http:// download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"
Installez-le ensuite avec cette commande rpm ;
rpm -ivh jdk-8u77-linux-x64.rpm
Enfin, vérifiez la version de Java JDK pour vous assurer qu'elle fonctionne correctement.
version Java
Vous verrez la version Java du serveur.
Étape 3 - Installer et configurer Elasticsearch
Dans cette étape, nous allons installer et configurer Elasticsearch. Je vais installer Elasticsearch à partir d'un package rpm fourni par elastic.co et le configurer pour qu'il s'exécute sur localhost (pour sécuriser l'installation et m'assurer qu'il n'est pas accessible de l'extérieur).
Avant d'installer Elasticsearch, ajoutez la clé elastic.co au serveur.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Ensuite, téléchargez Elasticsearch 5.1 avec wget puis installez-le.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm
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 un commentaire à la ligne 40. Cela désactive l'échange de mémoire pour Elasticsearch.
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 l'éditeur.
Modifiez maintenant le fichier elasticsearch.service pour la configuration du verrouillage de la mémoire.
vim /usr/lib/systemd/system/elasticsearch.service
Décommentez la ligne LimitMEMLOCK.
LimitMEMLOCK=infinity
Enregistrez et quittez.
Modifiez le fichier de configuration sysconfig pour Elasticsearch.
vim /etc/sysconfig/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 s'exécutera sur l'adresse IP localhost sur le port 9200, nous avons désactivé l'échange de mémoire en activant mlockall sur le serveur CentOS.
Rechargez systemd, activez Elasticsearch pour qu'il démarre au démarrage, puis démarrez le service.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Attendez une seconde pour qu'Eelasticsearch démarre, puis vérifiez les ports ouverts 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é, et vérifiez 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 4 - Installer et configurer Kibana avec Nginx
Dans cette étape, nous allons installer et configurer Kibana avec un serveur Web Nginx. Kibana écoutera sur l'adresse IP de l'hôte local et Nginx agit comme un proxy inverse pour l'application Kibana.
Téléchargez Kibana 5.1 avec wget, puis installez-le avec la commande rpm :
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm
Modifiez maintenant le fichier de configuration de Kibana.
vim /etc/kibana/kibana.yml
Décommentez les lignes de configuration pour server.port, server.host et elasticsearch.url.
server.port :5601
server.host :"localhost"
elasticsearch.url :"http://localhost:9200"
Enregistrez et quittez.
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.
Nginx est disponible dans le référentiel Epel, installez epel-release avec yum.
yum -y install epel-release
Ensuite, installez le package Nginx et httpd-tools.
yum -y install nginx httpd-tools
Le package httpd-tools contient des outils pour le serveur Web, nous utiliserons l'authentification de base htpasswd pour Kibana.
Modifiez le fichier de configuration Nginx et supprimez le 'server { } ' afin que nous puissions ajouter une nouvelle configuration d'hôte virtuel.
cd /etc/nginx/
vim nginx.conf
Supprimez le bloc serveur { }.
Enregistrez le fichier et quittez vim.
Nous devons maintenant créer un nouveau fichier de configuration d'hôte virtuel dans le répertoire conf.d. Créez le nouveau fichier 'kibana.conf' avec vim.
vim /etc/nginx/conf.d/kibana.conf
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 et quittez.
Créez ensuite un nouveau fichier d'authentification de base avec la commande htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TAPEZ VOTRE MOT DE PASSE
Testez la configuration Nginx et assurez-vous qu'il n'y a pas d'erreur. Ajoutez ensuite Nginx pour qu'il s'exécute au démarrage et démarrez Nginx.
nginx -t
systemctl activer nginx
systemctl démarrer nginx
Étape 5 - Installer et configurer Logstash
Dans cette étape, nous allons installer Logsatash et le configurer pour centraliser les journaux de serveur des clients avec filebeat, puis filtrer et transformer les données Syslog et les déplacer dans la réserve (Elasticsearch).
Téléchargez Logstash et installez-le avec rpm.
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm
Générez un nouveau fichier de certificat SSL afin que le client puisse identifier le serveur élastique.
Accédez au répertoire tls et modifiez le fichier openssl.cnf.
cd /etc/pki/tls
vim openssl.cnf
Ajoutez une nouvelle ligne dans la section '[ v3_ca ]' pour l'identification du serveur.
[ v3_ca ]
# Adresse IP du serveur
subjectAltName =IP :10.0.15.10
Enregistrez et quittez.
Générez le fichier de certificat avec la commande openssl.
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out / etc/pki/tls/certs/logstash-forwarder.crt
Les fichiers de certificat se trouvent dans les répertoires '/etc/pki/tls/certs/' et '/etc/pki/tls/private/'.
Ensuite, nous allons créer de nouveaux fichiers de configuration pour Logstash. Nous allons créer un nouveau fichier "filebeat-input.conf" pour configurer les sources de journal pour filebeat, puis un fichier "syslog-filter.conf" pour le traitement syslog et le fichier "output-elasticsearch.conf" pour définir la sortie Elasticsearch.
Accédez au répertoire de configuration logstash et créez les nouveaux fichiers de configuration dans le sous-répertoire 'conf.d'.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Configuration d'entrée :collez la configuration ci-dessous.
input {
bat {
port => 5443
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.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.
Enfin, ajoutez logstash pour démarrer au démarrage et démarrer le service.
sudo systemctl enable logstash
sudo systemctl start logstash
Étape 6 - Installer et configurer Filebeat sur le 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 tutoriel, je vais vous montrer comment installer et configurer 'Filebeat' pour transférer les fichiers journaux de données vers le serveur Logstash via une connexion SSL.
Connectez-vous au serveur client1. Copiez ensuite le fichier de certificat du serveur élastique vers le serveur client1.
ssh [protégé par e-mail]Copiez le fichier de certificat avec la commande scp.
scp [email protected] :~/logstash-forwarder.crt .
TYPE mot de passe du serveur elkCréez un nouveau répertoire et déplacez le fichier de certificat dans ce répertoire.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/Ensuite, importez la clé élastique sur le serveur client1.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchTéléchargez Filebeat et installez-le avec rpm.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpmFilebeat a été installé, accédez au répertoire de configuration et modifiez le fichier "filebeat.yml".
cd /etc/filebeat/
vim filebeat.ymlDans la section des chemins à la ligne 21, ajoutez les nouveaux fichiers journaux. Nous ajouterons deux fichiers '/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 les fichiers de type syslog.
type de document :syslogFilebeat utilise Elasticsearch comme cible de sortie par défaut. Dans ce tutoriel, nous allons le changer en Logshtash. Désactivez la sortie Elasticsearch en ajoutant des commentaires sur les 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 la configuration indiquée ci-dessous.
output.logstash :
# Les hôtes Logstash
hôtes :["10.0.15.10:5443"]
bulk_max_size :1024
ssl.certificate_authorities :["/etc/ pki/tls/certs/logstash-forwarder.crt"]
template.name :"filebeat"
template.path :"filebeat.template.json"
template.overwrite :falseEnregistrez le fichier et quittez vim.
Ajoutez Filebeat pour démarrer au démarrage et démarrez-le.
sudo systemctl enable filebeat
sudo systemctl start filebeatÉtape 7 - Installer et configurer Filebeat sur le client Ubuntu
Connectez-vous au serveur par 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] :~/logstash-forwarder.crt .Créez un nouveau répertoire pour le fichier de certificat et déplacez le fichier dans ce répertoire.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/Ajoutez la clé élastique au serveur.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key ajouter -Téléchargez le package Filebeat .deb et installez-le avec la commande dpkg.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.debAllez dans le répertoire de configuration de filebeat et éditez le fichier 'filebeat.yml' avec vim.
cd /etc/filebeat/
vim filebeat.ymlAjoutez les nouveaux chemins de fichiers journaux dans la section de 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 ci-dessous.
#-------------------------- 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 les valeurs comme indiqué ci-dessous.
output.logstash :
# Les hôtes Logstash
hôtes :["10.0.15.10:5443"]
bulk_max_size :1024
ssl.certificate_authorities :["/etc/ pki/tls/certs/logstash-forwarder.crt"]
template.name :"filebeat"
template.path :"filebeat.template.json"
template.overwrite :falseEnregistrez le fichier et quittez vim.
Ajoutez Filebeat pour démarrer au démarrage et démarrez-le.
sudo systemctl enable filebeat
sudo systemctl start filebeatVérifiez l'état du service.
systemctl status filebeat
Étape 8 - Tester Elastic Stack
Ouvrez votre navigateur Web et visitez le domaine de la pile élastique que vous avez utilisé dans la configuration Nginx, le mien est "elk-stack.co". Connectez-vous en tant qu'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 le bouton 'Créer'.
L'index par défaut a été créé. Si vous avez plusieurs battements sur la pile élastique, vous pouvez configurer le battement par défaut en un seul clic sur le bouton "étoile".
Allez dans la rubrique '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 il y a bien plus que ce que vous pouvez faire avec le tableau de bord Kibana, il suffit de jouer avec les options disponibles.
Elastic Stack a été installé sur un serveur CentOS 7. Filebeat a été installé sur un CentOS 7 et un client Ubuntu.