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-nodespecifica che stiamo eseguendo un cluster a nodo singolo (sufficiente per i test locali);xpack.security.enabled=falsedisabilita la sicurezza, così non è necessario gestire nomi utente e password;ES_JAVA_OPTSlimita 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
How do I start all the services using Docker Compose?
Can you explain how the services communicate with each other?
What should I check if one of the services fails to start?
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-nodespecifica che stiamo eseguendo un cluster a nodo singolo (sufficiente per i test locali);xpack.security.enabled=falsedisabilita la sicurezza, così non è necessario gestire nomi utente e password;ES_JAVA_OPTSlimita 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!