Elastic Stack, oltre a fornire potenti strumenti per la ricerca e l'analisi dei dati, si propone come una piattaforma completa per l'osservabilità. Questo concetto, ormai ampiamente riconosciuto nell'ambito dell'osservabilità, integra metriche, log, tracce, esperienza utente e profiling, diventando un punto di riferimento per il monitoraggio delle applicazioni e dei sistemi. L'Elastic Stack si configura così come uno strumento indispensabile per le aziende moderne che desiderano avere una visione centralizzata e in tempo reale delle performance dei propri servizi.

In questa sezione esploreremo come integrare diverse tipologie di dati per ottenere una visione completa del comportamento delle applicazioni e come Elastic APM (Application Performance Monitoring) possa essere utilizzato per il monitoraggio e l’analisi delle performance. Una parte fondamentale di questo processo è la strumentazione delle applicazioni con gli agenti APM, che permettono di raccogliere dati in tempo reale relativi a ciascun servizio.

Per cominciare, è necessario preparare l'ambiente di lavoro. Assicurarsi di avere un'istanza funzionante di Elastic Stack, che includa Elasticsearch per la memorizzazione dei dati, Kibana per la visualizzazione e la gestione del stack, e l'integrazione con Fleet e gli agenti. Inoltre, si deve disporre di una macchina locale con Docker installato e, nel caso si desideri monitorare ambienti Kubernetes, è richiesta una distribuzione Kubernetes da un servizio cloud, come Google Kubernetes Engine (GKE).

La strumentazione di una applicazione, come esempio, può essere avviata utilizzando un’applicazione di esempio chiamata "Elastiflix", un'applicazione microservizio. Per cominciare, bisogna configurare l’ambiente con le informazioni di connessione del proprio Elastic Cloud, incluse credenziali e URL di Elasticsearch. Una volta configurato l’ambiente, si può lanciare l’applicazione con Docker.

Dopo aver avviato l’applicazione, si deve configurare l’agente APM per raccogliere i dati sulle performance. A questo scopo, si deve accedere a Kibana e configurare l'APM Agent, scaricando l'agente Java e configurandolo correttamente per l’applicazione. In seguito, si devono aggiungere le specifiche per l'agent nel file di configurazione dell'applicazione, assicurandosi che l’applicazione stessa raccolga e invii i dati di performance al server APM.

Una volta che l'applicazione è correttamente strumentata, è possibile osservare i dati in Kibana, nella sezione APM, dove si possono visualizzare le prestazioni dei singoli microservizi. È possibile eseguire operazioni come il monitoraggio delle risposte dei servizi, la visualizzazione delle tracce di distribuzione tra i microservizi e l’identificazione di potenziali colli di bottiglia nel sistema.

Per una visione ancora più completa, è possibile estendere la strumentazione agli altri microservizi dell’applicazione. Questo processo, chiamato tracing distribuito, consente di monitorare come le singole richieste vengano propagate tra i vari microservizi, fornendo una visione globale della performance dell'intero sistema. Quando i vari microservizi sono correttamente strumentati, Kibana mostra una rappresentazione visiva delle relazioni tra i servizi, consentendo di analizzare rapidamente come le performance di un singolo componente possano influenzare l'intero ecosistema.

L'implementazione di Elastic APM è fondamentale non solo per la raccolta dei dati ma anche per l’individuazione di eventuali problematiche nel sistema, come errori, rallentamenti o problemi di latenza. Grazie alle funzionalità avanzate di Machine Learning integrate in Elastic, è possibile anche impostare delle soglie per l’emissione automatica di allarmi quando determinati parametri superano valori prestabiliti, come nel caso di anomalie nelle performance o nelle risorse.

Oltre alla configurazione degli agenti e alla raccolta dei dati, è cruciale comprendere l’importanza di un monitoraggio continuo. Le applicazioni moderne, soprattutto quelle basate su microservizi e ambienti cloud, sono estremamente dinamiche e il comportamento può cambiare rapidamente. La capacità di avere una visione in tempo reale della salute dell’applicazione permette di intervenire tempestivamente in caso di guasti, ottimizzando risorse e garantendo una migliore esperienza utente.

Per sfruttare appieno il potenziale di Elastic APM, è utile non solo monitorare le performance ma anche raccogliere informazioni dettagliate sull’interazione dell’utente con l’applicazione. Elastic Real User Monitoring (RUM) permette di acquisire dati sulle interazioni reali degli utenti, offrendo un altro livello di approfondimento nel monitoraggio delle performance applicative, in particolare lato front-end. Combinando APM, RUM e machine learning, si ottiene una piattaforma altamente integrata per l’osservabilità completa.

Sebbene Elastic APM offra molteplici vantaggi, è essenziale che gli sviluppatori e i team operativi abbiano una comprensione profonda di come configurare correttamente gli agenti, impostare le politiche di monitoraggio e interpretare i dati raccolti. L’implementazione corretta di queste tecnologie può trasformare il modo in cui le aziende gestiscono la performance delle loro applicazioni, riducendo i tempi di inattività, migliorando l’efficienza e, infine, ottimizzando l’esperienza utente.

Come Monitorare l'Elastic Stack con Terraform: Guida Completa

La configurazione di una strategia di monitoraggio centralizzato all'interno di un'infrastruttura Elastic Stack distribuita è un'operazione fondamentale per le operazioni aziendali che richiedono visibilità e controllo delle prestazioni dei vari componenti. Quando il monitoraggio tra regioni è essenziale, è necessario adattare la propria strategia di distribuzione per soddisfare le limitazioni infrastrutturali. In questo contesto, l'uso di Terraform, uno strumento di infrastruttura come codice (IaC), offre vantaggi significativi, consentendo la gestione automatica e ripetibile delle configurazioni. La seguente guida descrive i passi necessari per configurare il monitoraggio centralizzato di Elastic Stack utilizzando Terraform.

Per iniziare, scarica i file di configurazione di Terraform necessari dal repository ufficiale del libro al seguente link:
https://github.com/PacktPublishing/Elastic-Stack-8.x-Cookbook/blob/main/Chapter13/terraform/monitoring. Successivamente, apri il file .tfvar nel tuo editor preferito e aggiungi la tua chiave api_key, quindi salva il file. Come già visto nella configurazione dei componenti Elastic Stack con Terraform nel Capitolo 12, esegui i comandi seguenti per avere una panoramica di ciò che sarà distribuito:

ruby
$ terraform init
$ terraform plan

Dopo aver visualizzato il piano di distribuzione, esegui la configurazione con il comando:

ruby
$ terraform apply

Al termine dell'esecuzione con successo del comando, accedi alla console Elastic Cloud e cerca la distribuzione denominata terraform-monitoring. A questo punto, avrai una configurazione di base che funge da repository per i dati di monitoraggio.

Ora che il deployment per il monitoraggio è stato creato, è necessario configurare le distribuzioni principali affinché inviino i log e le metriche di monitoraggio. Vai alla console cloud, seleziona il deployment che desideri monitorare, e poi trova l'opzione "Logs and metrics" nel menu a sinistra e clicca su di essa. Nella pagina Logs and metrics, clicca su "Enable". Dal menu a discesa, seleziona la distribuzione terraform-monitoring e clicca su "Save" per applicare e salvare la configurazione. Una volta applicata la configurazione, la pagina Logs and metrics mostrerà il nuovo setup.

Ripeti la stessa operazione anche per altre distribuzioni, come la new-team deployment, per assicurarti che tutte le istanze siano configurate per inviare log e metriche al sistema di monitoraggio centralizzato. Ora che i log e le metriche sono stati correttamente configurati, è possibile esplorare come utilizzare questi dati all'interno dell'applicazione di monitoraggio dello stack.

Accedi alla console Kibana per la distribuzione terraform-monitoring e vai alla sezione Stack Monitoring sotto la voce "Management". Una volta arrivato alla pagina di Stack Monitoring, potrebbe apparire un pop-up riguardante la creazione di regole predefinite, ma per il momento clicca su "Remind me later". Successivamente, vedrai un elenco dei cluster monitorati.

Seleziona il cluster main-deployment dalla lista per accedere alla pagina di panoramica del monitoraggio. Inizia esplorando la sezione "Elasticsearch Overview", dove puoi focalizzarti su aspetti chiave come la salute e lo stato del cluster. La parte superiore della pagina ti fornirà una panoramica delle metriche principali di ricerca e indicizzazione. Utilizza questi dashboard per individuare rapidamente eventuali problemi di prestazioni. Nella parte inferiore della pagina, potrai osservare le voci dei log più recenti, utili per identificare errori o attività sospette da parte dei nodi.

I tab "Nodes" e "Indices" sono cruciali per un'analisi approfondita delle risorse. Il tab "Nodes" ti permette di comprendere come vengono utilizzate e allocate le risorse su ciascun nodo del tuo deployment, consentendoti di identificare rapidamente problemi come il "hot spotting" dei nodi, l'uso eccessivo della CPU o la saturazione del disco. Selezionando un nodo, è possibile accedere a informazioni dettagliate e metriche specifiche di ciascun nodo. Questi dati sono fondamentali per rispondere a domande come: "Il mio cluster o un nodo in particolare sta utilizzando troppe risorse?", "Qual è il collo di bottiglia in termini di CPU, I/O o JVM?" o "Come la latenza sperimentata dagli utenti si correla con l'uso delle risorse?".

Il tab "Indices" si concentra invece sugli aspetti legati allo storage dei dati, fornendo informazioni utili come il conteggio dei documenti, i tassi di indicizzazione e ricerca, e la presenza di shard non assegnati, che potrebbero compromettere la salute del cluster. Cliccando sul nome di un indice, è possibile visualizzare metriche specifiche per quel particolare indice e risolvere problemi relativi a rallentamenti nell'indicizzazione o nelle ricerche.

Una recente aggiunta alla funzionalità di Stack Monitoring è il tab "Ingest Pipelines", che offre informazioni utili sulle prestazioni e il throughput del processo di ingestione dei dati. Questo strumento è particolarmente utile per chi gestisce numerosi pipeline di ingestione nei propri cluster.

Una volta acquisiti dati utili dai vari tab, un altro vantaggio significativo di Stack Monitoring è la possibilità di ricevere avvisi se la tua distribuzione mostra segni di degrado. Stack Monitoring viene fornito con un set di regole preconfigurate, basate sulle migliori pratiche degli esperti di Elastic Stack. Per attivare queste regole, clicca sul menu a tendina "Alerts and rules" nella parte superiore destra della pagina di panoramica e seleziona "Create default rules". Se appare una finestra pop-up riguardante la migrazione degli avvisi, clicca su "Create" e attendi che le regole vengano attivate.

Le regole possono essere modificate, se necessario, ma è importante ricordare che sono basate su best practices e raccomandazioni degli esperti del sistema. Per modificare le regole, accedi alla modalità di configurazione cliccando su "Enter setup mode" e seleziona le regole da personalizzare. Questo approccio è utile anche per aggiungere azioni e notifiche tramite connettori come e-mail, Slack o altre piattaforme.

Infine, mentre la nostra attenzione si è focalizzata principalmente su Elasticsearch, anche il monitoraggio di Kibana e degli Integration Servers è disponibile. Torna alla panoramica del cluster e clicca su "Overview" sotto la sezione Kibana per visualizzare metriche relative alle attività degli utenti (richieste e risposte) e altri dati cruciali sull'uso della memoria e delle code per tutte le istanze Kibana. Analogamente, la sezione "Integration Servers" offre informazioni sul consumo delle risorse e sulle metriche specifiche relative alle attività di ingestione.