Ricerca elastica è un motore di ricerca open source basato su Lucene, sviluppato in Java. Fornisce un motore di ricerca full-text distribuito e multi-tenant con un'interfaccia Web HTTP Dashboard (Kibana). I dati vengono interrogati, recuperati e archiviati con uno schema di documenti JSON. Elasticsearch è un motore di ricerca scalabile che può essere utilizzato per cercare tutti i tipi di documenti di testo, inclusi i file di registro. Elasticsearch è il cuore di 'Elastic Stack' o ELK Stack.
Archiviazione è uno strumento open source per la gestione di eventi e registri. Fornisce il pipelining in tempo reale per le raccolte di dati. Logstash raccoglierà i tuoi dati di registro, convertirà i dati in documenti JSON e li archivierà in Elasticsearch.
Kibana è uno strumento di visualizzazione dei dati open source per Elasticsearch. Kibana fornisce una bella interfaccia web dashboard. Ti consente di gestire e visualizzare i dati da Elasticsearch. Non è solo bello, ma anche potente.
In questo tutorial, ti mostrerò come installare e configurare Elastic Stack su un server CentOS 7 per il monitoraggio dei log del server. Quindi ti mostrerò come installare "Elastic beats" su un sistema operativo client CentOS 7 e Ubuntu 16.04.
Prerequisiti
- CentOS 7 64 bit con 4 GB di RAM - elk-master
- CentOS 7 64 bit con 1 GB di RAM - client1
- Ubuntu 16.04 64 bit con 1 GB di RAM - client2
Passaggio 1: Prepara il sistema operativo
In questo tutorial, disabiliteremo SELinux sul server CentOS 7. Modifica il file di configurazione di SELinux.
vim /etc/sysconfig/selinux
Cambia il valore di SELinux da forzato a disabilitato.
SELINUX=disabled
Quindi riavvia il server.
reboot
Accedi nuovamente al server e controlla lo stato di SELinux.
getenforce
Assicurati che il risultato sia disabilitato.
Fase 2:installa Java
Java è necessario per la distribuzione dello stack elastico. Elasticsearch richiede Java 8, si consiglia di utilizzare Oracle JDK 1.8. Installerò Java 8 dal pacchetto rpm Oracle ufficiale.
Scarica Java 8 JDK con il comando 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"
Quindi installalo con questo comando rpm;
rpm -ivh jdk-8u77-linux-x64.rpm
Infine, controlla la versione di java JDK per assicurarti che funzioni correttamente.
java -version
Vedrai la versione Java del server.
Fase 3 - Installa e configura Elasticsearch
In questo passaggio installeremo e configureremo Elasticsearch. Installerò Elasticsearch da un pacchetto rpm fornito da elastic.co e lo configurerò per l'esecuzione su localhost (per rendere sicura la configurazione e assicurarmi che non sia raggiungibile dall'esterno).
Prima di installare Elasticsearch, aggiungi la chiave elastic.co al server.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Quindi, scarica Elasticsearch 5.1 con wget e installalo.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm
Elasticsearch è installato. Ora vai nella directory di configurazione e modifica il file di configurazione elasticsaerch.yml.
cd /etc/elasticsearch/
vim elasticsearch.yml
Abilita il blocco della memoria per Elasticsearch rimuovendo un commento alla riga 40. Ciò disabilita lo scambio di memoria per Elasticsearch.
bootstrap.memory_lock: true
Nel blocco "Rete", decommenta le righe network.host e http.port.
network.host: localhost
http.port: 9200
Salva il file ed esci dall'editor.
Ora modifica il file elasticsearch.service per la configurazione del blocco della memoria.
vim /usr/lib/systemd/system/elasticsearch.service
Decommenta la riga LimitMEMLOCK.
LimitMEMLOCK=infinity
Salva ed esci.
Modifica il file di configurazione sysconfig per Elasticsearch.
vim /etc/sysconfig/elasticsearch
Decommenta la riga 60 e assicurati che il valore sia 'illimitato'.
MAX_LOCKED_MEMORY=unlimited
Salva ed esci.
La configurazione di Elasticsearch è terminata. Elasticsearch verrà eseguito sull'indirizzo IP localhost sulla porta 9200, abbiamo disabilitato lo scambio di memoria per esso abilitando mlockall sul server CentOS.
Ricarica systemd, abilita Elasticsearch per l'avvio all'avvio, quindi avvia il servizio.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Attendi un secondo che Eelasticsearch si avvii, quindi controlla le porte aperte sul server, assicurati che lo "stato" per la porta 9200 sia "ASCOLTA".
netstat -plntu
Quindi controlla il blocco della memoria per assicurarti che mlockall sia abilitato e verifica che Elasticsearch sia in esecuzione con i comandi seguenti.
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Vedrai i risultati qui sotto.
Fase 4 - Installa e configura Kibana con Nginx
In questo passaggio, installeremo e configureremo Kibana con un server web Nginx. Kibana ascolterà l'indirizzo IP dell'host locale e Nginx fungerà da proxy inverso per l'applicazione Kibana.
Scarica Kibana 5.1 con wget, quindi installalo con il comando rpm:
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm
Ora modifica il file di configurazione di Kibana.
vim /etc/kibana/kibana.yml
Decommenta le righe di configurazione per server.port, server.host e elasticsearch.url.
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
Salva ed esci.
Aggiungi Kibana da eseguire all'avvio e avvialo.
sudo systemctl enable kibana
sudo systemctl start kibana
Kibana verrà eseguito sulla porta 5601 come applicazione nodo.
netstat -plntu
L'installazione di Kibana è terminata. Ora dobbiamo installare Nginx e configurarlo come proxy inverso per poter accedere a Kibana dall'indirizzo IP pubblico.
Nginx è disponibile nel repository Epel, installa epel-release con yum.
yum -y install epel-release
Quindi, installa il pacchetto Nginx e httpd-tools.
yum -y install nginx httpd-tools
Il pacchetto httpd-tools contiene strumenti per il server web, useremo l'autenticazione di base htpasswd per Kibana.
Modifica il file di configurazione di Nginx e rimuovi il 'server { } ', in modo da poter aggiungere una nuova configurazione di host virtuale.
cd /etc/nginx/
vim nginx.conf
Rimuovi il { } blocco del server.
Salva il file ed esci da vim.
Ora dobbiamo creare un nuovo file di configurazione dell'host virtuale nella directory conf.d. Crea il nuovo file 'kibana.conf' con vim.
vim /etc/nginx/conf.d/kibana.conf
Incolla la configurazione qui sotto.
server {
listen 80;
server_name elk-stack.co;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
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;
}
}
Salva ed esci.
Quindi crea un nuovo file di autenticazione di base con il comando htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD
Testa la configurazione di Nginx e assicurati che non ci siano errori. Quindi aggiungi Nginx da eseguire all'avvio e avvia Nginx.
nginx -t
systemctl enable nginx
systemctl start nginx
Passaggio 5 - Installa e configura Logstash
In questo passaggio, installeremo Logsatash e lo configureremo per centralizzare i log del server dai client con filebeat, quindi filtreremo e trasformeremo i dati Syslog e li sposteremo nella scorta (Elasticsearch).
Scarica Logstash e installalo con rpm.
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm
Genera un nuovo file di certificato SSL in modo che il client possa identificare il server elastico.
Vai alla directory tls e modifica il file openssl.cnf.
cd /etc/pki/tls
vim openssl.cnf
Aggiungi una nuova riga nella sezione '[ v3_ca ]' per l'identificazione del server.
[ v3_ca ]
# Server IP Address
subjectAltName = IP: 10.0.15.10
Salva ed esci.
Genera il file del certificato con il comando 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
I file del certificato si trovano nelle directory '/etc/pki/tls/certs/' e '/etc/pki/tls/private/'.
Successivamente, creeremo nuovi file di configurazione per Logstash. Creeremo un nuovo file "filebeat-input.conf" per configurare le origini dei log per filebeat, quindi un file "syslog-filter.conf" per l'elaborazione syslog e il file "output-elasticsearch.conf" per definire l'output di Elasticsearch.
Vai alla directory di configurazione di logstash e crea i nuovi file di configurazione nella sottodirectory 'conf.d'.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Configurazione di input:incolla la configurazione di seguito.
input {
beats {
port => 5443
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Salva ed esci.
Crea il file syslog-filter.conf.
vim conf.d/syslog-filter.conf
Incolla la configurazione qui sotto.
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 dd HH:mm:ss" ]
}
}
}
Usiamo un plugin di filtro chiamato 'grok ' per analizzare i file syslog.
Salva ed esci.
Crea il file di configurazione dell'output 'output-elasticsearch.conf'.
vim conf.d/output-elasticsearch.conf
Incolla la configurazione qui sotto.
output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
Salva ed esci.
Infine aggiungi logstash da avviare all'avvio e avvia il servizio.
sudo systemctl enable logstash
sudo systemctl start logstash
Passaggio 6:installazione e configurazione di Filebeat sul client CentOS
I Beats sono data shipper, agenti leggeri che possono essere installati sui nodi client per inviare enormi quantità di dati dalla macchina client al server Logstash o Elasticsearch. Sono disponibili 4 beat, "Filebeat" per "File di registro", "Metricbeat" per "Metriche", "Packetbeat" per "Dati di rete" e "Winlogbeat" per il client Windows "Registro eventi".
In questo tutorial, ti mostrerò come installare e configurare "Filebeat" per trasferire i file di registro dei dati al server Logstash tramite una connessione SSL.
Accedi al server client1. Copiare quindi il file del certificato dal server elastico al server client1.
ssh [email protected]
Copia il file del certificato con il comando scp.
scp [email protected]:~/logstash-forwarder.crt .
TYPE elk-server password
Crea una nuova directory e sposta il file del certificato in quella directory.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/
Quindi, importa la chiave elastica sul server client1.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Scarica Filebeat e installalo con rpm.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpm
Filebeat è stato installato, vai alla directory di configurazione e modifica il file 'filebeat.yml'.
cd /etc/filebeat/
vim filebeat.yml
Nella sezione dei percorsi alla riga 21, aggiungi i nuovi file di registro. Aggiungeremo due file '/var/log/secure' per l'attività ssh e '/var/log/messages' per il log del server.
paths:
- /var/log/secure
- /var/log/messages
Aggiungi una nuova configurazione alla riga 26 per definire i file di tipo syslog.
document-type: syslog
Filebeat utilizza Elasticsearch come destinazione di output per impostazione predefinita. In questo tutorial, lo cambieremo in Logshtash. Disabilita l'output di Elasticsearch aggiungendo commenti alle righe 83 e 85.
Disabilita l'output di elasticsearch.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Ora aggiungi la nuova configurazione di output di logstash. Decommenta la configurazione dell'output di logstash e modifica tutti i valori nella configurazione mostrata di seguito.
output.logstash:
# The Logstash hosts
hosts: ["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: false
Salva il file ed esci da vim.
Aggiungi Filebeat per iniziare all'avvio e avvialo.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Passaggio 7 - Installa e configura Filebeat sul client Ubuntu
Connettiti al server tramite ssh.
ssh [email protected]
Copia il file del certificato sul client con il comando scp.
scp [email protected]:~/logstash-forwarder.crt .
Crea una nuova directory per il file del certificato e sposta il file in quella directory.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/
Aggiungi la chiave elastica al server.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Scarica il pacchetto Filebeat .deb e installalo con il comando dpkg.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb
Vai alla directory di configurazione di filebeat e modifica il file 'filebeat.yml' con vim.
cd /etc/filebeat/
vim filebeat.yml
Aggiungi i nuovi percorsi dei file di registro nella sezione di configurazione dei percorsi.
paths:
- /var/log/auth.log
- /var/log/syslog
Imposta il tipo di documento su syslog.
document-type: syslog
Disabilita l'output di elasticsearch aggiungendo commenti alle righe mostrate di seguito.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Abilita l'output logstash, decommenta la configurazione e modifica i valori come mostrato di seguito.
output.logstash:
# The Logstash hosts
hosts: ["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: false
Salva il file ed esci da vim.
Aggiungi Filebeat per iniziare all'avvio e avvialo.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Controlla lo stato del servizio.
systemctl status filebeat
Passaggio 8:test dello stack elastico
Apri il tuo browser web e visita il dominio dello stack elastico che hai utilizzato nella configurazione di Nginx, il mio è "elk-stack.co". Accedi come utente amministratore con la tua password e premi Invio per accedere alla dashboard di Kibana.
Crea un nuovo indice predefinito 'filebeat-*' e fai clic sul pulsante 'Crea'.
L'indice predefinito è stato creato. Se hai più battute sullo stack elastico, puoi configurare la battuta predefinita con un solo clic sul pulsante "stella".
Vai a 'Scopri ' e vedrai tutti i file di registro dei server elk-client1 e elk-client2.
Un esempio di output JSON dal registro del server elk-client1 per un accesso ssh non valido.
E c'è molto di più di quello che puoi fare con la dashboard di Kibana, basta giocare con le opzioni disponibili.
Elastic Stack è stato installato su un server CentOS 7. Filebeat è stato installato su un CentOS 7 e un client Ubuntu.