Mentre l'infrastruttura IT si sta spostando sul cloud e l'Internet of Things sta diventando popolare, le organizzazioni e i professionisti IT utilizzano i servizi di cloud pubblico in misura maggiore. Con l'aumentare dei server e dei servizi in esecuzione su di essi, aumenta anche la quantità di registri generati dal sistema. L'analisi di questi registri è molto importante in un'infrastruttura per diversi motivi. Ciò include la conformità con le politiche e le normative sulla sicurezza, la risoluzione dei problemi del sistema, la risposta a un incidente relativo alla sicurezza o la comprensione del comportamento dell'utente.
Tre applicazioni open source molto popolari denominate Elasticsearch, Logstash e Kibana si uniscono per creare Elastic Stack o ELK Stack. Elastic Stack è uno strumento molto potente per la ricerca, l'analisi e la visualizzazione di registri e dati. Elasticsearch è un'applicazione distribuita, in tempo reale, scalabile e altamente disponibile per archiviare i registri e cercarli. Logstash raccoglie i log inviati da Beats, lo migliora e quindi lo invia a Elasticsearch. Kibana è l'interfaccia utente Web utilizzata per visualizzare i registri e le informazioni utili.
In questo tutorial, installeremo l'ultima versione di Elasticsearch, Logstash e Kibana con X-Pack su Ubuntu 17.04.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di un'istanza del server Ubuntu 17.04 a 64 bit Vultr con almeno 4 GB di RAM . Per un ambiente di produzione, i requisiti hardware aumentano con l'aumentare del numero di utenti e registri.
Questo tutorial è scritto dal sudo
punto di vista dell'utente. Per configurare un utente sudo segui Come usare Sudo sulla guida Debian .
Sarà inoltre necessario un dominio indirizzato verso il server per ottenere certificati da Let's Encrypt CA.
Prima di installare eventuali pacchetti sull'istanza del server Ubuntu, si consiglia di aggiornare il sistema. Accedi usando l'utente sudo ed esegui i seguenti comandi per aggiornare il sistema.
sudo apt update
sudo apt -y upgrade
Una volta terminato l'aggiornamento del sistema, procedere al passaggio successivo.
Passaggio 2: installare Java
Elasticsearch richiede Java 8 per funzionare. Supporta sia Oracle Java che OpenJDK. Questa sezione del tutorial mostra l'installazione di Oracle Java e OpenJDK.
Assicurarsi di installare una delle seguenti versioni di Java. L'installazione di Oracle Java è consigliata per Elasticsearch. Tuttavia, puoi anche scegliere di installare OpenJDK in base alle tue preferenze.
Installazione di Oracle Java
Per installare Oracle Java sul tuo sistema Ubuntu, dovrai aggiungere Oracle Java PPA eseguendo:
sudo add-apt-repository ppa:webupd8team/java
Ora aggiorna le informazioni sul repository eseguendo:
sudo apt update
Ora puoi installare facilmente l'ultima versione stabile di Java 8 eseguendo:
sudo apt -y install oracle-java8-installer
Accettare il contratto di licenza quando richiesto. Al termine dell'installazione, è possibile verificare la versione di Java eseguendo:
java -version
Dovresti vedere un output simile a:
user@vultr:~$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
È inoltre possibile impostare JAVA_HOME
e altre impostazioni predefinite installando oracle-java8-set-default
. Correre:
sudo apt -y install oracle-java8-set-default
Ora puoi verificare se la JAVA_HOME
variabile è impostata eseguendo:
echo "$JAVA_HOME"
L'output dovrebbe assomigliare a:
user@vultr:~$ echo "$JAVA_HOME"
/usr/lib/jvm/java-8-oracle
Se non si ottiene l'output mostrato sopra, potrebbe essere necessario disconnettersi e accedere nuovamente alla shell. Oracle Java è ora installato sul tuo server. Ora puoi procedere al passaggio 3 del tutorial saltando l'installazione di OpenJDK.
Installazione di OpenJDK
L'installazione di OpenJDK è piuttosto semplice. È sufficiente eseguire il comando seguente per installare OpenJDK.
sudo apt -y install default-jdk
Al termine dell'installazione, è possibile verificare la versione di Java eseguendo:
java -version
Dovresti vedere un output simile a:
user@vultr:~$ java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-8u131-b11-2ubuntu1.17.04.2-b11)
OpenJDK 64-Bit Server VM (build 25.131-b11, mixed mode)
Per impostare la JAVA_HOME
variabile, eseguire il comando seguente:
sudo echo "JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/environment
Ricarica il file di ambiente eseguendo:
sudo source /etc/environment
Ora puoi verificare se la JAVA_HOME
variabile è impostata eseguendo:
echo "$JAVA_HOME"
L'output dovrebbe assomigliare a:
user@vultr:~$ echo "$JAVA_HOME"
/usr/lib/jvm/java-8-openjdk-amd64/
Passaggio 3: installare Elasticsearch
Elasticsearch è un motore di ricerca RESTful super veloce, distribuito, altamente disponibile. Aggiungi il repository APT Elasticsearch eseguendo:
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Il comando sopra crea un nuovo file repository per Elasticsearch e aggiunge la voce sorgente in esso. Ora importa la chiave PGP utilizzata per firmare i pacchetti.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Aggiorna i metadati del repository APT eseguendo:
sudo apt update
Installa Elasticsearch eseguendo il comando seguente.
sudo apt -y install elasticsearch
Il comando sopra installerà l'ultima versione di Elasticsearch sul tuo sistema. Una volta installato Elasticsearch, ricaricare il demone del servizio Systemd eseguendo:
sudo systemctl daemon-reload
Avvia Elasticsearch e abilita l'avvio automatico all'avvio.
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Per interrompere Elasticsearch, puoi eseguire:
sudo systemctl stop elasticsearch
Per verificare lo stato del servizio è possibile eseguire:
sudo systemctl status elasticsearch
Elasticsearch è ora in esecuzione sul porto 9200
. È possibile verificare se funziona e produce risultati eseguendo il comando seguente.
curl -XGET 'localhost:9200/?pretty'
Verrà stampato un messaggio simile al seguente.
user@vultr:~$ curl -XGET 'localhost:9200/?pretty'
{
"name" : "wDaVa1K",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "71drjJ8PTyCcbai33Esy3Q",
"version" : {
"number" : "5.5.1",
"build_hash" : "19c13d0",
"build_date" : "2017-07-18T20:44:24.823Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
Installa X-Pack per Elasticsearch
X-Pack è un plug-in Elastic Stack che offre molte funzionalità aggiuntive come sicurezza, avvisi, monitoraggio, reportistica e funzionalità grafiche. X-Pack fornisce anche l'autenticazione utente per Elasticsearch e Kibana, nonché il monitoraggio di diversi nodi in Kibana. È importante che X-Pack ed Elasticsearch siano installati con la stessa versione.
Puoi installare X-Pack per Elasticsearch direttamente eseguendo:
cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install x-pack
Per continuare l'installazione, immettere y
quando richiesto. Questo comando installerà il plug-in X-Pack sul tuo sistema. Se installato, X-Pack abilita l'autenticazione per Elasticsearch. Il nome utente predefinito è elastic
e la password è changeme
. Puoi verificare se l'autenticazione è abilitata eseguendo lo stesso comando che hai eseguito per verificare se Elasticsearch funziona.
curl -XGET 'localhost:9200/?pretty'
Ora l'output dirà che l'autenticazione non è riuscita.
user@vultr:~# curl -XGET 'localhost:9200/?pretty'
{
"error" : {
"root_cause" : [
{
"type" : "security_exception",
"reason" : "missing authentication token for REST request [/?pretty]",
"header" : {
"WWW-Authenticate" : "Basic realm=\"security\" charset=\"UTF-8\""
}
}
],
"type" : "security_exception",
"reason" : "missing authentication token for REST request [/?pretty]",
"header" : {
"WWW-Authenticate" : "Basic realm=\"security\" charset=\"UTF-8\""
}
},
"status" : 401
}
Modificare la password predefinita changeme
eseguendo il comando seguente.
curl -XPUT -u elastic:changeme 'localhost:9200/_xpack/security/user/elastic/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password": "NewElasticPassword"
}
'
Sostituisci NewPassword
con la password effettiva che desideri utilizzare. Puoi verificare se la nuova password è impostata e Elasticsearch funziona eseguendo il comando seguente.
curl -XGET -u elastic:NewElasticPassword 'localhost:9200/?pretty'
Verrà visualizzato l'output che mostra l'esecuzione corretta della query.
Inoltre, modifica il file di configurazione di Elasticsearch eseguendo:
sudo nano /etc/elasticsearch/elasticsearch.yml
Trova le seguenti righe, decommenta le righe e modificale secondo le istruzioni fornite.
#cluster.name: my-application #Provide the name of your cluster
#node.name: node-1 #Provide the name of your node
#network.host: 192.168.0.1
Per network.host
, fornire l'indirizzo IP privato assegnato al sistema. Riavvia l'istanza di Elasticsearch eseguendo:
sudo systemctl restart elasticsearch
Ora, invece di localhost
, dovrai usare l'indirizzo IP per eseguire la query usando curl
.
curl -XGET -u elastic:NewElasticPassword '192.168.0.1:9200/?pretty'
Sostituisci 192.168.0.1
con l'attuale indirizzo IP privato del server. Ora che abbiamo installato Elasticsearch, procedere ulteriormente con l'installazione di Kibana.
Passaggio 4: installare Kibana
Kibana viene utilizzato per visualizzare i registri e gli approfondimenti utilizzabili tramite un'interfaccia Web. Può anche essere usato per gestire Elasticsearch. Si consiglia di installare la stessa versione di Kibana di Elasticsearch.
Dato che abbiamo già aggiunto il repository Elasticsearch e la chiave PGP, possiamo installare Kibana direttamente eseguendo:
sudo apt -y install kibana
Il comando precedente installerà l'ultima versione di Kibana sul tuo sistema. Una volta installato Kibana, ricaricare il demone del servizio Systemd eseguendo:
sudo systemctl daemon-reload
Puoi avviare Kibana e abilitarlo ad avviarsi automaticamente all'avvio eseguendo:
sudo systemctl enable kibana
sudo systemctl start kibana
Installa X-Pack per Kibana
Puoi installare X-Pack per Kibana direttamente eseguendo:
cd /usr/share/kibana
sudo bin/kibana-plugin install x-pack
X-Pack per Kibana ha Graph, Machine Learning e Monitoring abilitati per impostazione predefinita. X-Pack abilita anche l'autenticazione per Kibana. Il nome utente predefinito è kibana
e la password è changeme
. È importante cambiare la password predefinita dell'utente Kibana. Eseguire il comando seguente per modificare la password.
curl -XPUT -u elastic '192.168.0.1:9200/_xpack/security/user/kibana/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password": "NewKibanaPassword"
}
'
Sostituisci 192.168.0.1
con l'attuale indirizzo IP privato del server e NewKibanaPassword
con la nuova password per l'utente di Kibana.
Modifica il file di configurazione di Kibana eseguendo:
sudo nano /etc/kibana/kibana.yml
Trova le seguenti righe e modifica i valori secondo le istruzioni fornite.
#elasticsearch.url: "http://localhost:9200"
#elasticsearch.username: "user"
#elasticsearch.password: "password"
Rimuovi il commento dalle righe sopra e, nel elasticsearch.url
fornire l'URL per l'istanza di Elasticsearch. L'indirizzo IP deve essere lo stesso IP utilizzato in elasticsearch.yml
. Inoltre, imposta il nome utente da user
a elastic
e fornisci anche la password dell'utente elastico che hai impostato in precedenza.
Riavvia l'istanza di Kibana eseguendo:
sudo systemctl restart kibana
Installa Nginx come proxy inverso per Kibana
Poiché stiamo eseguendo Kibana localhost
alla porta 5601
, si consiglia di impostare un proxy inverso con Apache o Nginx per accedere a Kibana dall'esterno della rete locale. In questo tutorial, configureremo Nginx come proxy inverso per Kibana. Proteggeremo anche l'istanza di Nginx con un certificato SSL gratuito Let's Encrypt.
Installa Nginx eseguendo:
sudo apt -y install nginx
Avvia e abilita Nginx ad avviarsi automaticamente all'avvio.
sudo systemctl start nginx
sudo systemctl enable nginx
Ora che il server Web Nginx è installato e in esecuzione, possiamo procedere con l'installazione di Certbot, che è il client di certificazione Let's Encrypt ufficiale e automatico. Aggiungi Certbot PPA al tuo sistema eseguendo:
sudo add-apt-repository ppa:certbot/certbot
Aggiorna le meta informazioni del repository.
sudo apt update
Ora puoi installare facilmente l'ultima versione di Certbot eseguendo:
sudo apt -y install python-certbot-nginx
Il comando precedente risolverà e installerà le dipendenze richieste insieme al pacchetto Certbot.
Ora che abbiamo installato Certbot, genera i certificati per il tuo dominio eseguendo:
sudo certbot certonly --webroot -w /var/www/html/ -d kibana.example.com
Non dimenticare di cambiare kibana.example.com
con il tuo vero nome di dominio. Il comando precedente utilizzerà il client Certbot. Il certonly
parametro indica al client Certbot di generare solo i certificati. L'uso di questa opzione garantisce che i certificati non vengano installati automaticamente e che la configurazione di Nginx non sia stata modificata. La verifica verrà effettuata inserendo i file di verifica nella webroot
directory specificata .
Certbot ti chiederà di fornire il tuo indirizzo e-mail per inviare la notifica di rinnovo. Sarà inoltre necessario accettare il contratto di licenza.
Per ottenere certificati da Let's Encrypt CA, è necessario assicurarsi che il dominio per il quale si desidera generare i certificati sia puntato verso il server. In caso contrario, apporta le modifiche necessarie ai record DNS del tuo dominio e attendi che il DNS si propaghi prima di effettuare nuovamente la richiesta di certificato. Certbot controlla l'autorità di dominio prima di fornire i certificati.
È probabile che i certificati generati siano archiviati nella /etc/letsencrypt/live/kibana.example.com/
directory. Il certificato SSL verrà archiviato come fullchain.pem
e la chiave privata verrà archiviata come privkey.pem
.
Let's Encrypt i certificati scadranno tra 90 giorni, quindi si consiglia di impostare il rinnovo automatico per i certificati utilizzando cronjobs. Cron è un servizio di sistema che viene utilizzato per eseguire attività periodiche.
Apri il file cron job eseguendo:
sudo crontab -e
Aggiungi la seguente riga alla fine del file.
30 5 * * 1 /usr/bin/certbot renew -a nginx --quiet
Il processo cron sopra riportato verrà eseguito ogni lunedì alle 5:30. Se il certificato è in scadenza, lo rinnoverà automaticamente.
Modificare il file host virtuale predefinito per Nginx eseguendo il comando seguente.
sudo nano /etc/nginx/sites-available/default
Sostituisci il contenuto esistente con il seguente contenuto.
server {
listen 80 default_server;
server_name kibana.example.com
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server ssl http2;
server_name kibana.example.com;
ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Assicurati di aggiornare kibana.example.com
con il tuo vero nome di dominio, verifica anche il percorso del certificato SSL e della chiave privata.
Riavvia il server Web Nginx eseguendo:
sudo systemctl restart nginx
Se tutto è stato configurato correttamente, vedrai la schermata di accesso di Kibana. Accedi utilizzando il nome utente kibana
e la password che hai impostato. Dovresti essere in grado di accedere correttamente e vedere la dashboard di Kibana. Lascia la dashboard, per ora, la configureremo in seguito.
Installa Logstash
Logstash può anche essere installato tramite il repository ufficiale di Elasticsearch che abbiamo aggiunto in precedenza. Installa Logstash eseguendo:
sudo apt -y install logstash
Il comando sopra installerà l'ultima versione di Logstash sul tuo sistema. Una volta installato Logstash, ricaricare il demone del servizio Systemd eseguendo:
sudo systemctl daemon-reload
Avvia Logstash e abilita l'avvio automatico all'avvio.
sudo systemctl enable logstash
sudo systemctl start logstash
Installa X-Pack per Logstash
È possibile installare X-Pack per Logstash direttamente eseguendo:
cd /usr/share/logstash
sudo bin/logstash-plugin install x-pack
X-Pack per Logstash viene fornito con un utente predefinito logstash_system
. È possibile reimpostare la password eseguendo:
curl -XPUT -u elastic '192.168.0.1:9200/_xpack/security/user/logstash_system/_password?pretty' -H 'Content-Type: application/json' -d'
{
"password": "NewLogstashPassword"
}
'
Sostituire 192.168.0.1
con l'attuale indirizzo IP privato del server e NewLogstashPassword
con la nuova password per l'utente Logstash.
Ora riavvia il servizio Logstash eseguendo:
sudo systemctl restart logstash
Modifica il file di configurazione di Logstash eseguendo:
sudo nano /etc/logstash/logstash.yml
Aggiungi le seguenti righe alla fine del file per abilitare il monitoraggio dell'istanza Logstash.
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.url: http://192.168.0.1:9200
xpack.monitoring.elasticsearch.username: logstash_system
xpack.monitoring.elasticsearch.password: NewLogstashPassword
Sostituisci l'URL Elasticsearch e la password Logstash in base alla tua configurazione.
Ora puoi configurare Logstash per ricevere dati usando Beats diversi. Esistono diversi tipi di Beats: Packetbeat, Metricbeat, Filebeat, Winlogbeat e Heartbeat. Dovrai installare ogni Beat separatamente.
Conclusione
In questo tutorial, abbiamo installato Elastic Stack con X-Pack su Ubuntu 17.04. Uno stack ELK di base è ora installato sul tuo server.