Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Suggerimento
Questo contenuto è un estratto dell'eBook Architecting Cloud Native .NET Applications for Azure, disponibile in .NET Docs o come PDF scaricabile gratuito che può essere letto offline.
Esistono molti strumenti di registrazione centralizzati validi e variano a seconda dei costi, dagli strumenti open source gratuiti alle opzioni più costose. In molti casi, gli strumenti gratuiti sono buoni come o meglio delle offerte a pagamento. Uno di questi strumenti è una combinazione di tre componenti open source: Elasticsearch, Logstash e Kibana.
Collettivamente questi strumenti sono noti come stack Elastic Stack o ELK.
Elastic Stack
Elastic Stack è un'opzione efficace per raccogliere informazioni da un cluster Kubernetes. Kubernetes supporta l'invio di log a un endpoint Elasticsearch e, per la maggior parte, è sufficiente iniziare a impostare le variabili di ambiente, come illustrato nella figura 7-5:
KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true
Figura 7-5. Variabili di configurazione per Kubernetes
Questo passaggio installerà Elasticsearch nel cluster e si prefigge di inviare tutti i log del cluster direttamente a questo sistema.
figura 7-6. Esempio di dashboard Kibana che mostra i risultati di una query sui log raccolti da Kubernetes
Per altre informazioni sulla configurazione, vedere Configurare la registrazione (Kibana).
Quali sono i vantaggi di Elastic Stack?
Elastic Stack offre la registrazione centralizzata in modo semplice e scalabile e a basso costo. L'interfaccia utente semplifica l'analisi dei dati, permettendoti di dedicare il tuo tempo a ottenere informazioni dai tuoi dati invece di combattere con un'interfaccia ingombrante. Supporta un'ampia gamma di input, in modo che man mano che l'applicazione distribuita si estende per includere un numero maggiore e più vari tipi di servizi, si possa continuare a inviare dati di log e metriche nel sistema. Elastic Stack supporta anche ricerche veloci in set di dati di grandi dimensioni, consentendo anche alle applicazioni di grandi dimensioni di registrare dati dettagliati e di avere visibilità su di esso in modo efficiente.
Logstash
Il primo componente è Logstash. Questo strumento viene usato per raccogliere informazioni di log da un'ampia gamma di origini diverse. Logstash, ad esempio, può leggere i log dal disco e ricevere messaggi anche da librerie di registrazione come Serilog. Logstash può eseguire alcune operazioni di filtro e espansione di base sui log non appena arrivano. Ad esempio, se i log contengono indirizzi IP, Logstash può essere configurato per eseguire una ricerca geografica e ottenere un paese o anche una città di origine per tale messaggio.
Serilog è una libreria di registrazione per i linguaggi .NET, che consente la registrazione con parametri. Anziché generare un messaggio di log testuale che incorpora i campi, i parametri vengono mantenuti separati. Questa libreria consente filtri e ricerche più intelligenti. Nella figura 7-7 viene visualizzata una configurazione serilog di esempio per la scrittura in Logstash.
var log = new LoggerConfiguration()
.WriteTo.Http("http://localhost:8080")
.CreateLogger();
Figura 7-7. Configurazione di Serilog per la scrittura di informazioni di log direttamente in logstash su HTTP
Logstash usa una configurazione simile a quella illustrata nella figura 7-8.
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index=>"sales-%{+xxxx.ww}"
}
}
Figura 7-8. Configurazione Logstash per ricevere i log da Serilog
Per gli scenari in cui non è necessaria una manipolazione completa dei log, esiste un'alternativa a Logstash nota come Beats. Beats è una famiglia di strumenti che possono raccogliere un'ampia varietà di dati, dai log ai dati di rete e alle informazioni sull'uptime. Molte applicazioni useranno Logstash e Beats.
Una volta che i log sono stati raccolti da Logstash, è necessario un luogo dove metterli. Mentre Logstash supporta molti output diversi, uno dei più interessanti è Elasticsearch.
Elasticsearch
Elasticsearch è un potente motore di ricerca in grado di indicizzare i log non appena arrivano. Esegue rapidamente query sui log. Elasticsearch può gestire grandi quantità di log e, in casi estremi, può essere ridimensionato in molti nodi.
I messaggi di log creati per contenere parametri o che avevano parametri suddivisi da essi tramite l'elaborazione Logstash, possono essere sottoposti a query direttamente perché Elasticsearch mantiene queste informazioni.
Una query che cerca le prime 10 pagine visitate da jill@example.com
viene visualizzata nella figura 7-9.
"query": {
"match": {
"user": "jill@example.com"
}
},
"aggregations": {
"top_10_pages": {
"terms": {
"field": "page",
"size": 10
}
}
}
Figura 7-9. Query Elasticsearch per trovare le prime 10 pagine visitate da un utente
Visualizzazione delle informazioni con i dashboard Web Kibana
Il componente finale dello stack è Kibana. Questo strumento viene usato per fornire visualizzazioni interattive in un dashboard Web. I dashboard possono essere creati anche da utenti non tecnici. La maggior parte dei dati residenti nell'indice Elasticsearch può essere inclusa nei dashboard kibana. I singoli utenti possono avere desideri di dashboard diversi e Kibana abilita questa personalizzazione consentendo dashboard specifici dell'utente.
Installazione di Elastic Stack in Azure
Lo stack elastico può essere installato in Azure in molti modi. Come sempre, è possibile effettuare direttamente il provisioning delle macchine virtuali e installare Elastic Stack. Questa opzione è preferita da alcuni utenti esperti perché offre il massimo grado di personalizzazione. La distribuzione nell'infrastruttura distribuita come servizio introduce un sovraccarico di gestione significativo forzando coloro che accettano tale percorso per assumere la proprietà di tutte le attività associate all'infrastruttura distribuita come servizio, ad esempio proteggere i computer e mantenere up-to-date con le patch.
Un'opzione con meno sovraccarico consiste nell'usare uno dei numerosi contenitori Docker in cui è già stato configurato Elastic Stack. Questi contenitori possono essere inseriti in un cluster Kubernetes esistente ed eseguiti insieme al codice applicativo. Il contenitore sebp/elk è un contenitore Elastic Stack ben documentato e testato.
Un'altra opzione è un'offerta ELK-as-a-service annunciata di recente.