Le analisi sono importanti per qualsiasi azienda che tratta molti dati. Elasticsearch è uno strumento di gestione dei log e degli indici che può essere utilizzato per monitorare l’integrità delle distribuzioni dei server e per raccogliere informazioni utili dai log di accesso dei clienti.
Perché la raccolta dei dati è utile?
I dati sono un grande business: l’accesso alla maggior parte di Internet è gratuito perché le aziende traggono profitti dai dati raccolti dagli utenti, che vengono spesso utilizzati dalle società di marketing per personalizzare annunci più mirati.
Tuttavia, anche se non raccogli e vendi i dati degli utenti a scopo di lucro, i dati di qualsiasi tipo possono essere utilizzati per ottenere preziose informazioni aziendali. Ad esempio, se gestisci un sito web, è utile registrare le informazioni sul traffico in modo da poter avere un’idea di chi utilizza il tuo servizio e da dove proviene.
Se disponi di molti server, puoi registrare le metriche di sistema come l’utilizzo di CPU e memoria nel tempo, che possono essere utilizzate per identificare i colli di bottiglia delle prestazioni nella tua infrastruttura e fornire meglio le tue risorse future.
Puoi registrare qualsiasi tipo di dati, non solo informazioni sul traffico o sul sistema. Se si dispone di un’applicazione complicata, potrebbe essere utile registrare le pressioni e i clic dei pulsanti e gli elementi con cui interagiscono gli utenti, in modo da avere un’idea di come gli utenti utilizzano la tua app. È quindi possibile utilizzare tali informazioni per progettare un’esperienza migliore per loro.
In definitiva, dipenderà da te ciò che decidi di registrare in base alle tue particolari esigenze aziendali, ma indipendentemente dal tuo settore, puoi trarre vantaggio dalla comprensione dei dati che produci.
Cos’è Elasticsearch?
Elasticsearch è un motore di ricerca e analisi. In breve, memorizza i dati con timestamp e tiene traccia degli indici e delle parole chiave importanti per facilitare la ricerca tra quei dati. È il cuore di Stack elastico, uno strumento importante per l’esecuzione di configurazioni di analisi fai-da-te. Anche le aziende molto grandi gestiscono enormi cluster Elasticsearch per analizzare terabyte di dati.
Sebbene sia possibile utilizzare anche suite di analisi predefinite come Google Analytics, Elasticsearch offre la flessibilità di progettare dashboard e visualizzazioni personalizzate in base a qualsiasi tipo di dati. È indipendente dallo schema; gli invii semplicemente alcuni log da memorizzare e li indicizza per la ricerca.
Kibana è una dashboard di visualizzazione per Elasticsearch e funziona anche come GUI generale basata sul Web per la gestione dell’istanza. Viene utilizzato per creare dashboard e grafici dai dati, qualcosa che puoi utilizzare per comprendere i milioni di voci di registro.
Puoi importare i log in Elasticsearch tramite due metodi principali: importare log basati su file o accedere direttamente tramite API o SDK. Per semplificare il primo, Elastic fornisce Beats, caricatori di dati leggeri che puoi installare sul tuo server per inviare dati a Elasticsearch. Se hai bisogno di un’elaborazione aggiuntiva, c’è anche Logstash, una pipeline di raccolta e trasformazione dei dati per modificare i log prima che vengano inviati a Elasticsearch.
Un buon inizio sarebbe inserire i log esistenti, come i log di accesso di un server Web NGINX o i log di file creati dalla tua applicazione, con un log shipper sul server. Se desideri personalizzare i dati importati, puoi anche registrare i documenti JSON direttamente nell’API Elasticsearch. Discuteremo come impostare entrambi in basso.
Se invece gestisci principalmente un sito web generico, potresti anche voler esaminare Google Analytics, una suite di analisi gratuita su misura per i proprietari di siti web. Puoi leggere la nostra guida agli strumenti di analisi dei siti web per saperne di più.
RELAZIONATO: Hai bisogno di analisi per il tuo sito Web? Ecco quattro strumenti che puoi utilizzare
Installazione di Elasticsearch
Il primo passo è far funzionare Elasticsearch sul tuo server. Mostreremo i passaggi per le distribuzioni Linux basate su Debian come Ubuntu, ma se non lo hai apt-get
, puoi seguire le istruzioni di Elastic per il tuo sistema operativo.
Per iniziare, dovrai aggiungere i repository elastici al tuo file apt-get
installazione e installa alcuni prerequisiti:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Infine, installa Elasticsearch stesso:
sudo apt-get update && sudo apt-get install elasticsearch
Per impostazione predefinita, Elasticsearch viene eseguito sulla porta 9200 e non è protetto. A meno che non imposti un’autenticazione e un’autorizzazione utente aggiuntive, ti consigliamo di mantenere chiusa questa porta sul server.
Qualunque cosa tu faccia, dovrai assicurarti che non sia solo aperto a Internet. Questo è in realtà un problema comune con Elasticsearch; perché non viene fornito con alcuna funzionalità di sicurezza per impostazione predefinita e se la porta 9200 o il pannello web di Kibana sono aperti a Internet, chiunque può leggere i tuoi registri. Microsoft ha commesso questo errore con il server Elasticsearch di Bing, esponendo 6,5 TB di log di ricerca web.
Il modo più semplice per proteggere Elasticsearch è tenere chiuso 9200 e impostare l’autenticazione di base per il pannello web Kibana utilizzando un proxy NGINX, che mostreremo come fare in basso. Per le distribuzioni semplici, funziona bene. Tuttavia, se devi gestire più utenti e impostare i livelli di autorizzazione per ciascuno di essi, ti consigliamo di esaminare l’impostazione dell’autenticazione utente e dell’autorizzazione utente.
Configurazione e messa in sicurezza di Kibana
Kibana è una dashboard di visualizzazione:
sudo apt-get update && sudo apt-get install kibana
Ti consigliamo di abilitare il servizio in modo che venga avviato all’avvio:
sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable kibana.service
Non è richiesta alcuna configurazione aggiuntiva. Kibana dovrebbe ora essere in esecuzione sulla porta 5601. Se vuoi cambiare questo, puoi modificare /etc/kibana/kibana.yml
.
Dovresti assolutamente mantenere questa porta chiusa al pubblico, poiché non è impostata l’autenticazione per impostazione predefinita. Tuttavia, puoi inserire nella whitelist il tuo indirizzo IP per accedervi:
sudo ufw allow from x.x.x.x to any port 5601
Una soluzione migliore è configurare un proxy inverso NGINX. Puoi proteggerlo con l’autenticazione di base, in modo che chiunque tenti di accedervi debba inserire una password. Ciò lo mantiene aperto da Internet senza inserire indirizzi IP nella whitelist, ma lo protegge da hacker casuali.
Anche se hai installato NGINX, dovrai installarlo apache2-utils
e creare un file di password con htpasswd
:
sudo apt-get install apache2-utils sudo htpasswd -c /etc/nginx/.htpasswd admin
Quindi, puoi creare un nuovo file di configurazione per Kibana:
sudo nano /etc/nginx/sites-enabled/kibana
E incolla la seguente configurazione:
upstream elasticsearch { server 127.0.0.1:9200; keepalive 15; } upstream kibana { server 127.0.0.1:5601; keepalive 15; } server { listen 9201; server_name elastic.example.com; location / { auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://elasticsearch; proxy_redirect off; proxy_buffering off; proxy_http_version 1.1; proxy_set_header Connection "Keep-Alive"; proxy_set_header Proxy-Connection "Keep-Alive"; } } server { listen 80; server_name elastic.example.com; location / { auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; proxy_pass http://kibana; proxy_redirect off; proxy_buffering off; proxy_http_version 1.1; proxy_set_header Connection "Keep-Alive"; proxy_set_header Proxy-Connection "Keep-Alive"; } }
Questa configurazione imposta Kibana per l’ascolto sulla porta 80 utilizzando il file di password generato in precedenza. Avrai bisogno di cambiare elastic.example.com
in modo che corrisponda al nome del tuo sito. Riavvia NGINX:
sudo service nginx restart
E ora dovresti vedere la dashboard di Kibana, dopo aver inserito la tua password.
Puoi iniziare con alcuni dei dati di esempio, ma se vuoi ottenere qualcosa di significativo da questo, dovrai iniziare a spedire i tuoi log.
Collegamento di spedizionieri di tronchi
Per importare i log in Elasticsearch, dovrai inviarli dal server di origine al tuo server Elasticsearch. Per fare ciò, Elastic fornisce spedizionieri di tronchi leggeri chiamati Beats. Ci sono un sacco di battute per diversi casi d’uso; Metricbeat raccoglie le metriche di sistema come l’utilizzo della CPU. Packetbeat è un analizzatore di pacchetti di rete che tiene traccia dei dati sul traffico. Heartbeat tiene traccia del tempo di attività degli URL.
Il più semplice per la maggior parte dei log di base è chiamato Filebeat e può essere facilmente configurato per inviare eventi dai file di log di sistema.
Installa Filebeat da apt
. In alternativa, puoi scaricare il binario per la tua distribuzione:
sudo apt-get install filebeat
Per configurarlo, dovrai modificare il file di configurazione:
sudo nano /etc/filebeat/filebeat.yml
Qui ci sono due cose principali da modificare. Sotto filebeat.inputs
, dovrai cambiare “abilitato” in true
, quindi aggiungi eventuali percorsi di registro che Filebeat deve cercare e spedire.
Quindi, in “Elasticsearch Output”:
Se non stai usando localhost
, dovrai aggiungere un nome utente e una password in questa sezione:
username: "filebeat_writer" password: "YOUR_PASSWORD"
Quindi, avvia Filebeat. Tieni presente che una volta avviato, inizierà immediatamente a inviare tutti i log precedenti a Elasticsearch, che possono essere molti dati se non ruoti i tuoi file di log:
sudo service filebeat start
Using Kibana (Making Sense of the Noise)
Elasticsearch ordina i dati in indici, che vengono utilizzati per scopi organizzativi. Kibana utilizza “Index Patterns” per utilizzare effettivamente i dati, quindi dovrai crearne uno in Stack Management> Index Patterns.
Nella scheda “Visualizza” è possibile creare grafici e visualizzazioni a partire dai dati negli indici. Ogni indice avrà campi, che avrà un tipo di dati come numero e stringa.
Le visualizzazioni hanno due componenti: metriche e bucket. La sezione Metriche calcola i valori in base ai campi. In un grafico ad area, rappresenta l’asse Y. Ciò include, ad esempio, il calcolo della media di tutti gli elementi o il calcolo della somma di tutte le voci. Min / Max sono utili anche per rilevare valori anomali nei dati. I ranghi percentili possono essere utili per visualizzare l’uniformità dei dati.
I bucket fondamentalmente organizzano i dati in gruppi. In un grafico ad area, questo è l’asse X. La forma più semplice di questo è un istogramma della data, che mostra i dati nel tempo, ma può anche raggrupparsi in base a termini significativi e altri fattori. Puoi anche dividere l’intero grafico o la serie in base a termini specifici.
Una volta terminata la creazione della visualizzazione, è possibile aggiungerla a una dashboard per un rapido accesso.
Una delle principali funzionalità utili dei dashboard è la possibilità di cercare e modificare gli intervalli di tempo per tutte le visualizzazioni sul dashboard. Ad esempio, è possibile filtrare i risultati per mostrare solo i dati di un server specifico o impostare tutti i grafici per mostrare le ultime 24 ore.
Registrazione API diretta
La registrazione con Beats è utile per collegare Elasticsearch a servizi esistenti, ma se stai eseguendo la tua applicazione, potrebbe avere più senso eliminare l’intermediario e registrare direttamente i documenti.
La registrazione diretta è piuttosto semplice. Elasticsearch fornisce un’API per questo, quindi tutto ciò che devi fare è inviare un documento in formato JSON al seguente URL, sostituendo indexname
con l’indice in cui stai postando:
http://example.com:9200/indexname/_doc
Ovviamente puoi farlo in modo programmatico con il linguaggio e la libreria HTTP di tua scelta.
Tuttavia, se invii più log al secondo, potresti voler implementare una coda e inviarli in blocco al seguente URL:
http://example.com:9200/_bulk
Tuttavia, si aspetta una formattazione piuttosto strana: coppie di oggetti separate da una nuova riga. Il primo imposta l’indice da utilizzare e il secondo è il documento JSON effettivo.
{ "index" : { "_index" : "test"} } { "field1" : "value1" } { "index" : { "_index" : "test2"} } { "field1" : "value1" } { "index" : { "_index" : "test3"} } { "field1" : "value1" }
Potresti non avere un modo immediato per gestirlo, quindi potresti doverlo gestire da solo. Ad esempio, in C #, puoi usare StringBuilder come un modo efficiente per aggiungere la formattazione richiesta attorno all’oggetto serializzato:
private string GetESBulkString<TObj>(List<TObj> list, string index) { var builder = new StringBuilder(40 * list.Count); foreach (var item in list) { builder.Append(@"{""index"":{""_index"":"""); builder.Append(index); builder.Append(@"""}}"); builder.Append("n"); builder.Append(JsonConvert.SerializeObject(item)); builder.Append("n"); } return builder.ToString(); }