Docker-containerlogboeken controleren

0
98

Docker verzamelt automatisch standaarduitvoer van containers en foutstromen (stdout/stderr) in logfeeds die worden bewaard door de Docker-daemon. U kunt logboeken gemakkelijk volgen om te begrijpen wat er in uw containers gebeurt.

De logboeken bevatten de uitvoer die u in uw terminal zou zien wanneer u deze in interactieve modus aan een container zou koppelen (-it ). Logboeken zijn alleen beschikbaar als het voorgrondproces in uw container daadwerkelijk wat output afgeeft. Je moet ervoor zorgen dat je containers fouten in stderr loggen, zodat Docker-commando's ze kunnen blootleggen.

U kunt containerlogboeken op elk moment tijdens de levenscyclus van een container bekijken. Als een container draait, kun je logs in realtime streamen. Voor gestopte containers heeft u toegang tot alle logboeken die zijn vastgelegd vóór de beëindiging.

Containerlogboeken bekijken

Gebruik de docker om containerlogboeken te bekijken. logs commando:

docker logs my-container

Vervang my-container door de naam of ID van de container die je wilt inspecteren. U kunt docker ps -a gebruiken om de ID's en namen van uw containers op te halen.

De logs-opdracht drukt de volledige logboekuitvoer van de container af naar je terminal. De uitvoer is niet continu. Als je nieuwe logboeken wilt blijven streamen, voeg dan de vlag –follow toe aan het commando. Dit komt overeen met het gebruik van tail -f met normale logbestanden op uw computer.

Aanpassen wat er wordt weergegeven

De docker logs-opdracht ondersteunt verschillende vlaggen waarmee u de uitvoer ervan kunt aanpassen:

  • & # 8211; tijdstempels & # 8211; Toon volledige tijdstempels aan het begin van elke logregel.
  • & # 8211; tot en – sinds & # 8211; Met deze vlaggen kunt u regels ophalen die gedurende een bepaalde periode zijn geregistreerd. Geef een volledig tijdstempel door (2021-04-30T20: 00: 00Z) of een vriendelijke relatieve tijd (bijv. 1 uur = 1 uur geleden).
  • & # 8211; tail & # 8211; Haal een bepaald aantal regels uit het logboek. –tail 10 toont de laatste tien regels die door de container zijn gelogd.
  • & # 8211; details & # 8211; Dit is een speciale vlag die extra informatie toevoegt aan de loguitvoer, op basis van de opties die zijn doorgegeven aan het logboekstuurprogramma. We zullen in de volgende sectie naar stuurprogramma's voor logboekregistratie kijken. Typische waarden die worden weergegeven met –details zijn onder meer containerlabels en omgevingsvariabelen.

U kunt deze vlaggen combineren om logboeken te krijgen in het formaat dat u nodig heeft. De tot, sinds en staartvlaggen worden niet van kracht als u follow gebruikt om continu loggegevens te streamen.

Docker-stuurprogramma's voor logboekregistratie

Docker verzamelt en bewaart containerlogboeken met behulp van een van de verschillende stuurprogramma's voor logboekregistratie. U kunt het actieve stuurprogramma voor logboekregistratie per container instellen. Als er geen stuurprogramma voor logboekregistratie is opgegeven, gebruikt Docker het json-bestandstuurprogramma.

Dit stuurprogramma slaat containerlogboeken op in een JSON-bestand. Dit formaat is redelijk leesbaar voor mensen en kan gemakkelijk worden gebruikt door tools van derden. Als u de logboekbestanden niet rechtstreeks wilt openen, bespaart het overschakelen naar het lokale stuurprogramma u wat opslagruimte. Het gebruikt een aangepast logboekopslagformaat.

Andere ingebouwde logboekstuurprogramma's zijn onder meer syslog (schrijf naar de syslog-daemon die op uw computer draait), journald (gebruik een actieve journald-instantie) en fluentd (om een ​​vloeiende demon). Er zijn ook stuurprogramma's beschikbaar voor Amazon CloudWatch, Google Cloud Platform, Event Tracing voor Windows en andere logboekbewakingsoplossingen.

Docker ondersteunt logboekregistratie-stuurprogramma's van derden via plug-ins. U kunt stuurprogramma's vinden op Docker Hub. Om een ​​plugin-stuurprogramma te installeren, voert u docker plugin install plugin-name uit. U kunt er dan naar verwijzen als een stuurprogramma voor logboekregistratie als plugin-naam.

Een stuurprogramma voor logboekregistratie specificeren

U kan de logging driver voor een container specificeren door de –log-driver vlag door te geven aan docker run:

docker run –log-driver systemd my-image: latest

U kunt het standaard stuurprogramma voor logboekregistratie globaal wijzigen door uw Docker-daemonconfiguratie bij te werken. Bewerk (of maak) /etc/docker/daemon.json. Stel de log-driver key in op de naam van een log-driver. Docker zal deze driver gebruiken voor alle containers die zijn aangemaakt zonder een –log-driver-vlag.

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

Veel stuurprogramma's voor logboekregistratie hebben hun eigen configuratie-opties. Deze worden ingesteld met behulp van de –log-opts containervlag, of log-opts in daemon.json. Hier is een voorbeeld dat relevant is voor de standaard json-file driver. Het geeft Docker de opdracht om logbestanden te roteren zodra ze groter zijn dan 8 MB. Er worden slechts vijf bestanden tegelijk bewaard.

docker run

docker run –log-driver json-file –log-opts max-size = 8M –log-opts max-file = 5

/etc/docker/daemon.json

{& quot; log-driver & quot ;: & quot; json-file & quot ;, & quot; log -opteert & quot ;: {& quot; max-size & quot ;: & quot; 8M & quot ;, & quot; max-file & quot ;: 5}}

Driver Delivery Modes

Logboeken kunnen worden afgeleverd in blokkerende of niet-blokkerende modi. Docker blokkeert standaard de bezorging. Logboeken uit de container worden onmiddellijk naar de chauffeur gestuurd. Dit garandeert de levering van logboeken, maar kan de prestaties beïnvloeden. De toepassing wacht totdat het schrijven van het logboek is voltooid. Dit kan een waarneembare vertraging veroorzaken als het stuurprogramma voor logboekregistratie bezet is.

In de niet-blokkerende modus schrijft Docker logboeken naar een buffer in het geheugen. De container hoeft niet te wachten totdat het stuurprogramma voor logboekregistratie het schrijven heeft voltooid. Dit kan de prestaties op actieve machines met trage opslag aanzienlijk verbeteren.

De afweging met de niet-blokkerende modus is de mogelijkheid van verloren logboeken. Dit kan gebeuren wanneer logboeken sneller worden verzonden dan de bestuurder ze kan verwerken. De buffer in het geheugen kan worden gevuld, waardoor logboeken in de cache worden gewist voordat ze aan de bestuurder zijn overhandigd.

U kunt niet-blokkerende bezorging inschakelen door de optie voor moduslogboekregistratie in te stellen, hetzij met –log-opts of daemon.json. U kunt de grootte van de in-memory logbuffer instellen met de optie max-buffer-size. Als u dit hoog instelt, wordt het risico van verloren logboeken verkleind, op voorwaarde dat u voldoende RAM beschikbaar heeft.

docker run –log-opt mode = non-blocking –log-opt max-buffer-size = 8M my -image: latest

Best practices voor loggen

Uw containers zouden waar mogelijk moeten werken met het logsysteem van Docker. Door logboeken naar stdout en stderr te sturen, kunnen Docker en andere tools ze op een gestandaardiseerde manier samenvoegen.

Logboekuitvoer hoeft geen tijdstempels te bevatten. De stuurprogramma's voor logboekregistratie van Docker registreren automatisch het tijdstip waarop een gebeurtenis plaatsvond.

Soms hebt u mogelijk complexe logboekvereisten waaraan alleen docker-logboeken niet kunnen voldoen. Als dat het geval is, moet u mogelijk uw eigen logboekoplossing in uw container implementeren. U kunt logboeken rechtstreeks op het bestandssysteem opslaan, met behulp van een Docker-volume, of een externe API-service aanroepen.

Sommige stapels vragen om een ​​speciale container voor logboekregistratie die naast uw applicatiecontainers staat. De logboekcontainer, vaak een & # 8220; sidecar & # 8221; genoemd, leest tijdelijke logbestanden die uw applicatiecontainers maken in een gedeeld Docker-volume. De zijspan zorgt voor de aggregatie van deze logboeken in een indeling die kan worden geüpload naar een logboekbewakingsservice.

Deze benadering kan nuttig zijn voor complexere implementaties, hoewel het lastiger is om in te stellen en te schalen. Het laat u doorgaans zonder het onmiddellijke gemak van de ingebouwde log-opdrachten van Docker.

Samenvatting

Docker heeft veelzijdige logboekbewakingsmogelijkheden die door een suite worden geleverd. van logboekregistratie stuurprogramma's. Elke container kan een uniek stuurprogramma voor logboekregistratie gebruiken, zodat u logboeken kunt opslaan in een indeling die geschikt is voor de vereisten van elke app.

Logboeken bevatten alles wat wordt uitgezonden door de standaarduitvoerstromen van een container. U kunt echo, print, console.log () of het equivalent van uw programmeertaal gebruiken om regels toe te voegen aan de uitvoer van de docker-logboeken. Logboeken worden bewaard totdat uw container wordt verwijderd met docker rm.