In Elasticsearch, le pipeline di ingestione sono uno strumento fondamentale per la trasformazione dei dati prima che vengano indicizzati. Queste pipeline permettono di modificare i documenti, aggiungendo o rimuovendo campi, formattando i dati o arricchendoli con informazioni supplementari. Il flusso di dati all'interno di una pipeline segue una sequenza definita di processori, ciascuno dei quali apporta modifiche specifiche ai documenti.

La creazione di una pipeline di ingestione può essere gestita tramite due metodi principali: l’utilizzo delle funzionalità di Kibana o tramite le API di ingestione, che offrono maggiore flessibilità, permettendo di gestire i processi direttamente dal codice. Le pipeline vengono memorizzate nello stato del cluster, garantendo che siano disponibili a tutti i nodi del cluster, consentendo una gestione centralizzata e coerente dei processi di ingestione dei dati. Una volta definita, una pipeline può essere applicata a qualsiasi processo di ingestione all'interno del cluster, mantenendo uniformità nel trattamento dei dati.

Un esempio pratico di come creare una pipeline di ingestione è fornito nel codice seguente. In questo esempio, viene creato un pipeline personalizzato per la gestione dei log di accesso di Apache:

json
PUT _ingest/pipeline/apache-logs-custom {
"processors": [ { "set": { "field": "description", "value": "Apache access documents with computed hash on the host field" } }, { "fingerprint": { "fields": ["host"], "method": "SHA-512" } } ] }

Questa pipeline aggiunge una descrizione ai documenti e calcola un hash dei dati relativi al campo "host" usando l'algoritmo SHA-512.

La gestione delle eccezioni all’interno delle pipeline è cruciale per garantire l’integrità dei dati. Il parametro on_failure consente di configurare il comportamento della pipeline in caso di errore, assicurando che vengano effettuati log o notifiche appropriate per una gestione tempestiva e efficace degli errori.

Le pipeline di ingestione possono essere utilizzate in combinazione con i "processori di arricchimento" (enrich processors), che permettono di aggiungere dati rilevanti provenienti da altri indici durante l’ingestione. Ad esempio, un processore di arricchimento può identificare il fornitore di un servizio web basandosi sull'indirizzo IP o arricchire gli ordini di vendita con informazioni sui prodotti utilizzando i codici prodotto. Questi processori utilizzano indici di arricchimento, che sono versioni ottimizzate degli indici di origine, per rendere più veloce e efficiente il processo di ricerca.

Un altro aspetto fondamentale nella gestione delle pipeline di ingestione riguarda la possibilità di gestire i flussi di dati tramite Elastic Agent. La configurazione di Elastic Agent prevede una serie di pipeline dedicate alla trasformazione e normalizzazione dei dati prima che vengano indicizzati in Elasticsearch. In molte integrazioni di Elastic Agent, esistono pipeline predefinite che possono essere personalizzate senza compromettere le impostazioni di default.

Ad esempio, quando si configurano i log di accesso Apache, è possibile aggiungere una pipeline personalizzata per arricchire i dati. Questo viene fatto direttamente attraverso l'interfaccia di Kibana:

  1. Vai su Kibana | Fleet | Politiche Agenti.

  2. Seleziona la politica che esegue l'integrazione con il server Apache.

  3. Modifica l'integrazione e aggiungi la pipeline personalizzata.

L’utilizzo di pipeline personalizzate consente di mantenere intatte le configurazioni di integrazione standard, ma di arricchire i dati in modo mirato, secondo le esigenze specifiche del progetto.

Una volta che la pipeline personalizzata è configurata, la sua applicazione assicura che ogni documento in arrivo, come i log di accesso Apache, abbia i campi desiderati, come la descrizione o l’impronta digitale calcolata.

Un altro vantaggio di Elasticsearch è la possibilità di utilizzare pipeline annidate, cioè di eseguire una pipeline all'interno di un'altra, utilizzando il processore pipeline che permette di gestire flussi complessi. Ad esempio, nella creazione di pipeline personalizzate per log di errore o altri tipi di dati, è possibile definire strategie di parsing e trasformazione specifiche per ogni tipo di documento.

Infine, quando si parla di elasticità nella gestione dei dati, è importante considerare come il processo di ingestione e arricchimento possa avvenire "alla fonte", ossia prima che i dati vengano inviati a Elasticsearch. Con Elastic Agent, è possibile eseguire trasformazioni e arricchimenti direttamente sui dati in ingresso, migliorando ulteriormente le prestazioni e la gestione dei dati.

La gestione delle pipeline in Elasticsearch rappresenta una componente fondamentale per l'efficace trasformazione e arricchimento dei dati, assicurando non solo l'integrità dei flussi informativi, ma anche una grande flessibilità nel personalizzare i processi di ingestione in base alle specifiche esigenze aziendali.

Come creare e gestire lavori di rilevamento anomalie in Kibana

Nel contesto della gestione avanzata dei dati con Elastic Stack, uno degli strumenti principali è il rilevamento di anomalie, che ci permette di identificare comportamenti irregolari o deviazioni nei dati in tempo reale. Un aspetto fondamentale in questo processo è la capacità di creare e gestire lavori di rilevamento anomalie direttamente da visualizzazioni in Kibana. Esploriamo ora come configurare questi lavori e cosa bisogna comprendere per usarli correttamente.

Partendo dalla visualizzazione in Lens, possiamo creare due tipi di lavori di rilevamento anomalie: uno per dati multi-metrici e uno per dati singoli. In entrambi i casi, il processo inizia dalla definizione del tipo di aggregazione e intervallo temporale, che sono essenziali per l'analisi. Per il lavoro multi-metrico, ad esempio, impostiamo l'ID del lavoro come rennes-traffic-status e definiamo il "Bucket span" a 1 ora, seguito dalla creazione del lavoro. Nel caso di un lavoro singolo, l'ID del lavoro sarà rennes-traffic-average-speed e l'impostazione del "Bucket span" rimarrà invariata a 1 ora.

Una volta creati i lavori, possiamo visualizzare i risultati direttamente nell'Anomaly Explorer di Kibana. Qui, i dati di traffico recenti verranno analizzati per rilevare anomalie. Nel caso del lavoro multi-metrico, vediamo un'analisi visiva nel formato swimlane, che evidenzia le anomalie rilevate in base ai vari fattori di traffico. In un lavoro singolo, la visualizzazione mostra chiaramente come la media della velocità dei veicoli venga utilizzata per identificare eventuali anomalie nel traffico, come evidenziato nei risultati.

Questo processo si avvale delle capacità di machine learning di Kibana, che riconoscono automaticamente aggregazioni e valori di divisione, utilizzando questi dati per configurare i rispettivi lavori di rilevamento anomalie. Ad esempio, le aggregazioni di tipo "count" e "average" sono usate per rilevare anomalie nel traffico. Gli intervalli temporali, di default, sono impostati sugli ultimi tre giorni, ma questi possono essere personalizzati in base alle necessità analitiche.

Una volta che i lavori sono stati creati, Kibana consente di modificare l'intervallo di dati, creare regole di avviso e altro, utilizzando la sezione dedicata alla gestione dei lavori. È possibile, ad esempio, modificare l'intervallo temporale per allinearsi a dati di periodi diversi o applicare modifiche specifiche ai parametri del lavoro.

È importante sottolineare che Kibana supporta solo alcuni tipi di grafici per la creazione di lavori di rilevamento anomalie, tra cui grafici ad area, barre e linee, e questi devono avere un campo data su uno degli assi. Questo limite è cruciale da considerare per evitare errori di configurazione. Inoltre, le funzioni di rilevamento anomalie supportate includono aggregazioni come la media, il conteggio, il massimo, la mediana, il minimo, la somma e il conteggio unico.

L'Elastic Stack, inoltre, non si limita al solo rilevamento di anomalie: offre una gamma di funzioni avanzate, come l'analisi dei frame di dati per il rilevamento di outlier e l'apprendimento supervisionato, che permette di creare modelli per analisi di regressione e classificazione. Queste capacità avanzate aprono nuove possibilità per l'analisi dei dati, utilizzando modelli addestrati per fare previsioni e inferire pattern in nuovi set di dati.

Il rilevamento degli outlier, ad esempio, è una tecnica utile per identificare dati che si discostano significativamente dal resto del dataset, e viene applicata mediante un'analisi multivariata della densità e della distanza dei dati. In questo caso, non ci si concentra sull'evoluzione temporale del dataset, ma piuttosto sulla distribuzione e le caratteristiche intrinseche dei dati stessi. Questo approccio è complementare al rilevamento delle anomalie per dati temporali, come visto nei capitoli precedenti.

Oltre all'analisi di anomalie, è essenziale comprendere come trattare i dati grezzi, trasformandoli in formati più utili per l'analisi, come quello di entità centrato (pivot). Un esempio di ciò è la trasformazione dei dati di traffico di Rennes in base a localizzazione, ora del giorno e giorno della settimana, con aggregazioni medie sulla velocità media dei veicoli e durata del viaggio. Questa trasformazione consente una visione più strutturata dei dati, migliorando l'efficacia delle analisi.

In sintesi, l'uso delle capacità di machine learning in Kibana e Elasticsearch, come la creazione di lavori di rilevamento anomalie e l'analisi avanzata dei dati, consente di ottenere intuizioni preziose e rilevanti dai dati, migliorando la comprensione e la gestione dei flussi informativi. La chiave del successo sta nell'appropriata configurazione dei lavori, nella comprensione dei tipi di grafici e aggregazioni supportate, e nell'uso corretto delle funzioni avanzate di machine learning per l'analisi di outlier e per l'applicazione di modelli predittivi.

Come costruire applicazioni di ricerca avanzate utilizzando la ricerca ibrida e il recupero semantico

L'adattamento del dominio è una componente fondamentale per il recupero delle informazioni in scenari specializzati. Tradizionalmente, i modelli a vettori densi richiedono una rielaborazione sostanziale per ottenere prestazioni ottimali in ambiti specifici o con dataset specializzati. Questo processo spesso implica un lungo e complesso fine-tuning. D'altra parte, i modelli sparsi, che utilizzano tecniche di espansione del testo, riescono ad adattarsi a diversi domini con maggiore facilità, senza necessità di personalizzazioni significative.

Nel contesto dell'Elastic Stack, uno dei modelli più avanzati è l'ELSER (Elastic Learned Sparse Encoder), un modello che offre una serie di vantaggi in termini di adattabilità e versatilità. A differenza dei modelli a vettori densi, ELSER non richiede un addestramento continuo, rendendolo più facilmente applicabile a vari domini. La sua capacità di generalizzare senza un addestramento specifico lo rende ideale per applicazioni che richiedono una comprensione semantica generale dei dati. Tuttavia, uno dei limiti di ELSER risiede nel numero di token che è in grado di codificare: attualmente supporta solo i primi 512 token di un campo, il che può limitare l'utilizzo in presenza di campi di testo molto lunghi. In questi casi, tecniche come il "chunking" possono essere impiegate per suddividere il testo in segmenti più piccoli, facilitando il processo di indicizzazione e recupero delle informazioni.

Un altro aspetto che rende interessante ELSER è la sua capacità di supportare la quantizzazione, una tecnica che consente di comprimere i vettori per ridurre l'uso della memoria. Questo lo rende particolarmente utile in scenari di ricerca in tempo reale, dove la velocità di recupero è essenziale. La possibilità di combinare tecniche di ricerca sparse con metodi più tradizionali, come il BM25, consente di ottenere applicazioni di ricerca avanzate, in grado di sfruttare il meglio di entrambi i mondi: la precisione della ricerca lessicale e la comprensione semantica della ricerca vettoriale.

Quando si costruisce un'applicazione di ricerca avanzata, è possibile ottenere vantaggi significativi utilizzando una ricerca ibrida, che combina la ricerca lessicale (ad esempio BM25) con la ricerca vettoriale (come quella basata su k-NN). La ricerca ibrida consente di affinare i risultati, utilizzando parole chiave esatte, ma al contempo considerando anche il contesto semantico della query. Questo approccio è particolarmente utile in applicazioni RAG (Retrieval-Augmented Generation), dove è fondamentale avere accesso a informazioni rilevanti per generare risposte più precise e complete.

Per comprendere appieno le differenze tra questi approcci, è utile testare separatamente la ricerca lessicale e la ricerca vettoriale, osservando come viene calcolato il punteggio di rilevanza per ciascuna metodologia. La ricerca lessicale si basa su algoritmi come BM25, che calcolano i punteggi in base alla frequenza dei termini, mentre la ricerca vettoriale utilizza funzioni di similarità per determinare la pertinenza dei documenti rispetto alla query. Una volta compresi questi meccanismi, è possibile combinare i risultati di entrambe le ricerche in un'unica applicazione, aggiustando opportunamente i pesi (boost) per ciascun tipo di ricerca.

Ad esempio, in una configurazione ibrida, potrebbe essere opportuno dare un boost maggiore alla ricerca vettoriale se si desidera enfatizzare la semantica, o viceversa, a seconda del tipo di query e dei risultati desiderati. La combinazione di BM25 e k-NN consente di ottenere una ricerca che non solo trova corrispondenze esatte, ma che è anche in grado di restituire risultati pertinenti che rispecchiano il significato sottostante della query, migliorando così l'esperienza dell'utente e aumentando la precisione dei risultati.

L'approccio ibrido è particolarmente utile in scenari dove le query sono complesse e comprendono sia parole chiave specifiche che concetti più generali. La possibilità di raffinare i punteggi attraverso tecniche come il Reciprocal Rank Fusion (RRF) permette di ottenere un ranking più accurato, in grado di combinare i punti di forza delle diverse tecniche di ricerca.

Inoltre, la ricerca ibrida è essenziale per la costruzione di applicazioni che vanno oltre il semplice recupero di documenti: essa facilita l'implementazione di soluzioni avanzate, come le applicazioni RAG, che combinano il recupero delle informazioni con la generazione automatica di contenuti, migliorando l'efficacia e la qualità delle risposte fornite agli utenti.

Quando si progetta un'applicazione di ricerca avanzata, è importante comprendere la differenza tra le diverse tecniche di indicizzazione e recupero, e come esse possano essere combinate per ottenere il massimo delle prestazioni. L'Elastic Stack fornisce un'ampia gamma di strumenti per implementare e ottimizzare questi modelli, rendendo possibile la creazione di applicazioni di ricerca scalabili, veloci e intelligenti.