Konfigurera Docker Compose-filen
Nu när alla nödvändiga konfigurationer är på plats — för Filebeat, Logstash och Flask-applikationen — är det dags att samla dem och köra dem som ett enda system. För detta använder vi Docker Compose.
Docker Compose är ett verktyg som låter dig definiera alla nödvändiga containrar i en enda YAML-fil och köra dem med ett enda kommando.
Istället för att skriva ett separat docker run
-kommando för varje tjänst, skriver du bara deras konfigurationer i docker-compose.yml
och kör allt tillsammans.
En enkel docker-compose.yml
-fil ser ut så här:
docker-compose.yml
Nu ska vi skapa en komplett fil steg för steg och förklara varje container längs vägen.
Flask-applikation
Detta är din huvudapplikation som genererar loggar.
docker-compose.yml
Detta block instruerar Docker att bygga containern från den aktuella mappen (där din Dockerfile finns).
Containern kommer att heta flask-app
.
Raden volumes
kopplar den lokala mappen ./logs
till /logs
inuti containern. På så sätt sparas alla loggar som skapas av applikationen både i containern och på din dator.
Applikationen körs inuti containern på port 5000, men vi mappar den till port 5050 på din dator så att du kan komma åt den i din webbläsare via http://localhost:5050
.
Filebeat
Filebeat fungerar som en agent som övervakar loggfiler och skickar nya poster till Logstash.
docker-compose.yml
Filebeat körs från den officiella 8.15.0
-imagen.
Den körs som användaren root
för att ha behörighet att läsa loggfiler.
Vi monterar mappen ./logs
i skrivskyddat läge samt konfigurationsfilen filebeat.yml
. Detta anger för Filebeat vilka loggar som ska övervakas och vart de ska skickas.
depends_on
säkerställer att Filebeat startar först efter att applikationen och Logstash körs.
Logstash
Logstash tar emot loggar från Filebeat, bearbetar dem (till exempel tolkar JSON) och vidarebefordrar dem till Elasticsearch.
docker-compose.yml
Denna container använder den officiella Logstash-avbilden.
Vi monterar konfigurationsfilen logstash.conf
, som anger för Logstash hur inkommande loggar ska bearbetas.
Containern startar först efter att Elasticsearch körs, eftersom den behöver en destination för de bearbetade loggarna.
Port 5044 exponeras så att Filebeat kan skicka data till Logstash.
Elasticsearch
Elasticsearch lagrar loggar som dokument och möjliggör snabb sökning bland dem.
docker-compose.yml
Vi använder den officiella Elasticsearch-bilden version 8.15.0
.
discovery.type=single-node
anger att vi kör ett en-nods-kluster (tillräckligt för lokal testning);xpack.security.enabled=false
inaktiverar säkerhet så att du inte behöver hantera användarnamn och lösenord;ES_JAVA_OPTS
begränsar Java-processens minnesanvändning.
Tjänsten är tillgänglig på port 9200 via http://localhost:9200
.
Kibana
Kibana är ett webbgränssnitt för Elasticsearch. Det hjälper till att visualisera loggar och skapa instrumentpaneler.
docker-compose.yml
Vi använder den officiella Kibana-imagen.
Port 5601 exponeras så att du kan komma åt Kibana i din webbläsare på http://localhost:5601
.
ELASTICSEARCH_HOSTS
pekar Kibana till vår Elasticsearch-container så att den kan hämta och visa data.
Slutlig docker-compose.yml
Här är den kompletta Docker Compose-filen med alla tjänster kopplade i rätt ordning:
docker-compose.yml
Denna docker-compose.yml
startar alla tjänster i rätt ordning. Flask-applikationen genererar loggar, Filebeat samlar in dem och skickar dem till Logstash, Logstash bearbetar loggarna och vidarebefordrar dem till Elasticsearch, och Kibana tillhandahåller ett webbgränssnitt för att visa och analysera data.
Det enda som återstår är att köra systemet och testa det, vilket kommer att behandlas i nästa kapitel.
1. Vad är huvudsyftet med Docker Compose i denna konfiguration?
2. Vilken tjänst ansvarar för att samla in loggfiler från Flask-applikationen och skicka dem till Logstash?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 3.7
Konfigurera Docker Compose-filen
Svep för att visa menyn
Nu när alla nödvändiga konfigurationer är på plats — för Filebeat, Logstash och Flask-applikationen — är det dags att samla dem och köra dem som ett enda system. För detta använder vi Docker Compose.
Docker Compose är ett verktyg som låter dig definiera alla nödvändiga containrar i en enda YAML-fil och köra dem med ett enda kommando.
Istället för att skriva ett separat docker run
-kommando för varje tjänst, skriver du bara deras konfigurationer i docker-compose.yml
och kör allt tillsammans.
En enkel docker-compose.yml
-fil ser ut så här:
docker-compose.yml
Nu ska vi skapa en komplett fil steg för steg och förklara varje container längs vägen.
Flask-applikation
Detta är din huvudapplikation som genererar loggar.
docker-compose.yml
Detta block instruerar Docker att bygga containern från den aktuella mappen (där din Dockerfile finns).
Containern kommer att heta flask-app
.
Raden volumes
kopplar den lokala mappen ./logs
till /logs
inuti containern. På så sätt sparas alla loggar som skapas av applikationen både i containern och på din dator.
Applikationen körs inuti containern på port 5000, men vi mappar den till port 5050 på din dator så att du kan komma åt den i din webbläsare via http://localhost:5050
.
Filebeat
Filebeat fungerar som en agent som övervakar loggfiler och skickar nya poster till Logstash.
docker-compose.yml
Filebeat körs från den officiella 8.15.0
-imagen.
Den körs som användaren root
för att ha behörighet att läsa loggfiler.
Vi monterar mappen ./logs
i skrivskyddat läge samt konfigurationsfilen filebeat.yml
. Detta anger för Filebeat vilka loggar som ska övervakas och vart de ska skickas.
depends_on
säkerställer att Filebeat startar först efter att applikationen och Logstash körs.
Logstash
Logstash tar emot loggar från Filebeat, bearbetar dem (till exempel tolkar JSON) och vidarebefordrar dem till Elasticsearch.
docker-compose.yml
Denna container använder den officiella Logstash-avbilden.
Vi monterar konfigurationsfilen logstash.conf
, som anger för Logstash hur inkommande loggar ska bearbetas.
Containern startar först efter att Elasticsearch körs, eftersom den behöver en destination för de bearbetade loggarna.
Port 5044 exponeras så att Filebeat kan skicka data till Logstash.
Elasticsearch
Elasticsearch lagrar loggar som dokument och möjliggör snabb sökning bland dem.
docker-compose.yml
Vi använder den officiella Elasticsearch-bilden version 8.15.0
.
discovery.type=single-node
anger att vi kör ett en-nods-kluster (tillräckligt för lokal testning);xpack.security.enabled=false
inaktiverar säkerhet så att du inte behöver hantera användarnamn och lösenord;ES_JAVA_OPTS
begränsar Java-processens minnesanvändning.
Tjänsten är tillgänglig på port 9200 via http://localhost:9200
.
Kibana
Kibana är ett webbgränssnitt för Elasticsearch. Det hjälper till att visualisera loggar och skapa instrumentpaneler.
docker-compose.yml
Vi använder den officiella Kibana-imagen.
Port 5601 exponeras så att du kan komma åt Kibana i din webbläsare på http://localhost:5601
.
ELASTICSEARCH_HOSTS
pekar Kibana till vår Elasticsearch-container så att den kan hämta och visa data.
Slutlig docker-compose.yml
Här är den kompletta Docker Compose-filen med alla tjänster kopplade i rätt ordning:
docker-compose.yml
Denna docker-compose.yml
startar alla tjänster i rätt ordning. Flask-applikationen genererar loggar, Filebeat samlar in dem och skickar dem till Logstash, Logstash bearbetar loggarna och vidarebefordrar dem till Elasticsearch, och Kibana tillhandahåller ett webbgränssnitt för att visa och analysera data.
Det enda som återstår är att köra systemet och testa det, vilket kommer att behandlas i nästa kapitel.
1. Vad är huvudsyftet med Docker Compose i denna konfiguration?
2. Vilken tjänst ansvarar för att samla in loggfiler från Flask-applikationen och skicka dem till Logstash?
Tack för dina kommentarer!