Introduzione
Lo stack ELK è un popolare set di strumenti composto da Elasticsearch, Logstash e Kibana. Questi tre strumenti formano uno stack software che può funzionare come un potente strumento centralizzato di analisi dei dati di rete e visualizzazione dei log del server. Lo stack ELK è inoltre progettato per essere molto in grado di scalare in orizzontale su più server per il bilanciamento del carico. In questa procedura installeremo tutti i componenti dello stack ELK su un singolo server.
Prerequisiti
- Un server che esegue Debian 8. Se non disponi già di un server, Atlantic.net offre server di hosting VPS affidabili che puoi avviare in meno di 30 secondi.
Sono supportati altri sistemi operativi, ma questo articolo si concentra su Debian 8.
Installazione di ELK Stack su Debian 8
Sudo
Dal punto di vista della sicurezza è generalmente sconsigliato lavorare come utente root. Usando sudo
consente di eseguire comandi che richiedono privilegi di root da un utente non root. Per impostazione predefinita, Debian non include sudo
pacchetto, quindi lo installeremo.
apt-get install sudo
Dovrai quindi aggiungere l'account utente standard a sudo
gruppo che si desidera essere in grado di eseguire i comandi dei privilegi di root. Sostituisci <username>
con il nome utente dell'account.
adduser <username> sudo
Esci e accedi nuovamente con il tuo nuovo utente e possiamo continuare.
La prima volta che usi sudo
in una sessione ti chiederà la password dell'utente corrente.
Installazione di Elasticsearch
Iniziamo il processo installando Java sul nostro server.
Elasticsearch, il componente di ricerca e indicizzazione dei dati dello stack ELK, richiede l'esecuzione di Java. Installeremo la versione OpenJDK 7, tuttavia puoi installare qualsiasi JRE elencato nella matrice di supporto per Elasticsearch.
Per prima cosa, dovremo aggiornare gli elenchi dei pacchetti sul nostro server.
sudo apt-get update
Ora possiamo installare JRE.
sudo apt-get install openjdk-7-jre
Questa installazione potrebbe richiedere del tempo poiché ci sono molte dipendenze che APT può risolvere.
Una volta terminato, possiamo installare Elasticsearch. La versione di Elasticsearch nei repository Debian ufficiali è molto vecchia e non è supportata dalle versioni più recenti di Kibana, quindi aggiungeremo il repository elastic.co al nostro server e installeremo Elasticsearch da lì.
Scarica e installa la chiave di firma del repository per elastic.co.
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Successivamente possiamo aggiungere il repository a /etc/apt/sources.list.d/
directory.
echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/Elasticsearch-2.x.list
A questo punto è necessario aggiornare nuovamente gli elenchi dei pacchetti, che aggiungerà la versione più recente di Elasticsearch dal repository elastic.co agli elenchi dei pacchetti.
sudo apt-get update
Ora possiamo installare Elasticsearch.
sudo apt-get install elasticsearch
Dovremo anche configurare il servizio Elasticsearch per l'avvio all'avvio del sistema.
sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service
Questo è tutto! Ora puoi avviare il servizio Elasticsearch.
sudo systemctl start elasticsearch.service
E assicurati che sia attivo.
systemctl status elasticsearch.service
Configurazione Elasticsearch
Nel nostro caso non è necessario, ma se avrai Kibana ed Elasticsearch in esecuzione su server diversi (come fanno molte distribuzioni ELK), dovrai modificare il file di configurazione di Elasticsearch, /etc/elasticsearch/elasticsearch.yml
sul server Elasticsearch e aggiungi le seguenti due righe ovunque nel file:
http.cors.allow-origin: "/.*/" http.cors.enabled: true
Allo stesso file, aggiungi una riga per denominare il cluster Elasticsearch. Il nome predefinito è elasticsearch.
cluster.name: elasticcluster
Modifica del file di configurazione di Elasticsearch
Assicurati di non aggiungere righe o spazi vuoti al file di configurazione, poiché i file YAML sono sensibili agli spazi bianchi.
E poi riavvia il demone Elasticsearch.
sudo systemctl restart elasticsearch.service
Ancora una volta, assicurati che il demone funzioni correttamente.
systemctl status elasticsearch.service
Stato del servizio Elasticsearch
Installazione di Logstash
Possiamo installare Logstash, il componente di log shipping e trasformazione dello stack ELK, in modo molto simile a Elasticsearch.
Se hai seguito questa procedura, avrai già aggiunto la chiave di firma del pacchetto Elastic.co. Quindi possiamo saltare quella parte e aggiungere immediatamente il repository logstash Elastic.co al nostro /etc/apt/sources.list.d/
.
echo "deb http://packages.elastic.co/logstash/2.0/debian stable main" | sudo tee -a /etc/apt/sources.list
E, naturalmente, aggiorna gli elenchi dei pacchetti.
sudo apt-get update
Successivamente, possiamo installare Logstash.
sudo apt-get install logstash
Come con Elasticsearch, dovremo abilitare Logstash all'avvio del sistema.
sudo systemctl daemon-reload sudo systemctl enable logstash.service
Ora possiamo avviare Logstash.
sudo systemctl start logstash.service
E assicurati che sia in esecuzione.
systemctl status logstash.service
Ora possiamo passare alla configurazione!
Configurazione logstash
Logstash utilizza i file di configurazione che si trovano in /etc/logstash/conf.d
. Dovremo creare tre nuovi file in quella directory poiché non esiste una configurazione predefinita.
cd /etc/logstash/conf.d sudo touch 01-input.conf 10-syslog.conf 30-lumberjack-output.conf
Useremo il primo file, 01-input.conf
, per specificare come Lumberjack ascolterà i log in arrivo.
Apri il file per la modifica (sostituendo l'editor di testo che preferisci, se hai una preferenza).
sudo editor 01-input.conf
Aggiungi il seguente blocco:
input { lumberjack { port => 5000 type => "logs" ssl_certificate => "/etc/ssl/certs/logstash-forwarder.crt" ssl_key => "/etc/ssl/logstash-forwarder.key" } }
Salva e chiudi il file.
Non preoccuparti ancora dei certificati SSL. Li genereremo a breve.
Successivamente, dobbiamo aggiungere una configurazione di filtro a 10-syslog.conf
. Un filtro può confrontare i messaggi in arrivo (log) e applicare trasformazioni ai dati prima di indicizzarli in Elasticsearch.
Apri il file nel tuo editor,
sudo editor 10-syslog.conf
e aggiungi quanto segue:
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}" ] } syslog_pri { } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Questo filtro intercetta tutti i log in entrata che corrispondono al formato syslog standard, quindi aggiunge un timestamp e un campo hostname a ogni messaggio. Estrae anche alcune informazioni dal messaggio di registro come il PID syslog, quale programma ha generato il messaggio e il messaggio syslog stesso.
Sarà necessario scrivere un nuovo filtro per ogni nuovo tipo di registro che desideri utilizzare con Logstash/Elasticsearch.
Infine, possiamo andare al nostro file di configurazione di output, 30-lumberjack-output.conf
. Questo file conterrà un semplice blocco di output che specifica che i messaggi indicizzati devono essere inviati a Elasticsearch e il nome del cluster.
Apri il file nel tuo editor.
sudo editor 30-lumberjack-output.conf
Aggiungi il seguente blocco:
output { elasticsearch { hosts => ["localhost"] } }
Ora arriveremo alla generazione dei certificati SSL per il tuo stack ELK.
Genera certificati SSL
Il protocollo Lumberjack utilizzato da Logstash per comunicare i messaggi di registro è progettato per essere protetto da un capo all'altro e SSL è un requisito fondamentale. Non preoccuparti, però, è abbastanza semplice generare i certificati.
Perché stiamo usando un indirizzo IP piuttosto che un nome host per i servers
direttiva in /etc/logstash-forwarder.conf
, dovremo aggiungere un campo IP SAN al certificato SSL generato. Includine uno aggiungendo un subjectAltName
riga al file di configurazione di OpenSSL, /etc/ssl/openssl.cnf
.
sudo editor /etc/ssl/openssl.cnf
Individua la riga contenente [ v3_ca ]
e inserire la riga seguente sotto di essa. (Sostituisci il 127.0.0.1
con l'indirizzo IP del tuo server Logstash, se Logstash è installato su un server separato.)
[ v3_ca ] subjectAltName = IP:127.0.0.1
Salva e chiudi il file. Ora possiamo generare il certificato SSL.
sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout /etc/ssl/logstash-forwarder.key -out /etc/ssl/certs/logstash-forwarder.crt sudo chown logstash:logstash /etc/ssl/logstash-forwarder.key sudo chmod 600 /etc/ssl/logstash-forwarder.key
Ora riavvia logstash e controlla se è stato avviato correttamente.
sudo systemctl restart logstash.service systemctl status logstash.service
Stato del servizio Logstash
Anche se è stato avviato, controlla i file di registro in /var/log/logstash/logstash.*
e assicurati che non ci siano errori durante l'avvio.
Installazione di Logstash-Forwarder
Ora che abbiamo installato il componente lato server di Logstash, dobbiamo installare il client Logstash-Forwarder su ogni server di cui vuoi monitorare i log.
In questo tutorial, installeremo Logstash-Forwarder sullo stesso server che esegue il resto di ELK, ma normalmente Logstash-Forwarder verrebbe eseguito su altri server.
Per prima cosa, dovremo aggiungere ancora una volta un nuovo repository al sistema.
echo "deb http://packages.elasticsearch.org/logstashforwarder/debian stable main" | sudo tee -a /etc/apt/sources.list.d/logstash-forwarder.list
E, ancora, aggiorna gli elenchi dei pacchetti.
sudo apt-get update
Ora possiamo installare Logstash-Forwarder.
sudo apt-get install logstash-forwarder
Al termine dell'installazione, apri il file di configurazione per Logstash-Forwarder.
sudo editor /etc/logstash-forwarder.conf
Cancella la configurazione predefinita esistente e aggiungi il seguente blocco:
{ "network": { "servers": [ "127.0.0.1:5000" ], "timeout": 15, "ssl ca": "/etc/ssl/certs/logstash-forwarder.crt" }, "files": [ { "paths": [ "/var/log/syslog", "/var/log/auth.log" ], "fields": { "type": "syslog" } } ] }
Questa configurazione verificherà /var/log/syslog
e /var/log/auth.log
per le nuove voci e quindi taggherà ogni messaggio in uscita da quei file con syslog
nel type
campo.
Se stai installando Logstash-Forwarder su un host separato, assicurati di cambiare i servers
direttiva per includere l'indirizzo IP del server remoto. Inoltre, assicurati di copiare il file del certificato SSL nella posizione corretta sul server remoto.
Ora abiliteremo Logstash-Forwarder all'avvio.
sudo systemctl daemon-reload sudo systemctl enable logstash-forwarder.service
Infine, possiamo riavviare il servizio Logstash-Forwarder per applicare le modifiche alla configurazione.
sudo systemctl restart logstash-forwarder.service
Se il demone si avvia correttamente, possiamo procedere alla configurazione di Kibana e all'avvio e all'esecuzione dell'intero stack ELK.
systemctl status logstash-forwarder.service
Stato del servizio Logstash-forwarder
Per verificare se logstash-forwarder funziona, controlla il file di registro per gli eventi in fase di elaborazione.
tail -f /var/log/logstash-forwarder/*
File di registro Logstash-Forwarder
Installazione di Kibana
Sfortunatamente, al momento della stesura di questo articolo, elastic.co non offre versioni pacchettizzate di Kibana, lasciando all'utente la gestione del demone. Dovremo creare un file di servizio systemd e installare manualmente Kibana.
Vai a /opt
directory e scarica Kibana.
cd /opt wget -qO - https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz | sudo tar -xzf -
Dovremo creare un nuovo utente per l'esecuzione di Kibana e impostare la proprietà della directory del programma.
sudo useradd kibana sudo chown kibana:kibana kibana-4.3.0-linux-x64/ -R
Seguendo questo passaggio, possiamo creare il file del servizio systemd.
sudo touch /usr/lib/systemd/system/kibana.service
Aggiungi la definizione del servizio al file.
sudo editor /usr/lib/systemd/system/kibana.service [Unit] Description=kibana Documentation=http://www.elastic.co Wants=network-online.target After=network-online.target [Service] User=kibana Group=kibana ExecStart=/opt/kibana-4.3.0-linux-x64/bin/kibana Restart=always StandardOutput=null # Connects standard error to journal StandardError=journal [Install] WantedBy=multi-user.target
Ora dobbiamo ricaricare tutte le unità di sistema e quindi abilitare il servizio Kibana.
sudo systemctl daemon-reload sudo systemctl enable kibana.service
Ora possiamo avviare Kibana.
sudo systemctl start kibana.service
Ricontrolla per assicurarti che sia in esecuzione e siamo fuori!
systemctl status kibana.service
Stato del servizio Kibana
Configurazione Kibana
Il file di configurazione principale di Kibana si troverà in /opt/kibana-4.3.0-linux-x64/config/kibana.yml
. Le opzioni predefinite dovrebbero essere sufficienti per questa procedura, ma puoi modificare le impostazioni secondo necessità per la tua configurazione.
Passa all'indirizzo IP del tuo server in un browser web, alla porta 5601, per accedere alla pagina di inizializzazione di Kibana. Kibana ti chiederà di configurare un modello di indice; seleziona received_at
per il nome del campo dell'ora e premere Create
.
Crea un modello di indice in Kibana
Questo è tutto! I componenti dello stack ELK, Elasticsearch, Logstash e Kibana, sono installati e operativi.
Dove andare dopo
Grazie per aver seguito questo tutorial sull'installazione dello stack ELK su Debian 8. Ricontrolla con noi per articoli correlati e per provare uno dei nostri server VPS incredibilmente veloci.