Come impostare un pannello di analisi e monitoraggio di Elasticsearch per la tua azienda Come impostare un pannello di analisi e monitoraggio di Elasticsearch per la tua azienda Che cos’è una “API” e come la usi? Una guida per principianti ai servizi di machine learning di AWS Come creare e utilizzare account di servizio in Google Cloud Platform Passando da AWS a Google Cloud Platform? Ecco cosa devi sapere di nuovo su AWS di Amazon? Ecco cosa devi sapere

0
154

Riquadro di analisi.

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.

Kibana è una dashboard di visualizzazione per Elasticsearch.

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-utilse 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.

Modifica il file di configurazione.

Quindi, in “Elasticsearch Output”:

Aggiungi un nome utente e una password.

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.

Crea e indicizza in Gestione stack> Modelli indice.” width=”580″ height=”328″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>Un indice <em>modello</em> può abbinare più indici utilizzando caratteri jolly.  Ad esempio, per impostazione predefinita Filebeat registra utilizzando indici basati sul tempo giornaliero, che possono essere facilmente ruotati dopo alcuni mesi, se si desidera risparmiare spazio:</p>
<pre>filebeat-*</pre>
<p>È possibile modificare questo nome di indice nel file di configurazione Filebeat.  Potrebbe avere senso suddividerlo per nome host o per tipo di log inviati.  Per impostazione predefinita, tutto verrà inviato allo stesso indice filebeat.</p>
<p>Puoi sfogliare i registri nella scheda “Scopri” nella barra laterale.  Filebeat indicizza i documenti con un timestamp in base a quando li ha inviati a Elasticsearch, quindi se hai eseguito il tuo server per un po ‘, probabilmente vedrai molte voci di registro.</p>
<p>Se non hai mai cercato nei tuoi log prima d’ora, vedrai immediatamente perché avere una porta SSH aperta con autenticazione della password è una brutta cosa: cercare “password non riuscita”, mostra che questo normale server Linux senza password di accesso disabilitato ha oltre 22.000 log voci da bot automatizzati che tentano password di root casuali nel corso di alcuni mesi.</p>
<p><img loading=

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.

Dividi l'intero grafico o la serie utilizzando termini specifici.

Una volta terminata la creazione della visualizzazione, è possibile aggiungerla a una dashboard per un rapido accesso.

Aggiungi una visualizzazione a una dashboard per un accesso rapido.

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.

Invia un documento in formato JSON, sostituendo indexname con l'indice in cui stai postando.

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();
}