Hur man övervakar Docker Container Logs

0
135

Docker aggregerar automatiskt containerns standardutdata och felströmmar (stdout/stderr) till logga feeds som behålls av Docker-demonen. Du kan enkelt övervaka loggar för att förstå vad som händer i dina behållare.

Loggarna innehåller den utdata du ser i din terminal när den är ansluten till en container i interaktivt läge (-det ). Loggar är bara tillgängliga om förgrundsprocessen i din container faktiskt avger viss utdata. Du bör se till att dina containrar loggar fel till stderr så att Docker-kommandon kan avslöja dem.

Du kan se containerloggar när som helst under en containerns livscykel. När en container körs kan du strömma loggar i realtid. För stoppade behållare kan du komma åt alla loggar som fångats före avslutningen.

Visa containerloggar

Om du vill visa containerloggar använder du dockaren logs-kommando:

docker loggar min behållare

Byt ut min behållare med namnet eller ID på behållaren du vill inspektera. Du kan använda docker ps -a för att få ID och namn på dina containrar.

Loggkommandot skriver ut behållarens hela loggutgång till din terminal. Utgången kommer inte att vara kontinuerlig. Om du vill fortsätta streama nya loggar lägger du till –följ-flaggan i kommandot. Detta motsvarar att använda tail -f med vanliga loggfiler på din dator.

Anpassa vad som visas

Docker-loggkommandot stöder flera flaggor som låter dig justera utdata:

  • & # 8211; tidsstämplar & # 8211; Visa fullständiga tidsstämplar i början av varje loggrad.
  • & # 8211; tills och – sedan & # 8211; Med dessa flaggor kan du hämta loggade linjer under en viss tidsperiod. Antingen passera en fullständig tidsstämpel (2021-04-30T20: 00: 00Z) eller en vänlig relativ tid (t.ex. 1t = 1 timme sedan).
  • & # 8211; svans & # 8211; Hämta ett visst antal rader från loggen. –tail 10 visar de tio sista raderna som loggas av behållaren.
  • & # 8211; detaljer & # 8211; Detta är en speciell flagga som lägger till extra information till loggutgången, baserat på alternativen som skickas till loggningsdrivrutinen. Vi kommer att titta på loggdrivrutiner i nästa avsnitt. Typiska värden som visas med –detaljer inkluderar containeretiketter och miljövariabler.

Du kan kombinera dessa flaggor för att få loggar i det format du behöver. Tills, sedan och svansflaggor träder inte i kraft om du använder följer för att kontinuerligt strömma loggdata.

Docker-loggningsdrivrutiner

Docker samlar in och lagrar containerloggar med hjälp av en av flera loggningsdrivrutiner. Du kan ställa in den aktiva loggningsdrivrutinen per container. När ingen loggningsdrivrutin har angetts använder Docker json-fildrivrutinen.

Den här drivrutinen lagrar containerloggar i en JSON-fil. Detta format är ganska läsbart för människor och kan lätt konsumeras av verktyg från tredje part. Om du inte kommer åt loggfiler direkt sparar du lite lagringsutrymme genom att byta till den lokala drivrutinen. Den använder ett anpassat logglagringsformat.

Andra inbyggda loggdrivrutiner inkluderar syslog (skriv till syslog-demonen som körs på din maskin), journald (använd en löpande journald-instans) och fluentd (för att använda en fluent demon). Drivrutiner finns också för Amazon CloudWatch, Google Cloud Platform, Event Tracing för Windows och andra loggövervakningslösningar.

Docker stöder tredjepartsloggningsdrivrutiner via plugins. Du hittar drivrutiner på Docker Hub. För att installera en plugin-drivrutin, kör docker-plugin installera plugin-namn. Du kommer då att kunna referera till det som en loggningsdrivrutin som plugin-namn.

Ange en loggdrivrutin

Du kan ange loggningsdrivrutinen för en container genom att skicka flaggan –log-driver till docker-körning:

docker-körning –log-driver systemd min-bild: senaste

Du kan ändra standardloggningsdrivrutinen globalt genom att uppdatera din Docker-daemon-konfiguration. Redigera (eller skapa) /etc/docker/daemon.json. Ställ in loggdrivrutinsnyckeln till namnet på en loggdrivrutin. Docker kommer att använda den här drivrutinen för alla behållare som skapas utan –log-drivrutinsflagga.

{& quot; log-driver & quot ;: & quot; systemd & quot; }

Många loggningsdrivrutiner har sina egna konfigurationsalternativ. Dessa ställs in med –log-opts containerflaggan eller log-opts i daemon.json. Här är ett exempel som är relevant för standarddrivrutinen för json-filer. Det instruerar Docker att rotera loggfiler när de är större än 8 MB. Endast fem filer kommer att behållas när som helst.

docker-körning

docker-körning –log-driver json-file –log-opts max-size = 8M –log-opts max-file = 5

< -val & quot ;: {& quot; max-storlek & quot ;: & quot; 8M & quot ;, & quot; max-fil & quot ;: 5}}

Driver Delivery Modes

Loggar kan levereras i antingen blockerande eller icke-blockerande läge. Docker är som standard att blockera leverans. Loggar från containern skickas omedelbart till föraren. Detta garanterar leverans av stockar men kan påverka prestandan. Applikationen väntar tills loggskrivningen är klar. Detta kan orsaka en märkbar fördröjning om loggningsdrivrutinen är upptagen.

I icke-blockeringsläge skriver Docker loggar till en buffert i minnet. Containern behöver inte vänta på att loggningsdrivrutinen ska slutföra sin skrivning. Detta kan förbättra prestandan på aktiva maskiner med långsam lagring avsevärt.

Avvägningen med icke-blockerande läge är möjligheten till förlorade loggar. Detta kan inträffa när loggar släpps snabbare än föraren kan bearbeta dem. Bufferten i minnet kan fyllas, vilket gör att cachade loggar rensas innan de har överlämnats till föraren.

Du kan aktivera icke-blockerande leverans genom att ställa in alternativet för loggning av lägen, antingen med –log-opts eller daemon.json. Du kan ställa in storleken på loggbufferten i minnet med alternativet max-buffertstorlek. Om du ställer in detta högt minskar du risken för förlorade loggar, förutsatt att du har tillräckligt med RAM-minne tillgängligt.

docker-körning –log-opt-läge = icke-blockerande -log-opt max-buffert-storlek = 8M min -image: latest

Bästa metoder för loggning

Dina containrar ska fungera med Docker: s loggningssystem när det är möjligt. Genom att skicka loggar till stdout och stderr kan Docker och andra verktyg samla dem på ett standardiserat sätt.

Loggutdata behöver inte inkludera tidsstämplar. Dockers loggningsdrivrutiner registrerar automatiskt den tid då en händelse inträffade.

Ibland kan det hända att du har komplexa loggningskrav som dockarloggarna inte ensam kan uppfylla. Om så är fallet kan du behöva implementera din egen loggningslösning i din container. Du kan lagra loggar direkt i filsystemet med en Docker-volym eller ringa en extern API-tjänst.

Vissa stackar kräver en dedikerad loggningsbehållare som sitter bredvid dina applikationsbehållare. Loggningsbehållaren, ofta kallad en & # 8220; sidvagn & # 8221 ;, läser tillfälliga loggfiler som dina applikationsbehållare skapar i en delad Docker-volym. Sidovagnen hanterar aggregeringen av dessa loggar till ett format som kan laddas upp till en loggövervakningstjänst.

Detta tillvägagångssätt kan vara användbart för mer komplexa distributioner, även om det är svårare att ställa in och skala. Det lämnar dig vanligtvis utan omedelbar bekvämlighet med Docker: s inbyggda loggkommandon.

Sammanfattning

Docker har mångsidiga loggövervakningsfunktioner som tillhandahålls av en svit av loggdrivrutiner. Varje behållare kan använda en unik loggningsdrivrutin, så att du kan lagra loggar i ett format som passar varje apps krav.

Loggarna innehåller allt som släpps ut av en behållares standardutmatningsströmmar. Du kan använda echo, print, console.log () eller motsvarande ditt programmeringsspråk för att lägga till rader i dockerloggutgången. Loggar sparas tills din container raderas med docker rm.