Configurazione del File Docker Compose
Ora che tutte le configurazioni necessarie sono state completate — per Filebeat, Logstash e l'applicazione Flask — è il momento di unirle ed eseguirle come un unico sistema. Per fare ciò, utilizzeremo Docker Compose.
Docker Compose è uno strumento che consente di definire tutti i container necessari in un unico file YAML ed eseguirli con un solo comando.
Invece di scrivere un comando docker run
separato per ciascun servizio, basta inserire le loro configurazioni in docker-compose.yml
ed eseguire tutto insieme.
Un semplice file docker-compose.yml
si presenta così:
docker-compose.yml
Ora, creiamo un file completo passo dopo passo, spiegando ogni container lungo il percorso.
Applicazione Flask
Questa è la tua applicazione principale che genera log.
docker-compose.yml
Questo blocco indica a Docker di costruire il container dalla cartella corrente (dove si trova il tuo Dockerfile).
Il container sarà chiamato flask-app
.
La riga volumes
collega la cartella locale ./logs
a /logs
all'interno del container. In questo modo, tutti i log creati dall'applicazione vengono salvati sia all'interno del container che sul tuo computer.
L'applicazione viene eseguita all'interno del container sulla porta 5000, ma la mappiamo sulla porta 5050 della tua macchina così puoi accedervi dal browser all'indirizzo http://localhost:5050
.
Filebeat
Filebeat agisce come un agente che monitora i file di log e invia le nuove voci a Logstash.
docker-compose.yml
Filebeat viene eseguito dall'immagine ufficiale 8.15.0
.
Viene eseguito come utente root
per avere i permessi necessari alla lettura dei file di log.
La cartella ./logs
viene montata in modalità sola lettura insieme al file di configurazione filebeat.yml
. Questo indica a Filebeat quali log monitorare e dove inviarli.
depends_on
garantisce che Filebeat venga avviato solo dopo che l'applicazione e Logstash sono in esecuzione.
Logstash
Logstash riceve i log da Filebeat, li elabora (ad esempio, analizza JSON) e li inoltra a Elasticsearch.
docker-compose.yml
Questo container utilizza l'immagine ufficiale di Logstash.
Montiamo il file di configurazione logstash.conf
, che indica a Logstash come elaborare i log in ingresso.
Il container viene avviato solo dopo che Elasticsearch è in esecuzione, poiché necessita di una destinazione per i log elaborati.
La porta 5044 è esposta affinché Filebeat possa inviare dati a Logstash.
Elasticsearch
Elasticsearch memorizza i log come documenti e consente di eseguirne rapidamente la ricerca.
docker-compose.yml
Utilizziamo l'immagine ufficiale di Elasticsearch versione 8.15.0
.
discovery.type=single-node
specifica che stiamo eseguendo un cluster a nodo singolo (sufficiente per i test locali);xpack.security.enabled=false
disabilita la sicurezza, così non è necessario gestire nomi utente e password;ES_JAVA_OPTS
limita l'utilizzo della memoria del processo Java.
Il servizio è accessibile sulla porta 9200 all'indirizzo http://localhost:9200
.
Kibana
Kibana è un'interfaccia web per Elasticsearch. Aiuta a visualizzare i log e creare dashboard.
docker-compose.yml
Utilizziamo l'immagine ufficiale di Kibana.
La porta 5601 è esposta, quindi puoi accedere a Kibana dal tuo browser all'indirizzo http://localhost:5601
.
ELASTICSEARCH_HOSTS
indirizza Kibana al nostro container Elasticsearch affinché possa recuperare e visualizzare i dati.
File docker-compose.yml finale
Di seguito è riportato il file completo di Docker Compose con tutti i servizi collegati nell'ordine corretto:
docker-compose.yml
Questo docker-compose.yml
avvia tutti i servizi nell'ordine corretto. L'applicazione Flask genera i log, Filebeat li raccoglie e li invia a Logstash, Logstash elabora i log e li inoltra a Elasticsearch, e Kibana fornisce un'interfaccia web per visualizzare e analizzare i dati.
Tutto ciò che resta da fare è eseguire il sistema e testarlo, argomenti che verranno trattati nel prossimo capitolo.
1. Qual è lo scopo principale di Docker Compose in questa configurazione?
2. Quale servizio è responsabile della raccolta dei file di log dall'applicazione Flask e dell'invio a Logstash?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.7
Configurazione del File Docker Compose
Scorri per mostrare il menu
Ora che tutte le configurazioni necessarie sono state completate — per Filebeat, Logstash e l'applicazione Flask — è il momento di unirle ed eseguirle come un unico sistema. Per fare ciò, utilizzeremo Docker Compose.
Docker Compose è uno strumento che consente di definire tutti i container necessari in un unico file YAML ed eseguirli con un solo comando.
Invece di scrivere un comando docker run
separato per ciascun servizio, basta inserire le loro configurazioni in docker-compose.yml
ed eseguire tutto insieme.
Un semplice file docker-compose.yml
si presenta così:
docker-compose.yml
Ora, creiamo un file completo passo dopo passo, spiegando ogni container lungo il percorso.
Applicazione Flask
Questa è la tua applicazione principale che genera log.
docker-compose.yml
Questo blocco indica a Docker di costruire il container dalla cartella corrente (dove si trova il tuo Dockerfile).
Il container sarà chiamato flask-app
.
La riga volumes
collega la cartella locale ./logs
a /logs
all'interno del container. In questo modo, tutti i log creati dall'applicazione vengono salvati sia all'interno del container che sul tuo computer.
L'applicazione viene eseguita all'interno del container sulla porta 5000, ma la mappiamo sulla porta 5050 della tua macchina così puoi accedervi dal browser all'indirizzo http://localhost:5050
.
Filebeat
Filebeat agisce come un agente che monitora i file di log e invia le nuove voci a Logstash.
docker-compose.yml
Filebeat viene eseguito dall'immagine ufficiale 8.15.0
.
Viene eseguito come utente root
per avere i permessi necessari alla lettura dei file di log.
La cartella ./logs
viene montata in modalità sola lettura insieme al file di configurazione filebeat.yml
. Questo indica a Filebeat quali log monitorare e dove inviarli.
depends_on
garantisce che Filebeat venga avviato solo dopo che l'applicazione e Logstash sono in esecuzione.
Logstash
Logstash riceve i log da Filebeat, li elabora (ad esempio, analizza JSON) e li inoltra a Elasticsearch.
docker-compose.yml
Questo container utilizza l'immagine ufficiale di Logstash.
Montiamo il file di configurazione logstash.conf
, che indica a Logstash come elaborare i log in ingresso.
Il container viene avviato solo dopo che Elasticsearch è in esecuzione, poiché necessita di una destinazione per i log elaborati.
La porta 5044 è esposta affinché Filebeat possa inviare dati a Logstash.
Elasticsearch
Elasticsearch memorizza i log come documenti e consente di eseguirne rapidamente la ricerca.
docker-compose.yml
Utilizziamo l'immagine ufficiale di Elasticsearch versione 8.15.0
.
discovery.type=single-node
specifica che stiamo eseguendo un cluster a nodo singolo (sufficiente per i test locali);xpack.security.enabled=false
disabilita la sicurezza, così non è necessario gestire nomi utente e password;ES_JAVA_OPTS
limita l'utilizzo della memoria del processo Java.
Il servizio è accessibile sulla porta 9200 all'indirizzo http://localhost:9200
.
Kibana
Kibana è un'interfaccia web per Elasticsearch. Aiuta a visualizzare i log e creare dashboard.
docker-compose.yml
Utilizziamo l'immagine ufficiale di Kibana.
La porta 5601 è esposta, quindi puoi accedere a Kibana dal tuo browser all'indirizzo http://localhost:5601
.
ELASTICSEARCH_HOSTS
indirizza Kibana al nostro container Elasticsearch affinché possa recuperare e visualizzare i dati.
File docker-compose.yml finale
Di seguito è riportato il file completo di Docker Compose con tutti i servizi collegati nell'ordine corretto:
docker-compose.yml
Questo docker-compose.yml
avvia tutti i servizi nell'ordine corretto. L'applicazione Flask genera i log, Filebeat li raccoglie e li invia a Logstash, Logstash elabora i log e li inoltra a Elasticsearch, e Kibana fornisce un'interfaccia web per visualizzare e analizzare i dati.
Tutto ciò che resta da fare è eseguire il sistema e testarlo, argomenti che verranno trattati nel prossimo capitolo.
1. Qual è lo scopo principale di Docker Compose in questa configurazione?
2. Quale servizio è responsabile della raccolta dei file di log dall'applicazione Flask e dell'invio a Logstash?
Grazie per i tuoi commenti!