Konfigurering av Docker Compose-filen
Nå som alle nødvendige konfigurasjoner er på plass — for Filebeat, Logstash og Flask-applikasjonen — er det på tide å samle dem og kjøre dem som ett system. For å gjøre dette, bruker vi Docker Compose.
Docker Compose er et verktøy som lar deg definere alle nødvendige containere i én YAML-fil og kjøre dem med én kommando.
I stedet for å skrive en egen docker run
-kommando for hver tjeneste, skriver du bare konfigurasjonene deres i docker-compose.yml
og kjører alt sammen.
En enkel docker-compose.yml
-fil ser slik ut:
docker-compose.yml
La oss nå lage en komplett fil steg for steg, med forklaring av hver container underveis.
Flask-applikasjon
Dette er hovedapplikasjonen din som genererer logger.
docker-compose.yml
Denne blokken instruerer Docker til å bygge containeren fra den nåværende mappen (der din Dockerfile er plassert).
Containeren vil få navnet flask-app
.
Linjen volumes
kobler den lokale mappen ./logs
til /logs
inne i containeren. På denne måten lagres alle logger som opprettes av applikasjonen både inne i containeren og på din datamaskin.
Applikasjonen kjører inne i containeren på port 5000, men vi mapper den til port 5050 på din maskin slik at du kan få tilgang til den i nettleseren på http://localhost:5050
.
Filebeat
Filebeat fungerer som en agent som overvåker loggfiler og sender nye oppføringer til Logstash.
docker-compose.yml
Filebeat kjøres fra det offisielle 8.15.0
-bildet.
Den kjøres som root
-bruker for å ha tillatelse til å lese loggfiler.
Vi monterer ./logs
-mappen i skrivebeskyttet modus og konfigurasjonsfilen filebeat.yml
. Dette forteller Filebeat hvilke logger som skal overvåkes og hvor de skal sendes.
depends_on
sikrer at Filebeat starter først etter at applikasjonen og Logstash kjører.
Logstash
Logstash mottar logger fra Filebeat, behandler dem (for eksempel parser JSON) og videresender dem til Elasticsearch.
docker-compose.yml
Denne containeren bruker det offisielle Logstash-bildet.
Vi monterer konfigurasjonsfilen logstash.conf
, som instruerer Logstash om hvordan innkommende logger skal behandles.
Containeren starter først etter at Elasticsearch kjører, siden den trenger et mål for de behandlede loggene.
Port 5044 eksponeres slik at Filebeat kan sende data til Logstash.
Elasticsearch
Elasticsearch lagrer logger som dokumenter og gir mulighet for raskt søk gjennom dem.
docker-compose.yml
Vi bruker det offisielle Elasticsearch-bildet versjon 8.15.0
.
discovery.type=single-node
angir at vi kjører en enkelt-node klynge (tilstrekkelig for lokal testing);xpack.security.enabled=false
deaktiverer sikkerhet slik at du slipper å håndtere brukernavn og passord;ES_JAVA_OPTS
begrenser Java-prosessens minnebruk.
Tjenesten er tilgjengelig på port 9200 via http://localhost:9200
.
Kibana
Kibana er et nettgrensesnitt for Elasticsearch. Det hjelper med å visualisere logger og lage dashbord.
docker-compose.yml
Vi bruker det offisielle Kibana-bildet.
Port 5601 eksponeres slik at du kan få tilgang til Kibana i nettleseren din på http://localhost:5601
.
ELASTICSEARCH_HOSTS
peker Kibana til vår Elasticsearch-container slik at den kan hente og vise data.
Endelig docker-compose.yml
Her er den komplette Docker Compose-filen med alle tjenester koblet sammen i riktig rekkefølge:
docker-compose.yml
Denne docker-compose.yml
starter alle tjenestene i riktig rekkefølge. Flask-applikasjonen genererer logger, Filebeat samler dem inn og sender dem til Logstash, Logstash behandler loggene og videresender dem til Elasticsearch, og Kibana gir et nettgrensesnitt for visning og analyse av dataene.
Det eneste som gjenstår er å kjøre systemet og teste det, noe som vil bli gjennomgått i neste kapittel.
1. Hva er hovedformålet med Docker Compose i denne oppsettet?
2. Hvilken tjeneste er ansvarlig for å samle inn loggfiler fra Flask-applikasjonen og sende dem til Logstash?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 3.7
Konfigurering av Docker Compose-filen
Sveip for å vise menyen
Nå som alle nødvendige konfigurasjoner er på plass — for Filebeat, Logstash og Flask-applikasjonen — er det på tide å samle dem og kjøre dem som ett system. For å gjøre dette, bruker vi Docker Compose.
Docker Compose er et verktøy som lar deg definere alle nødvendige containere i én YAML-fil og kjøre dem med én kommando.
I stedet for å skrive en egen docker run
-kommando for hver tjeneste, skriver du bare konfigurasjonene deres i docker-compose.yml
og kjører alt sammen.
En enkel docker-compose.yml
-fil ser slik ut:
docker-compose.yml
La oss nå lage en komplett fil steg for steg, med forklaring av hver container underveis.
Flask-applikasjon
Dette er hovedapplikasjonen din som genererer logger.
docker-compose.yml
Denne blokken instruerer Docker til å bygge containeren fra den nåværende mappen (der din Dockerfile er plassert).
Containeren vil få navnet flask-app
.
Linjen volumes
kobler den lokale mappen ./logs
til /logs
inne i containeren. På denne måten lagres alle logger som opprettes av applikasjonen både inne i containeren og på din datamaskin.
Applikasjonen kjører inne i containeren på port 5000, men vi mapper den til port 5050 på din maskin slik at du kan få tilgang til den i nettleseren på http://localhost:5050
.
Filebeat
Filebeat fungerer som en agent som overvåker loggfiler og sender nye oppføringer til Logstash.
docker-compose.yml
Filebeat kjøres fra det offisielle 8.15.0
-bildet.
Den kjøres som root
-bruker for å ha tillatelse til å lese loggfiler.
Vi monterer ./logs
-mappen i skrivebeskyttet modus og konfigurasjonsfilen filebeat.yml
. Dette forteller Filebeat hvilke logger som skal overvåkes og hvor de skal sendes.
depends_on
sikrer at Filebeat starter først etter at applikasjonen og Logstash kjører.
Logstash
Logstash mottar logger fra Filebeat, behandler dem (for eksempel parser JSON) og videresender dem til Elasticsearch.
docker-compose.yml
Denne containeren bruker det offisielle Logstash-bildet.
Vi monterer konfigurasjonsfilen logstash.conf
, som instruerer Logstash om hvordan innkommende logger skal behandles.
Containeren starter først etter at Elasticsearch kjører, siden den trenger et mål for de behandlede loggene.
Port 5044 eksponeres slik at Filebeat kan sende data til Logstash.
Elasticsearch
Elasticsearch lagrer logger som dokumenter og gir mulighet for raskt søk gjennom dem.
docker-compose.yml
Vi bruker det offisielle Elasticsearch-bildet versjon 8.15.0
.
discovery.type=single-node
angir at vi kjører en enkelt-node klynge (tilstrekkelig for lokal testing);xpack.security.enabled=false
deaktiverer sikkerhet slik at du slipper å håndtere brukernavn og passord;ES_JAVA_OPTS
begrenser Java-prosessens minnebruk.
Tjenesten er tilgjengelig på port 9200 via http://localhost:9200
.
Kibana
Kibana er et nettgrensesnitt for Elasticsearch. Det hjelper med å visualisere logger og lage dashbord.
docker-compose.yml
Vi bruker det offisielle Kibana-bildet.
Port 5601 eksponeres slik at du kan få tilgang til Kibana i nettleseren din på http://localhost:5601
.
ELASTICSEARCH_HOSTS
peker Kibana til vår Elasticsearch-container slik at den kan hente og vise data.
Endelig docker-compose.yml
Her er den komplette Docker Compose-filen med alle tjenester koblet sammen i riktig rekkefølge:
docker-compose.yml
Denne docker-compose.yml
starter alle tjenestene i riktig rekkefølge. Flask-applikasjonen genererer logger, Filebeat samler dem inn og sender dem til Logstash, Logstash behandler loggene og videresender dem til Elasticsearch, og Kibana gir et nettgrensesnitt for visning og analyse av dataene.
Det eneste som gjenstår er å kjøre systemet og teste det, noe som vil bli gjennomgått i neste kapittel.
1. Hva er hovedformålet med Docker Compose i denne oppsettet?
2. Hvilken tjeneste er ansvarlig for å samle inn loggfiler fra Flask-applikasjonen og sende dem til Logstash?
Takk for tilbakemeldingene dine!