Konfiguration af Docker Compose-filen
Nu hvor alle nødvendige konfigurationer er på plads — for Filebeat, Logstash og Flask-applikationen — er det tid til at samle dem og køre dem som ét samlet system. Til dette formål anvender vi Docker Compose.
Docker Compose er et værktøj, der gør det muligt at definere alle nødvendige containere i én YAML-fil og starte dem med én kommando.
I stedet for at skrive en separat docker run
-kommando for hver service, angives deres konfigurationer blot i docker-compose.yml
, hvorefter alt startes samlet.
En simpel docker-compose.yml
-fil ser således ud:
docker-compose.yml
Lad os nu oprette en komplet fil trin for trin og forklare hver container undervejs.
Flask-applikation
Dette er din hovedapplikation, der genererer logs.
docker-compose.yml
Dette afsnit instruerer Docker i at bygge containeren fra den aktuelle mappe (hvor din Dockerfile er placeret).
Containeren får navnet flask-app
.
Linjen volumes
forbinder den lokale ./logs
mappe til /logs
inde i containeren. På denne måde gemmes alle logs, der oprettes af applikationen, både inde i containeren og på din computer.
Applikationen kører inde i containeren på port 5000, men vi mapper den til port 5050 på din maskine, så du kan tilgå den i din browser på http://localhost:5050
.
Filebeat
Filebeat fungerer som en agent, der overvåger logfiler og sender nye poster til Logstash.
docker-compose.yml
Filebeat kører fra det officielle 8.15.0
-image.
Den kører som root
-bruger for at have tilladelse til at læse logfiler.
Vi tilknytter mappen ./logs
i skrivebeskyttet tilstand samt konfigurationsfilen filebeat.yml
. Dette instruerer Filebeat om, hvilke logs der skal overvåges, og hvor de skal sendes hen.
depends_on
sikrer, at Filebeat først starter, når applikationen og Logstash kører.
Logstash
Logstash modtager logs fra Filebeat, behandler dem (for eksempel ved at parse JSON), og videresender dem til Elasticsearch.
docker-compose.yml
Denne container anvender det officielle Logstash-image.
Vi monterer konfigurationsfilen logstash.conf
, som angiver, hvordan Logstash skal behandle indkommende logs.
Containeren starter først, når Elasticsearch kører, da den har brug for en destination til de behandlede logs.
Port 5044 eksponeres, så Filebeat kan sende data til Logstash.
Elasticsearch
Elasticsearch gemmer logs som dokumenter og muliggør hurtig søgning i dem.
docker-compose.yml
Vi bruger det officielle Elasticsearch-image version 8.15.0
.
discovery.type=single-node
angiver, at vi kører et enkelt-node cluster (tilstrækkeligt til lokal test);xpack.security.enabled=false
deaktiverer sikkerhed, så du ikke behøver at håndtere brugernavne og adgangskoder;ES_JAVA_OPTS
begrænser Java-processens hukommelsesforbrug.
Tjenesten er tilgængelig på port 9200 via http://localhost:9200
.
Kibana
Kibana er et webinterface til Elasticsearch. Det hjælper med at visualisere logs og oprette dashboards.
docker-compose.yml
Vi bruger det officielle Kibana-image.
Port 5601 er eksponeret, så du kan få adgang til Kibana i din browser på http://localhost:5601
.
ELASTICSEARCH_HOSTS
peger Kibana mod vores Elasticsearch-container, så den kan hente og vise data.
Endelig docker-compose.yml
Her er den komplette Docker Compose-fil med alle tjenester forbundet i den korrekte rækkefølge:
docker-compose.yml
Denne docker-compose.yml
starter alle tjenesterne i den korrekte rækkefølge. Flask-applikationen genererer logs, Filebeat indsamler dem og sender dem til Logstash, Logstash behandler logs og videresender dem til Elasticsearch, og Kibana giver en webgrænseflade til visning og analyse af dataene.
Det eneste der mangler, er at køre systemet og teste det, hvilket vil blive gennemgået i næste kapitel.
1. Hvad er hovedformålet med Docker Compose i denne opsætning?
2. Hvilken tjeneste er ansvarlig for at indsamle logfiler fra Flask-applikationen og sende dem til Logstash?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.7
Konfiguration af Docker Compose-filen
Stryg for at vise menuen
Nu hvor alle nødvendige konfigurationer er på plads — for Filebeat, Logstash og Flask-applikationen — er det tid til at samle dem og køre dem som ét samlet system. Til dette formål anvender vi Docker Compose.
Docker Compose er et værktøj, der gør det muligt at definere alle nødvendige containere i én YAML-fil og starte dem med én kommando.
I stedet for at skrive en separat docker run
-kommando for hver service, angives deres konfigurationer blot i docker-compose.yml
, hvorefter alt startes samlet.
En simpel docker-compose.yml
-fil ser således ud:
docker-compose.yml
Lad os nu oprette en komplet fil trin for trin og forklare hver container undervejs.
Flask-applikation
Dette er din hovedapplikation, der genererer logs.
docker-compose.yml
Dette afsnit instruerer Docker i at bygge containeren fra den aktuelle mappe (hvor din Dockerfile er placeret).
Containeren får navnet flask-app
.
Linjen volumes
forbinder den lokale ./logs
mappe til /logs
inde i containeren. På denne måde gemmes alle logs, der oprettes af applikationen, både inde i containeren og på din computer.
Applikationen kører inde i containeren på port 5000, men vi mapper den til port 5050 på din maskine, så du kan tilgå den i din browser på http://localhost:5050
.
Filebeat
Filebeat fungerer som en agent, der overvåger logfiler og sender nye poster til Logstash.
docker-compose.yml
Filebeat kører fra det officielle 8.15.0
-image.
Den kører som root
-bruger for at have tilladelse til at læse logfiler.
Vi tilknytter mappen ./logs
i skrivebeskyttet tilstand samt konfigurationsfilen filebeat.yml
. Dette instruerer Filebeat om, hvilke logs der skal overvåges, og hvor de skal sendes hen.
depends_on
sikrer, at Filebeat først starter, når applikationen og Logstash kører.
Logstash
Logstash modtager logs fra Filebeat, behandler dem (for eksempel ved at parse JSON), og videresender dem til Elasticsearch.
docker-compose.yml
Denne container anvender det officielle Logstash-image.
Vi monterer konfigurationsfilen logstash.conf
, som angiver, hvordan Logstash skal behandle indkommende logs.
Containeren starter først, når Elasticsearch kører, da den har brug for en destination til de behandlede logs.
Port 5044 eksponeres, så Filebeat kan sende data til Logstash.
Elasticsearch
Elasticsearch gemmer logs som dokumenter og muliggør hurtig søgning i dem.
docker-compose.yml
Vi bruger det officielle Elasticsearch-image version 8.15.0
.
discovery.type=single-node
angiver, at vi kører et enkelt-node cluster (tilstrækkeligt til lokal test);xpack.security.enabled=false
deaktiverer sikkerhed, så du ikke behøver at håndtere brugernavne og adgangskoder;ES_JAVA_OPTS
begrænser Java-processens hukommelsesforbrug.
Tjenesten er tilgængelig på port 9200 via http://localhost:9200
.
Kibana
Kibana er et webinterface til Elasticsearch. Det hjælper med at visualisere logs og oprette dashboards.
docker-compose.yml
Vi bruger det officielle Kibana-image.
Port 5601 er eksponeret, så du kan få adgang til Kibana i din browser på http://localhost:5601
.
ELASTICSEARCH_HOSTS
peger Kibana mod vores Elasticsearch-container, så den kan hente og vise data.
Endelig docker-compose.yml
Her er den komplette Docker Compose-fil med alle tjenester forbundet i den korrekte rækkefølge:
docker-compose.yml
Denne docker-compose.yml
starter alle tjenesterne i den korrekte rækkefølge. Flask-applikationen genererer logs, Filebeat indsamler dem og sender dem til Logstash, Logstash behandler logs og videresender dem til Elasticsearch, og Kibana giver en webgrænseflade til visning og analyse af dataene.
Det eneste der mangler, er at køre systemet og teste det, hvilket vil blive gennemgået i næste kapitel.
1. Hvad er hovedformålet med Docker Compose i denne opsætning?
2. Hvilken tjeneste er ansvarlig for at indsamle logfiler fra Flask-applikationen og sende dem til Logstash?
Tak for dine kommentarer!