Stack elastico ampiamente noto come stack ELK , è un gruppo di prodotti opensource come Elasticsearch , Archiviazione e Kibana . Elastic Stack è sviluppato e mantenuto dalla società Elastic. Utilizzando lo stack elastico, è possibile inviare i log di sistema a Logstash, è un motore di raccolta dati che accetta i log oi dati da tutte le fonti e normalizza i log e quindi inoltra i log a Elasticsearch per l'analisi , indicizzazione , cerca e archiviazione e infine utilizzando Kibana si possono rappresentare i dati visualizzati, utilizzando Kibana possiamo anche creare grafici e diagrammi interattivi basati sulle query dell'utente.
In questo articolo dimostreremo come configurare il cluster ELK Stack (Multi Node Elastic Stack) sui server RHEL 8/CentOS 8. Di seguito sono riportati i dettagli per il mio Cluster Stack Elastico:
Ricerca elastica:
- Tre server con RHEL 8 / CentOS 8 minimo
- IP e nome host – 192.168.56.40 (elasticsearch1.linuxtechi. local), 192.168.56.50 (elasticsearch2.linuxtechi. local), 192.168.56.60 (elasticsearch3.linuxtechi. local)
Archivio:
- Due server con RHEL 8 / CentOS 8 minimo
- IP e nome host – 192.168.56.20 (logstash1.linuxtechi. local) , 192.168.56.30 (logstash2.linuxtechi. local)
Kibana:
- Un server con RHEL 8 / CentOS 8 minimo
- Nome host – kibana.linuxtechi.local
- IP – 192.168.56.10
Filebeat:
- Un server con CentOS 7 minimo
- IP e nome host – 192.168.56.70 (server web)
Iniziamo con la configurazione del cluster Elasticsearch,
Installazione del cluster Elasticsearch a 3 nodi
Come ho già affermato di aver mantenuto i nodi per il cluster Elasticsearch, accedere a ciascun nodo, impostare il nome host e configurare i repository yum/dnf.
Utilizzare il comando hostnamectl seguente per impostare il nome host sui rispettivi nodi,
[[email protected] ~]# hostnamectl set-hostname "elasticsearch1.linuxtechi. local"[[email protected] ~]# exec bash[[email protected] ~]#[[email protected] ~]# hostnamectl set -hostname "elasticsearch2.linuxtechi. local"[[email protected] ~]# exec bash[[email protected] ~]#[[email protected] ~]# hostnamectl set-hostname "elasticsearch3.linuxtechi. local"[[email protected] ] ~]# exec bash[[email protetta] ~]#
Per CentOS 8 System non è necessario configurare alcun repository di pacchetti del sistema operativo e per RHEL 8 Server, se disponi di un abbonamento valido e quindi lo hai sottoscritto con Red Hat per ottenere il repository di pacchetti. Nel caso in cui desideri configurare il repository yum/dnf locale per i pacchetti del sistema operativo, fai riferimento all'URL seguente:
Come configurare il repository Yum/DNF locale sul server RHEL 8 utilizzando DVD o file ISO
Configura il repository del pacchetto Elasticsearch su tutti i nodi, crea un file elastic.repo nella cartella /etc/yum.repos.d/ con il seguente contenuto
~]# vi /etc/yum.repos.d/elastic.repo[elasticsearch-7.x]name=Repository Elasticsearch per packagesbaseurl 7.x=https://artifacts.elastic.co/packages/7. x/ymgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md
salva ed esci dal file
Utilizza il comando rpm di seguito su tutti e tre i nodi per importare la chiave di firma pubblica di Elastic
~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Aggiungi le seguenti righe nel file /etc/hosts su tutti e tre i nodi,
192.168.56.40 elasticsearch1.linuxtechi.local192.168.56.50 elasticsearch2.linuxtechi.local192.168.56.60 elasticsearch3.linuxtechi.local
Installa Java su tutti e tre i nodi usando il comando yum / dnf,
[[email protected] ~]# dnf install java-openjdk -y[[email protected] ~]# dnf install java-openjdk -y[[email protected] ~]# dnf install java-openjdk -y
Installa Elasticsearch utilizzando il comando sotto dnf su tutti e tre i nodi,
[[email protected] ~]# dnf install elasticsearch -y[[email protected] ~]# dnf install elasticsearch -y[[email protected] ~]# dnf install elasticsearch -y
Nota: Nel caso in cui il firewall del sistema operativo sia abilitato e in esecuzione in ciascun nodo Elasticsearch, consenti le seguenti porte utilizzando il comando sotto firewall-cmd,
~]# firewall-cmd --permanent --add-port=9300/tcp~]# firewall-cmd --permanent --add-port=9200/tcp~]# firewall-cmd --reload
Configura Elasticsearch, modifica il file “/etc/elasticsearch/elasticsearch.yml ” su tutti e tre i nodi e aggiungi quanto segue,
~]# vim /etc/elasticsearch/elasticsearch.yml…………………………………………cluster.name:opn-clusternode.name:elasticsearch1.linuxtechi.localnetwork.host:192.168 .56.40http.port:9200discovery.seed_hosts:["elasticsearch1.linuxtechi.local", "elasticsearch2.linuxtechi.local", "elasticsearch3.linuxtechi.local"]cluster.initial_master_nodes:["elasticsearch1.linuxtechi.local", "elasticsearch2 .linuxtechi.local", "elasticsearch3.linuxtechi.local"]……………………………………………
Nota: su Ogni nodo, aggiungi il nome host corretto nel parametro node.name e l'indirizzo IP nel parametro network.host e gli altri parametri rimarranno gli stessi.
Ora avvia e abilita il servizio Elasticsearch su tutti e tre i nodi utilizzando il seguente comando systemctl,
~]# systemctl daemon-reload~]# systemctl abilita elasticsearch.service~]# systemctl avvia elasticsearch.service
Utilizza il comando 'ss' di seguito per verificare se il nodo elasticsearch è in ascolto sulla porta 9200,
[[email protetta] ~]# ss -tunlp | grep 9200tcp LISTEN 0 128 [::ffff:192.168.56.40]:9200 *:* users:(("java",pid=2734,fd=256)) > # [[email]Utilizza i seguenti comandi curl per verificare lo stato del cluster Elasticsearch
[[email protected] ~]# curl http://elasticsearch1.linuxtechi.local:9200[[email protected] ~]# curl -X GET http://elasticsearch2.linuxtechi.local:9200/_cluster/health ?carinoL'output sopra il comando sarebbe qualcosa come sotto,
L'output sopra conferma che abbiamo creato correttamente un cluster Elasticsearch a 3 nodi e anche lo stato del cluster è verde.
Nota: Se desideri modificare la dimensione dell'heap JVM, devi modificare il file "/etc/elasticsearch/jvm.options ” e modifica i parametri seguenti in base al tuo ambiente,
- -Xms1g
- -Xmx1g
Passiamo ora ai nodi Logstash,
Installa e configura Logstash
Esegui i seguenti passaggi su entrambi i nodi Logstash,
Accedi a entrambi i nodi imposta il nome host usando il seguente comando hostnamectl,
[[email protected] ~]# hostnamectl set-hostname "logstash1.linuxtechi.local"[[email protected] ~]# exec bash[[email protected] ~]#[[email protected] ~]# hostnamectl set -hostname "logstash2.linuxtechi.local"[[email protected] ~]# exec bash[[email protected] ~]#
Aggiungi le seguenti voci nel file /etc/hosts in entrambi i nodi logstash
~]# vi /etc/hosts192.168.56.40 elasticsearch1.linuxtechi.local192.168.56.50 elasticsearch2.linuxtechi.local192.168.56.60 elasticsearch3.linuxtechi.local
Salva ed esci dal file
Configura il repository Logstash su entrambi i nodi, crea un filelogstash.repo nella cartella /ete/yum.repos.d/ con il seguente contenuto,
~]# vi /etc/yum.repos.d/logstash.repo[elasticsearch-7.x]name=repository Elasticsearch per packagesbaseurl 7.x=https://artifacts.elastic.co/packages/7. x/ymgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md
Salva ed esci dal file, esegui il seguente comando rpm per importare la chiave di firma
~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Installa Java OpenJDK su entrambi i nodi usando il seguente comando dnf,
~]# dnf install java-openjdk -y
Esegui il seguente comando dnf da entrambi i nodi per installare logstash,
[[email protetta] ~]# dnf install logstash -y[[email protetta] ~]# dnf install logstash -y
Ora configura logstash, esegui i passaggi seguenti su entrambi i nodi logstash,
Crea un file logstash conf, per questo prima abbiamo copia del file logstash di esempio in '/etc/logstash/conf.d/'
# cd /etc/logstash/# cp logstash-sample.conf conf.d/logstash.conf
Modifica il file conf e aggiorna il seguente contenuto,
# vi conf.d/logstash.confinput { beats { port => 5044 }}output { elasticsearch { hosts => ["http://elasticsearch1.linuxtechi.local:9200", "http://elasticsearch2. linuxtechi.local:9200", "http://elasticsearch3.linuxtechi.local:9200"] index => "%{[@metadata][beat]}-%{[@metadata][versione]}-%{+ AAAA.MM.gg}" #user => "elastico" #password => "cambiami" }}
Nella sezione di output, nel parametro hosts specifica l'FQDN di tutti e tre i nodi Elasticsearch, gli altri parametri rimangono così come sono.
Consenti la porta logstash "5044" nel firewall del sistema operativo utilizzando il seguente comando firewall-cmd,
~ # firewall-cmd --permanent --add-port=5044/tcp~ # firewall-cmd –reload
Ora avvia e abilita il servizio Logstash, esegui i seguenti comandi systemctl su entrambi i nodi
~]# systemctl avvia logstash~]# systemctl abilita logstash
Utilizza il comando ss di seguito per verificare se il servizio logstash inizia ad essere in ascolto su 5044,
[[email protetta] ~]# ss -tunlp | grep 5044tcp ASCOLTA 0 128 *:5044 *:* users:(("java",pid=2416,fd=96)) # [[e-mail]L'output sopra conferma che logstash è stato installato e configurato correttamente. Passiamo all'installazione di Kibana.
Installa e configura Kibana
Accedi al nodo Kibana, imposta il nome host con hostnamectl comando,
[[email protected] ~]# hostnamectl set-hostname "kibana.linuxtechi.local"[[email protected] ~]# exec bash[[email protected] ~]#Modifica il file /etc/hosts e aggiungi le seguenti righe
192.168.56.40 elasticsearch1.linuxtechi.local192.168.56.50 elasticsearch2.linuxtechi.local192.168.56.60 elasticsearch3.linuxtechi.localImposta il repository Kibana usando il seguente,
[[email protetta] ~]# vi /etc/yum.repos.d/kibana.repo[elasticsearch-7.x]name=Repository Elasticsearch per 7.x packagesbaseurl=https://artifacts.elastic.co /packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md[[email protected] ~]# rpm --import https:// artifacts.elastic.co/GPG-KEY-elasticsearchEsegui sotto il comando dnf per installare kibana,
[[email protetta] ~]# yum install kibana -yConfigura Kibana modificando il file “/etc/kibana/kibana.yml ”
[[email protetta] ~]# vim /etc/kibana/kibana.yml…………server.host:"kibana.linuxtechi.local"server.name:"kibana.linuxtechi.local"elasticsearch.hosts:["http://elasticsearch1.linuxtechi.local:9200", "http://elasticsearch2.linuxtechi.local:9200", "http://elasticsearch3.linuxtechi.local:9200"]…………Avvia e abilita il servizio kibana
[[email protected] ~]# systemctl avvia kibana[[email protected] ~]# systemctl abilita kibanaConsenti la porta Kibana "5601" nel firewall del sistema operativo,
[[email protected] ~]# firewall-cmd --permanent --add-port=5601/tcpsuccess[[email protected] ~]# firewall-cmd --reloadsuccess[[email protected] ~]#Accedi al portale/GUI di Kibana utilizzando il seguente URL:
http://kibana.linuxtechi.local:5601
Dalla dashboard, possiamo anche controllare lo stato del nostro cluster Elastic Stack
Ciò conferma che abbiamo configurato correttamente il cluster Elastic Stack multinodo su RHEL 8 / CentOS 8.
Ora inviamo alcuni log ai nodi logstash tramite filebeat da altri server Linux, nel mio caso ho un server CentOS 7, spingerò tutti i log importanti di questo server in logstash tramite filebeat.
Accedi al server CentOS 7 e installa il pacchetto filebeat utilizzando il seguente comando rpm,
[[email protetta] ~]# rpm -ivh https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpmRetrieving https://artifacts.elastic.co/downloads /beats/filebeat/filebeat-7.3.1-x86_64.rpmPreparazione... ####################################### [100%]Aggiornamento/installazione... 1:filebeat-7.3.1-1 #################################### ## [100%][[email protetta] ~]#Modifica il file /etc/hosts e aggiungi le seguenti voci,
192.168.56.20 logstash1.linuxtechi.local192.168.56.30 logstash2.linuxtechi.localOra configura il filebeat in modo che possa inviare i log ai nodi logstash usando la tecnica di bilanciamento del carico, modifica il file “/etc/filebeat/filebeat.yml ” e aggiungi i seguenti parametri,
Sotto "filebeat.inputs: ' modifica sezione 'abilitato:falso ' a 'abilitato:vero ' e sotto i "percorsi ” parametro specifica i file di registro della posizione che possiamo inviare a logstash, In output la sezione Elasticsearch commenta “output.elasticsearch ” e host parametro. Nella sezione Output di Logstash, rimuovi i commenti per "output.logstash: " e "host: " e aggiungi entrambi i nodi logstash nei parametri host e anche "bilanciamento del carico:vero ”.
[[email protetta] ~]# vi /etc/filebeat/filebeat.yml……………………….filebeat.inputs:- type:log activate:true paths: - /var/log/messages - /var/log/dmesg - /var/log/maillog - /var/log/boot.log#output.elasticsearch: # hosts:["localhost:9200"]output.logstash: hosts:["logstash1.linuxtechi. local:5044", "logstash2.linuxtechi.local:5044"] bilanciamento del carico:true………………………………………Avvia e abilita il servizio filebeat usando sotto i comandi systemctl,
[[email protected] ~]# systemctl start filebeat[[email protected] ~]# systemctl enable filebeatOra vai alla GUI di Kibana, verifica se i nuovi indici sono visibili o meno,
Scegli l'opzione Gestione dalla barra laterale sinistra e quindi fai clic su Gestione indice in Elasticsearch,
Come possiamo vedere sopra, gli indici ora sono visibili, creiamo un pattern di indice,
Fare clic su "Modelli indice" dalla sezione Kibana, ci verrà chiesto di creare un nuovo modello, fare clic su "Crea modello indice ” e specifica il nome del pattern come “filebeat ”
Fare clic su Passaggio successivo
Scegli "Data e ora ” come filtro temporale per il pattern dell'indice e quindi fare clic su “Crea pattern dell'indice”
Ora fai clic su Scopri per vedere il modello di indice filebeat in tempo reale,
Ciò conferma che l'agente Filebeat è stato configurato correttamente e siamo in grado di vedere i registri in tempo reale sulla dashboard di Kibana.
Questo è tutto da questo articolo, non esitare a condividere il tuo feedback e commenti nel caso in cui questi passaggi ti aiutino a configurare il cluster di stack elastico multinodo sul sistema RHEL 8 / CentOS 8.