
Ricordiamo che alla base dell'Elastic Stack ci sono il database non relazionale Elasticsearch, l'interfaccia web Kibana e i raccoglitori e processori di dati (il più conosciuto è Logstash, vari Beats, APM e altri). Una delle piacevoli aggiunte di tutto questo stack di prodotti è l'analisi dei dati tramite algoritmi di machine learning. In questo articolo esamineremo cosa rappresentano questi algoritmi. Chiediamo di continuare a leggere.
Il machine learning è una funzione a pagamento di Elastic Stack, ed è inclusa nel pacchetto X-Pack. Per iniziare a utilizzarla basta attivare un periodo di prova di 30 giorni dopo l'installazione. Dopo la scadenza del periodo di prova, puoi richiedere assistenza per il suo prolungamento o acquistare un abbonamento. Il costo dell'abbonamento non è calcolato in base al volume dei dati, ma al numero di nodi utilizzati. No, il volume dei dati influisce, ovviamente, sul numero di nodi necessari, ma questo approccio alla licenza è comunque più umano nei confronti del budget dell'azienda. Se non hai bisogno di alte prestazioni, puoi anche risparmiare.
Il ML nell'Elastic Stack è scritto in C++ e funziona al di fuori della JVM, in cui gira Elasticsearch. Quindi, il processo (che peraltro si chiama autodetect) consuma tutto ciò che non può gestire la JVM. Nella demo questo non è così critico, mentre in un ambiente di produzione è importante dedicare nodi separati per i compiti di ML.
Gli algoritmi di machine learning si suddividono in due categorie — e . Nel Elastic Stack, l'algoritmo appartiene alla categoria "senza supervisione". Puoi consultare il materiale matematico degli algoritmi di machine learning.
Per condurre l'analisi, l'algoritmo di machine learning utilizza i dati memorizzati negli indici di Elasticsearch. Puoi creare compiti di analisi sia dall'interfaccia di Kibana che tramite API. Se lo fai tramite Kibana, non è necessario conoscere alcune cose. Ad esempio, indici aggiuntivi che l'algoritmo utilizza durante il funzionamento.
Indici aggiuntivi utilizzati durante l'analisi.ml-state — informazioni sui modelli statistici (impostazioni di analisi);
.ml-anomalies-* — risultati prodotti dagli algoritmi ML;
.ml-notifications — impostazioni delle notifiche sui risultati dell'analisi.

La struttura dei dati nel database Elasticsearch è composta da indici e dai documenti in essi contenuti. Se confrontato con un database relazionale, l'indice può essere paragonato a uno schema di database, mentre il documento a una registrazione in una tabella. Questo confronto è convenzionale ed è fornito per semplificare la comprensione del materiale successivo per coloro che hanno appena sentito parlare di Elasticsearch.
L'API offre le stesse funzionalità disponibili tramite l'interfaccia web, quindi per chiarezza e comprensione dei concetti, mostreremo come configurare attraverso Kibana. Nel menu a sinistra c'è la sezione Machine Learning, in cui è possibile creare un nuovo incarico (Job). Nell'interfaccia di Kibana, questo appare come nell'immagine qui sotto. Ora esamineremo ciascun tipo di incarico e mostreremo i tipi di analisi che possono essere costruiti.

Single Metric — analisi di una singola metrica, Multi Metric — analisi di due o più metriche. In entrambi i casi, ogni metrica viene analizzata in un ambiente isolato, cioè l'algoritmo non considera il comportamento delle metriche analizzate in parallelo come potrebbe sembrare nel caso di Multi Metric. Per condurre un calcolo tenendo conto della correlazione tra varie metriche, è possibile applicare un'analisi Population. Advanced — è una regolazione fine degli algoritmi con opzioni aggiuntive per compiti specifici.
Single Metric
L'analisi delle variazioni di una singola metrica è la cosa più semplice da fare qui. Dopo aver cliccato su Crea Job, l'algoritmo cercherà anomalie.

Nel campo Aggregazione è possibile scegliere il metodo per cercare anomalie. Ad esempio, utilizzando Min i valori al di sotto di quelli tipici saranno considerati anomali. Ci sono Max, High Mean, Low, Mean, Distinct e altri. La descrizione di tutte le funzioni può essere consultata .
Nel campo Campo si indica il campo numerico nel documento su cui effettueremo l'analisi.
Nel campo — la granularità degli intervalli nella timeline su cui verrà condotta l'analisi. Puoi affidarti all'automazione o scegliere manualmente. Nell'immagine qui sotto è riportato un esempio di granularità troppo bassa — potresti perdere un'anomalia. Con questa impostazione è possibile modificare la sensibilità dell'algoritmo alle anomalie.

La durata dei dati raccolti è un elemento chiave che influisce sull'efficacia dell'analisi. Durante l'analisi, l'algoritmo identifica intervalli ripetitivi, calcola l'intervallo di confidenza (linee di base) ed estrae anomalie — deviazioni insolite dal comportamento normale della metrica. Solo per esempio:
Linee di base su un piccolo campione di dati:

Quando l'algoritmo ha qualcosa da imparare, le linee di base appaiono in questo modo:

Dopo l'avvio del compito, l'algoritmo identifica le deviazioni anomale dalla norma e le classifica in base alla probabilità di anomalia (il colore del rispettivo tag è indicato tra parentesi):
Warning (blu): meno di 25
Minor (giallo): 25-50
Major (arancione): 50-75
Critical (rosso): 75-100
Nel grafico qui sotto è mostrato un esempio con le anomalie trovate.

Qui si vede il numero 94, che indica la probabilità di anomalia. È chiaro che dato che il valore è vicino a 100, siamo di fronte a un'anomalia. Nella colonna sotto il grafico è indicata una probabilità estremamente bassa dello 0.000063634% di vedere quel valore della metrica.
Oltre alla ricerca di anomalie, è possibile avviare previsioni in Kibana. È molto semplice e si fa dallo stesso pannello delle anomalie—il pulsante Forecast nell'angolo in alto a destra.

La previsione viene costruita al massimo per 8 settimane in avanti. Anche se lo si desidera ardentemente, non è possibile farlo di più per design.

In alcune situazioni, la previsione sarà molto utile, ad esempio quando si monitora il carico degli utenti sull'infrastruttura.
Multi Metric
Passiamo alla successiva possibilità ML nell'Elastic Stack - l'analisi di più metriche in un colpo solo. Ma ciò non significa che si analizzerà la dipendenza di una metrica da un'altra. È lo stesso di Single Metric, solo con molte metriche su un unico schermo per comodità di confronto dell'influenza l'una sull'altra. Parleremo dell'analisi della dipendenza di una metrica da un'altra nella parte Population.
Dopo aver cliccato sul quadrato con Multi Metric apparirà una finestra con le impostazioni. Ci soffermiamo su di esse con maggior dettaglio.

Per iniziare, bisogna scegliere i campi per l'analisi e l'aggregazione dei dati in base ad essi. Le opzioni di aggregazione qui sono le stesse di quelle per Single Metric (Max, High Mean, Low, Mean, Distinct e altri). Successivamente, i dati possono essere suddivisi, se si desidera, in base a uno dei campi (campo Split Data). Nell'esempio, lo abbiamo fatto in base al campo OriginAirportID. Notare che ora il grafico delle metriche a destra è rappresentato come un insieme di grafici.

Campo Key Fields (Influencers) influisce direttamente sulle anomalie trovate. Di default, ci sarà sempre almeno un valore, ma è possibile aggiungerne ulteriori. L'algoritmo terrà conto dell'influenza di questi campi durante l'analisi e mostrerà i valori più "influenti".
Dopo l'avvio, nell'interfaccia di Kibana apparirà un'immagine simile.

Questa è la cosiddetta mappa di calore delle anomalie per ciascun valore del campo OriginAirportID, che abbiamo indicato in Split Data. Come nel caso di Single Metric, il colore indica il livello di deviazione anomala. Un'analisi simile può essere facilmente effettuata, ad esempio, sulle postazioni di lavoro per monitorare quelle con un numero sospettosamente elevato di autorizzazioni, ecc. Ne abbiamo già parlato , che possono anche essere raccolti e analizzati qui.
Sotto la mappa di calore si trova l'elenco delle anomalie, ognuna delle quali può portare alla visualizzazione di Single Metric per un'analisi dettagliata.
Population
Per cercare anomalie tra le correlazioni tra diverse metriche, in Elastic Stack è presente un'analisi Population specializzata. È proprio grazie a questa che è possibile cercare valori anomali nelle prestazioni di un server rispetto agli altri in caso, ad esempio, di un aumento del numero di richieste al sistema target.

In questa illustrazione, il campo Population mostra il valore a cui si riferiranno le metriche analizzate. In questo caso, si tratta del nome del processo. Di conseguenza, vedremo come il carico della CPU di ciascun processo ha influito sugli altri.
Nota che il grafico dei dati analizzati è diverso da quelli di Single Metric e Multi Metric. Questo è stato progettato in Kibana per migliorare la percezione della distribuzione dei valori dei dati analizzati.

Dal grafico si evince che il processo stress (per inciso, generato da un'utilità speciale) sul server poipu, ha influenzato (o si è rivelato un influenzatore) l'insorgere di questa anomalia.
Avanzato
Analisi con impostazioni avanzate. Durante l'analisi avanzata in Kibana, vengono visualizzate impostazioni aggiuntive. Dopo aver cliccato nella menu di creazione sul riquadro Advanced appare questa finestra con le schede. La scheda Job Details è stata intenzionalmente omessa, lì ci sono impostazioni di base non direttamente correlate alla configurazione dell'analisi.

In summary_count_field_name si può opzionalmente specificare il nome del campo nei documenti contenente i valori aggregati. In questo esempio, il numero di eventi al minuto. Nel si specifica il nome del valore del campo nel documento, che contiene un certo valore variabile. Con un mascheramento su questo campo è possibile suddividere i dati analizzati in sottoinsiemi. Fai attenzione al pulsante Add detector nell'illustrazione precedente. Qui sotto il risultato dell'azione su questo pulsante.

Qui è un blocco aggiuntivo di impostazioni per configurare il rilevatore di anomalie per uno specifico compito. I casi d'uso specifici (soprattutto in materia di sicurezza) verranno trattati nei prossimi articoli. Per esempio, uno dei casi esaminati. È collegato alla ricerca di valori rari e viene implementato .
Nel campo function puoi scegliere una funzione specifica per la ricerca di anomalie. Oltre a rare, ci sono anche un paio di funzioni interessanti — . Esse rivelano anomalie nel comportamento delle metriche nel corso della giornata o della settimana, rispettivamente. Le altre funzioni di analisi .
In field_name indica il campo del documento su cui verrà effettuata l'analisi. By_field_name può essere utilizzato per suddividere i risultati dell'analisi per ogni singolo valore del campo del documento qui specificato. Se si compila over_field_name si ottiene un'analisi della popolazione, che abbiamo esaminato sopra. Se si indica un valore in partition_field_name, allora su questo campo del documento verranno calcolate linee base separate per ciascun valore (dove il valore può rappresentare, ad esempio, il nome del server o del processo sul server). In exclude_frequent puoi selezionare all o none, il che significherebbe escludere (o includere) valori frequentemente presenti nei campi dei documenti.
Nell'articolo abbiamo cercato di fornire un'idea il più concisa possibile delle capacità dell'apprendimento automatico in Elastic Stack, restano ancora molti dettagli da esplorare. Facci sapere nei commenti quali casi sei riuscito a risolvere con Elastic Stack e per quali compiti lo utilizzi. Per contattarci puoi utilizzare messaggi privati su Habr o .
Fonte: habr.com
