Ricerca nel sito web

Come installare Elasticsearch, Logstash e Kibana (ELK Stack) su CentOS/RHEL 7


Se sei una persona che è, o è stata in passato, incaricata di ispezionare e analizzare i log di sistema in Linux, sai quale incubo può diventare questo compito se più servizi vengono monitorati contemporaneamente.

In passato, tale attività doveva essere eseguita principalmente manualmente, con ciascun tipo di registro gestito separatamente. Fortunatamente, la combinazione di Elasticsearch, Logstash e Kibana sul lato server, insieme a Filebeat sul client lato, fa sì che oggi quel compito un tempo difficile sembri una passeggiata nel parco.

I primi tre componenti formano quello che viene chiamato stack ELK, il cui scopo principale è raccogliere i log da più server contemporaneamente (noto anche come logging centralizzato).

Lettura consigliata: 4 buoni strumenti di monitoraggio e gestione dei log open source per Linux

Un'interfaccia Web integrata basata su Java consente di ispezionare rapidamente i registri a colpo d'occhio per un confronto e una risoluzione dei problemi più semplici. Questi log del client vengono inviati a un server centrale da Filebeat, che può essere descritto come un agente di log shipping.

Vediamo come tutti questi pezzi si incastrano. Il nostro ambiente di test sarà composto dalle seguenti macchine:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Tieni presente che i valori RAM forniti qui non sono prerequisiti rigidi, ma valori consigliati per un'implementazione corretta dello stack ELK sul server centrale. Meno RAM sui client non farà molta differenza, se non addirittura nulla.

Installazione di ELK Stack sul server

Iniziamo installando lo stack ELK sul server, insieme a una breve spiegazione su cosa fa ciascun componente:

  1. Elasticsearch memorizza i log inviati dai client.
  2. Logstash elabora tali registri.
  3. Kibana fornisce l'interfaccia web che ci aiuterà a ispezionare e analizzare i registri.

Installare i seguenti pacchetti sul server centrale. Innanzitutto installeremo Java JDK versione 8 (aggiornamento 102, l'ultimo al momento in cui scrivo), che è una dipendenza dei componenti ELK.

Potresti voler controllare prima nella pagina dei download Java qui per vedere se è disponibile un aggiornamento più recente.

yum update
cd /opt
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
rpm -Uvh jre-8u102-linux-x64.rpm

È ora di verificare se l'installazione è stata completata correttamente:

java -version

Per installare le ultime versioni di Elasticsearch, Logstash e Kibana, dovremo creare manualmente i repository per yum come segue:

Abilita il repository Elasticsearch

1. Importa la chiave GPG pubblica Elasticsearch nel gestore pacchetti RPM:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. Inserisci le seguenti righe nel file di configurazione del repository elasticsearch.repo:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Installa il pacchetto Elasticsearch.

yum install elasticsearch

Una volta completata l'installazione, ti verrà richiesto di avviare e abilitare elasticsearch:

4. Avvia e attiva il servizio.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Consenti il traffico attraverso la porta TCP 9200 nel tuo firewall:

firewall-cmd --add-port=9200/tcp
firewall-cmd --add-port=9200/tcp --permanent

6. Controlla se Elasticsearch risponde a semplici richieste su HTTP:

curl -X GET http://localhost:9200

L'output del comando precedente dovrebbe essere simile a:

Assicurati di completare i passaggi precedenti e poi procedi con Logstash. Poiché sia Logstash che Kibana condividono la chiave Elasticsearch GPG, non è necessario reimportarla prima di installare i pacchetti.

Lettura consigliata: gestione dei registri di sistema (configurazione, rotazione e importazione nel database) in CentOS 7

Abilita il repository Logstash

7. Inserisci le seguenti righe nel file di configurazione del repository logstash.repo:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Installa il pacchetto Logstash:

yum install logstash

9. Aggiungi un certificato SSL basato sull'indirizzo IP del server ELK nella riga seguente sotto la sezione [ v3_ca ] in /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Genera un certificato autofirmato valido per 365 giorni:

cd /etc/pki/tls
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

11. Configura i file di input, output e filtro Logstash:

Input: crea /etc/logstash/conf.d/input.conf e inserisci le seguenti righe. Ciò è necessario affinché Logstash “impara” come elaborare i beat provenienti dai client. Assicurati che il percorso del certificato e della chiave corrisponda ai percorsi corretti come indicato nel passaggio precedente:

input {
  beats {
	port => 5044
	ssl => true
	ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
	ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

File di output (/etc/logstash/conf.d/output.conf):


output {
  elasticsearch {
	hosts => ["localhost:9200"]
	sniffing => true
	manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
	document_type => "%{[@metadata][type]}"
  }
}

File di filtro (/etc/logstash/conf.d/filter.conf). Registreremo i messaggi syslog per semplicità:


filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Verifica i file di configurazione Logstash.

service logstash configtest

13. Avvia e attiva logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Configura il firewall per consentire a Logstash di ottenere i registri dai client (porta TCP 5044):

firewall-cmd --add-port=5044/tcp
firewall-cmd --add-port=5044/tcp --permanent

Abilita il repository Kibana

14. Inserisci le seguenti righe nel file di configurazione del repository kibana.repo:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Installa il pacchetto Kibana:

yum install kibana

16. Avvia e abilita Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Assicurati di poter accedere all'interfaccia web di Kibana da un altro computer (consenti il traffico sulla porta TCP 5601):

firewall-cmd --add-port=5601/tcp
firewall-cmd --add-port=5601/tcp --permanent

18. Avvia Kibana (http://192.168.0.29:5601) per verificare di poter accedere all'interfaccia web:

Torneremo qui dopo aver installato e configurato Filebeat sui client.

Lettura consigliata: monitora gli accessi del server in tempo reale con lo strumento "Log.io" in Linux

Installa Filebeat sui server client

Ti mostreremo come farlo per il Client n. 1 (ripeti per il Client n. 2 in seguito, modificando i percorsi se applicabile alla tua distribuzione).

1. Copia il certificato SSL dal server ai client:

scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Importa la chiave GPG pubblica Elasticsearch nel gestore pacchetti RPM:

rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Crea un repository per Filebeat (/etc/yum.repos.d/filebeat.repo) in CentOS distribuzioni basate:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Configura il sorgente per installare Filebeat su Debian e i suoi derivati:

aptitude install apt-transport-https
echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
aptitude update

5. Installa il pacchetto Filebeat:

yum install filebeat        [On CentOS and based Distros]
aptitude install filebeat   [On Debian and its derivatives]

6. Avvia e attiva Filebeat:

systemctl start filebeat
systemctl enable filebeat

Configura Filebeat

Una parola di cautela qui. La configurazione Filebeat è archiviata in un file YAML, che richiede un rientro rigoroso. Fai attenzione a questo mentre modifichi /etc/filebeat/filebeat.yml come segue:

  1. In percorsi, indicare quali file di registro devono essere “spediti” al server ELK.
  2. In prospettori:
input_type: log
document_type: syslog
  1. In output:

    1. Decommenta la riga che inizia con logstash.
    2. Indica l'indirizzo IP del tuo server ELK e la porta su cui Logstash è in ascolto negli host.
    3. Assicurati che il percorso del certificato punti al file effettivo che hai creato nel Passaggio I (sezione Logstash) sopra.

I passaggi precedenti sono illustrati nella seguente immagine:

Salva le modifiche, quindi riavvia Filebeat sui client:

systemctl restart filebeat

Una volta completati i passaggi precedenti sui client, sentiti libero di procedere.

Testare Filebeat

Per verificare che i log dai client possano essere inviati e ricevuti correttamente, eseguire il seguente comando sul server ELK:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

L'output dovrebbe essere simile a (nota come i messaggi da /var/log/messages e /var/log/secure vengono ricevuti da client1 e cliente2):

Altrimenti controlla se sono presenti errori nel file di configurazione Filebeat.

journalctl -xe

dopo aver tentato di riavviare Filebeat ti indicherà le righe incriminate.

Testare Kibana

Dopo aver verificato che i log vengano spediti dai client e ricevuti correttamente sul server. La prima cosa che dovremo fare in Kibana è configurare un modello di indice e impostarlo come predefinito.

È possibile descrivere un indice come un database completo in un contesto di database relazionale. Sceglieremo filebeat-* (oppure puoi utilizzare criteri di ricerca più precisi come spiegato nella documentazione ufficiale).

Inserisci filebeat-* nel Nome indice o nel campo modello, quindi fai clic su Crea:

Tieni presente che in seguito ti sarà consentito inserire criteri di ricerca più dettagliati. Successivamente, fai clic sulla stella all'interno del rettangolo verde per configurarla come modello di indice predefinito:

Infine, nel menu Scopri troverai diversi campi da aggiungere al report di visualizzazione dei log. Passa il mouse sopra di essi e fai clic su Aggiungi:

I risultati verranno visualizzati nell'area centrale dello schermo come mostrato sopra. Sentiti libero di giocare (aggiungere e rimuovere campi dal rapporto di registro) per acquisire familiarità con Kibana.

Per impostazione predefinita, Kibana mostrerà i record elaborati durante gli ultimi 15 minuti (vedi angolo in alto a destra) ma puoi modificare questo comportamento selezionando un altro intervallo di tempo:

Riepilogo

In questo articolo abbiamo spiegato come impostare uno stack ELK per raccogliere i log di sistema inviati da due client, una macchina CentOS 7 e una Debian 8.

Ora puoi fare riferimento alla documentazione ufficiale di Elasticsearch e trovare maggiori dettagli su come utilizzare questa configurazione per ispezionare e analizzare i tuoi log in modo più efficiente.

Se avete domande, non esitate a chiedere. Restiamo in attesa della vostra risposta.