Kako konfigurirati rotaciju logova Dockera: local i journald | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

Konfiguracija rotacije logova Dockera s upravljačkim programom za zapisivanje: Docker journald zapisivanje i Docker local datotečni driver

Razina: Stručnjak
Procijenjeno vrijeme: ~20 minuta
Cilj: Konfigurirati rotaciju Docker zapisnika kako bi se osiguralo upravljanje zapisnicima bez zastoja i spriječilo iscrpljivanje prostora na disku.

Uvod

Neupravljani Docker zapisnici mogu brzo iscrpiti pohranu poslužitelja. Prema zadanim postavkama Docker daemon zapisuje zapisnike u formatu json-file bez ograničenja veličine. Za pouzdanu infrastrukturu morate konfigurirati rotaciju Docker zapisnika pomoću skalabilnog Docker upravljačkog programa za zapisivanje (logging driver). Ovaj vodič opisuje kako globalno implementirati rotaciju Docker zapisnika, bilo uz Docker zapisivanje putem journald-a, bilo uz Docker lokalni datotečni upravljački program (local). Odabir ispravne konfiguracije osigurava učinkovito upravljanje zapisnicima i stabilnost sustava.

Terminologija

Prije nastavka upoznajte se sa sljedećim osnovnim pojmovima:

  • Docker: platforma za pokretanje aplikacija u izoliranim okruženjima koja se nazivaju kontejneri.
  • Docker zapisnici: izlazni tokovi zabilježeni sa standardnog izlaza (Stdout) i standardnog izlaza za greške (Stderr) kontejnera.
  • Rotacija zapisnika: praksa arhiviranja i brisanja starih zapisnika radi vraćanja prostora.
  • Upravljački program za zapisivanje (logging driver): mehanizam kojim Docker bilježi, formatira i usmjerava zapisnike.
  • Journald: systemd usluga zapisivanja, idealna za centralizirano zapisivanje na hostu.
  • Lokalni datotečni upravljački program (local): ugrađeni visokoučinkoviti upravljački program optimiziran za lokalnu pohranu.
  • Json-file: zadani upravljački program koji zapisuje zapisnike u JSON formatu.
  • Docker daemon: pozadinska usluga koja upravlja Docker operacijama.
  • Daemon.json: konfiguracijska datoteka daemona.
  • Konfiguracija upravljačkog programa zapisnika: globalne postavke zapisivanja ili postavke po kontejneru.
  • Opcije zapisnika: posebni parametri koji se prosljeđuju upravljačkom programu.
  • Max-size: granična veličina nakon koje se datoteka zapisnika rotira.
  • Max-file: najveći broj zadržanih rotiranih datoteka.

Preduvjeti

Prije početka provjerite imate li:

  • Operacijski sustav: Ubuntu 22.04 / 24.04 LTS, Debian 12 / 13, RHEL 9 / 10, AlmaLinux 9 / 10, Rocky Linux 9 / 10
  • Docker: instalirana verzija 24.x ili novija
  • Pristup: sudo ovlasti
  • Potrebno znanje: administracija sustava Linux i koncepti Infrastructure as Code

Korak 1: Razumijevanje razlika između Docker upravljačkih programa json-file i local

Pri procjeni Docker upravljačkih programa json-file i local izbor ovisi o performansama i dodatnom opterećenju. Zadani upravljački program json-file jednostavan je, ali troši više CPU-a i prostora na disku zbog JSON formatiranja. Nasuprot tome, datotečni upravljački program local koristi binarni format samo za dodavanje (append-only) optimiziran posebno za učinkovitost rotacije. U uobičajenom produkcijskom opterećenju Docker lokalni datotečni upravljački program (local) smanjuje opterećenje diska i pouzdano nativno provodi rotaciju.

Za provjeru trenutnog upravljačkog programa pokrenite:

docker info --format '{{.LoggingDriver}}'

Očekivani ispis:

json-file

Ako vidite json-file, nastavite s izmjenom konfiguracije Docker zapisivanja u daemon.json.

Korak 2: Konfiguriranje rotacije Docker zapisnika s lokalnim datotečnim upravljačkim programom (local)

Za provedbu globalnih ograničenja na sve kontejnere uredit ćete datoteku /etc/docker/daemon.json. To je preporučeni pristup za konfiguraciju Docker zapisivanja u daemon.json.

Otvorite konfiguracijsku datoteku:

Ako /etc/docker/daemon.json ne postoji na vašem sustavu, nano će je izraditi pri spremanju. To je normalno - Docker koristi ugrađene zadane vrijednosti kada datoteke nema.

sudo nano /etc/docker/daemon.json

Dodajte sljedeću konfiguraciju upravljačkog programa zapisnika:

{ "log-driver": "local", "log-opts": { "max-size": "50m", "max-file": "3" } }

Spremite i zatvorite datoteku. Nove postavke zapisuju se na disk. Ova konfiguracija primjenjuje upravljački program globalno. Opcije zapisnika nalažu Dockeru da rotira zapisnike kada dosegnu 50 megabajta (max-size za Docker zapisnike) i zadrži najviše 3 datoteke (max-file za Docker zapisnike). Imajte na umu da upravljački program local, za razliku od journald, i dalje nativno podržava ta izričita ograničenja veličine i broja datoteka.

Ponovno pokrenite Docker daemon kako biste primijenili promjene. Usluga docker.service upravlja kontejnerima, pa se njezinim ponovnim pokretanjem ograničenja primjenjuju:

sudo systemctl restart docker

Na nekoliko sekundi izgubit ćete vezu s daemonom. Nakon ponovnog pokretanja svi novoizrađeni kontejneri koristit će Docker lokalni datotečni upravljački program (local) i naslijediti ova ograničenja max-size i max-file za Docker zapisnike.

Warning

Upravljački program za zapisivanje nepromjenjiv je po kontejneru. Postojeći kontejneri zadržat će stari upravljački program zapisnika; docker update ga ne može promijeniti. Za primjenu novog Docker upravljačkog programa za zapisivanje potrebno je ponovno izraditi kontejner (npr. pomoću docker compose up -d ili ponovne isporuke putem orkestracije), jer ne postoji migracija uživo. Inače ćete na hostu dobiti pomiješana stanja zapisivanja.

Dodatno, upoznajte se s redoslijedom prioriteta konfiguracija zapisivanja:

  1. CLI zastavice (docker run --log-driver) nadjačavaju sve ostalo.
  2. Nadjačavanja zapisivanja u docker-compose.yml djeluju po usluzi u trenutku izrade kontejnera.
  3. daemon.json djeluje kao zadana globalna vrijednost za sve kontejnere bez izričite konfiguracije.

Korak 3: Omogućavanje Docker zapisivanja putem journald-a kao Docker upravljačkog programa za zapisivanje

Alternativno, zapisnike možete usmjeriti izravno na journald daemon sustava. Docker zapisivanje putem journald-a besprijekorno se integrira sa systemctl i vanjskim prosljeditljima zapisnika.

Otvorite konfiguracijsku datoteku:

sudo nano /etc/docker/daemon.json

Zamijenite sadržaj konfiguracijom journald. Potpuno zamijenite sadržaj datoteke - uklonite sve prethodne unose log-opts, jer journald ne podržava opcije max-size i max-file:

{ "log-driver": "journald" }

Spremite i zatvorite datoteku. Konfiguracija je ažurirana.

Ponovno pokrenite uslugu. Uslugu docker.service potrebno je ponovno učitati kako bi se upravljanje zapisnicima prebacilo na journald:

sudo systemctl restart docker

Pri uporabi Docker zapisnika s journald-om upravljački program journald uklanja kontrolu rotacije na strani Dockera. Rotacija zapisnika i dalje postoji, ali njome u cijelosti, izvan Dockera, upravlja systemd dnevnik (journal). Zapisnici se usmjeravaju izravno u systemd dnevnik. Indeksirani su prema poljima metapodataka kontejnera, a ne vezani uz jedinicu docker.service.

Operativno, journald upravlja tim zapisnicima konkretnim ograničenjima konfiguriranima u /etc/systemd/journald.conf, osobito SystemMaxUse, RuntimeMaxUse i MaxRetentionSec. To nosi znatan rizik velikog dosega posljedica (blast radius): iscrpljivanje journald-a može u produkciji utjecati na ssh zapisivanje, zapisnike jezgre, revizijske zapisnike i sve druge usluge koje dijele dnevnik. Imajte na umu da se opcije max-size i max-file primjenjuju samo na upravljačke programe json-file i local, a ne na journald.

Za primjenu promjena u konfiguraciji journald-a:

sudo systemctl restart systemd-journald # Or to trigger immediate rotation without a full restart: sudo systemctl kill -s SIGUSR2 systemd-journald

Tip

Koristite Docker zapisnike s journald-om pri isporuci u okruženja u kojima se zapisnici prikupljaju izravno iz sustavnog dnevnika.

Korak 4: Upravljanje ispisom journalctl

Kada rotaciju Docker zapisnika konfigurirate putem journald-a, sa zapisnicima radite pomoću journalctl umjesto docker logs. Usluga journald centralizirano obrađuje te zapisnike.

Za pregled zapisnika određenog kontejnera uz Docker zapisnike u journald-u pokrenite:

journalctl CONTAINER_NAME=<YOUR_CONTAINER_NAME> -o cat

Tip

Ako radije filtrirate prema ID-u umjesto prema imenu, koristite CONTAINER_ID_FULL=$(docker inspect -f '{{.Id}}' <YOUR_CONTAINER_NAME>) za puni ID ili provedite ID kroz cut -c1-12 kako biste dobili kratki oblik pohranjen u CONTAINER_ID. Polje _CONTAINER_ID pripada systemd-cgroupu i ne odgovara ID-u Docker kontejnera.

Očekivani ispis:

Application started successfully

Korak 5: Provjera

Za provjeru konfiguracije Docker upravljačkog programa za zapisivanje na kontejneru koji radi, pokrenite testni kontejner:

docker run -d --name log-test nginx:latest

Pregledajte opcije zapisnika kontejnera:

docker inspect -f '{{.HostConfig.LogConfig.Type}}' log-test

Očekivani ispis za upravljački program local:

local

Ako ste konfigurirali journald, ispis će umjesto toga biti journald.

Provjerite primijenjene parametre za upravljački program local:

docker inspect -f '{{.HostConfig.LogConfig.Config}}' log-test

Očekivani ispis:

map[max-file:3 max-size:50m]

Ovo potvrđuje da je vaša konfiguracija Docker zapisivanja u daemon.json uspješno primijenila parametre max-size i max-file za Docker zapisnike. Imajte na umu da journald ovdje ne izlaže opcije max-size ili max-file, jer je rotacija prepuštena operacijskom sustavu.

Ovom naredbom pronađite postojeće kontejnere koji još koriste prethodni upravljački program. Upravljački program za zapisivanje određuje se pri izradi kontejnera - te je kontejnere potrebno ponovno izraditi (npr. pomoću docker compose up -d --force-recreate) kako bi naslijedili novu konfiguraciju:

docker ps -aq | xargs -r docker inspect -f '{{.Name}}: {{.HostConfig.LogConfig.Type}}'

Poništavanje promjena

Za vraćanje globalne konfiguracije upravljačkog programa zapisnika na zadani format uklonite konfiguraciju iz daemon.json.

Uklonite datoteku (prije izmjene uvijek napravite sigurnosnu kopiju konfiguracijskih datoteka) i ponovno pokrenite Docker uslugu:

sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak.$(date +%F) sudo rm /etc/docker/daemon.json sudo systemctl restart docker

Warning

Poništavanje ovih promjena odmah uklanja ograničenja za sve novoizrađene kontejnere, što riskira iscrpljivanje prostora na disku ako generiraju velike količine zapisnika.

Warning

Ako /etc/docker/daemon.json sadrži nepovezane postavke daemona (zrcala registra, upravljački program pohrane, DNS, MTU, insecure-registries itd.), uklanjanjem datoteke obrisat ćete i njih. Ili prvo napravite sigurnosnu kopiju datoteke (kako je prikazano gore) ili je ručno uredite i uklonite samo odjeljke log-driver i log-opts.

Rješavanje problema

  • journalctl ne vraća ispis za CONTAINER_ID: Docker upravljački program journald u CONTAINER_ID zapisuje kratki ID od 12 znakova, dok docker inspect vraća puni ID od 64 znaka. Umjesto toga koristite CONTAINER_NAME ili CONTAINER_ID_FULL.
  • Postojeći kontejneri i nakon ponovnog pokretanja još koriste json-file: naredba docker update ne mijenja upravljački program za zapisivanje. Za primjenu novog upravljačkog programa morate ponovno izraditi kontejner (npr. pomoću docker compose down, a zatim up).
  • max-size i max-file nemaju učinka uz journald: rotacijom zapisnika za journald upravlja se globalno putem /etc/systemd/journald.conf (npr. SystemMaxUse), a ne putem Dockerovih log-opts.

Zaključak

Ispravno upravljanje izlazom kontejnera temeljni je dio pouzdane infrastrukture. Ispravnim odabirom između Docker upravljačkih programa json-file i local sprječavate probleme s pohranom. Bez obzira na to konfigurirate li rotaciju Docker zapisnika laganim Docker lokalnim datotečnim upravljačkim programom (local) ili se nativno integrirate putem Docker zapisivanja s journald-om, vaše je okruženje sada spremno za sigurnu obradu golemih tokova zapisnika. Primjenom ovih praksi rotacije Docker zapisnika konfiguracija vašeg Docker upravljačkog programa za zapisivanje ostaje stabilna, a resursi hosta predvidljivi.

Verzija dokumenta: 1.0
Posljednje ažuriranje: svibanj 2026.
Vlasnik: Tim za tehničku dokumentaciju

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA