Docker Log Rotasyonu Nasıl Yapılandırılır: local ve journald | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

Docker log rotasyonunu bir Docker log sürücüsüyle yapılandırma: Docker journald loglama ve Docker local dosya sürücüsü

Seviye: Uzman
Tahmini süre: ~20 dakika
Amaç: Kesintisiz günlük yönetimi sağlamak ve disk alanının tükenmesini önlemek için Docker günlük rotasyonunu yapılandırmak.

Giriş

Yönetilmeyen Docker günlükleri sunucu depolama alanını hızla tüketebilir. Varsayılan olarak Docker arka plan programı (daemon), günlükleri boyut sınırı olmadan json-file biçiminde yazar. Güvenilir bir altyapıyı sürdürmek için ölçeklenebilir bir Docker günlük sürücüsü (logging driver) kullanarak Docker günlük rotasyonunu yapılandırmanız gerekir. Bu kılavuz, Docker günlük rotasyonunu Docker journald günlük kaydı veya Docker yerel dosya sürücüsü (local) ile genel (global) olarak nasıl uygulayacağınızı anlatır. Doğru yapılandırmayı seçmek, verimli günlük yönetimi ve sistem kararlılığı sağlar.

Terminoloji

Devam etmeden önce aşağıdaki temel kavramlara aşina olun:

  • Docker: Uygulamaları konteyner adı verilen yalıtılmış ortamlarda çalıştırmaya yarayan platform.
  • Docker günlükleri: Bir konteynerin Stdout (standart çıktı) ve Stderr (standart hata) akışlarından yakalanan çıktı akışları.
  • Günlük rotasyonu: Yer açmak için eski günlüklerin arşivlenmesi ve silinmesi uygulaması.
  • Günlük sürücüsü (logging driver): Docker'ın günlükleri yakalamak, biçimlendirmek ve yönlendirmek için kullandığı mekanizma.
  • Journald: systemd'nin günlük kaydı hizmeti; merkezi ana bilgisayar günlüğü için idealdir.
  • Yerel dosya sürücüsü (local): Yerel depolama için optimize edilmiş, yüksek performanslı, yerleşik sürücü.
  • Json-file: Günlükleri JSON biçiminde yazan varsayılan sürücü.
  • Docker arka plan programı (daemon): Docker işlemlerini yöneten arka plan hizmeti.
  • Daemon.json: Arka plan programının yapılandırma dosyası.
  • Günlük sürücüsü yapılandırması: Genel veya konteyner bazlı günlük kaydı ayarı.
  • Günlük seçenekleri: Sürücüye aktarılan belirli parametreler.
  • Max-size: Bir günlük dosyasının döndürüleceği eşik boyutu.
  • Max-file: Saklanan döndürülmüş dosyaların azami sayısı.

Ön koşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

  • İşletim sistemi: Ubuntu 22.04 / 24.04 LTS, Debian 12 / 13, RHEL 9 / 10, AlmaLinux 9 / 10, Rocky Linux 9 / 10
  • Docker: 24.x veya üzeri sürüm yüklü
  • Erişim: sudo yetkileri
  • Gerekli bilgi: Linux yönetimi ve Infrastructure as Code kavramları

Adım 1: Docker json-file ve local sürücü farklarını anlamak

Docker json-file ve local sürücülerini değerlendirirken seçimi performans ve ek yük belirler. Varsayılan json-file sürücüsü basittir, ancak JSON biçimlendirmesi nedeniyle daha fazla CPU ve disk alanı tüketir. Buna karşılık local dosya sürücüsü, özellikle rotasyon verimliliği için optimize edilmiş, yalnızca ekleme yapan (append-only) ikili bir biçim kullanır. Normal üretim iş yüklerinde Docker yerel dosya sürücüsü (local), disk ek yükünü azaltır ve rotasyonu yerel olarak güvenilir biçimde uygular.

Mevcut sürücünüzü kontrol etmek için şunu çalıştırın:

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

Beklenen çıktı:

json-file

json-file görüyorsanız daemon.json içindeki Docker günlük yapılandırmasını değiştirmeye geçin.

Adım 2: Docker yerel dosya sürücüsü (local) ile Docker günlük rotasyonunu yapılandırın

Tüm konteynerlere genel sınırlar uygulamak için /etc/docker/daemon.json dosyasını düzenleyeceksiniz. daemon.json içinde Docker günlük yapılandırması için önerilen yaklaşım budur.

Yapılandırma dosyasını açın:

Sisteminizde /etc/docker/daemon.json yoksa, nano kaydederken dosyayı oluşturur. Bu normaldir - dosya bulunmadığında Docker yerleşik varsayılanları kullanır.

sudo nano /etc/docker/daemon.json

Aşağıdaki günlük sürücüsü yapılandırmasını ekleyin:

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

Dosyayı kaydedip kapatın. Yeni ayarlar diske yazılır. Bu yapılandırma sürücüyü genel olarak uygular. Günlük seçenekleri, Docker'a günlükler 50 megabayta ulaştığında döndürmesini (Docker günlükleri için max-size) ve en fazla 3 dosya saklamasını (Docker günlükleri için max-file) söyler. local sürücüsünün, journald'ın aksine, bu açık boyut ve dosya sınırlarını hâlâ yerel olarak desteklediğini unutmayın.

Değişiklikleri uygulamak için Docker arka plan programını yeniden başlatın. docker.service konteynerleri yönetir, bu nedenle yeniden başlatılması sınırları devreye alır:

sudo systemctl restart docker

Arka plan programıyla bağlantınız birkaç saniye kesilecektir. Yeniden başlatıldıktan sonra yeni oluşturulan tüm konteynerler Docker yerel dosya sürücüsünü (local) kullanacak ve Docker günlükleri için bu max-size ve max-file sınırlarını devralacaktır.

Warning

Günlük sürücüsü konteyner bazında değiştirilemezdir. Mevcut konteynerler eski günlük sürücülerini korur; docker update bunu değiştiremez. Yeni Docker günlük sürücüsünü uygulamak için konteynerin yeniden oluşturulması gerekir (örn. docker compose up -d veya orkestrasyon üzerinden yeniden dağıtım), çünkü canlı geçiş (live migration) yoktur. Aksi takdirde ana bilgisayarınızda karışık günlük durumları oluşur.

Ayrıca günlük yapılandırmalarının öncelik sırasını bilin:

  1. CLI bayrakları (docker run --log-driver) her şeyin önüne geçer.
  2. docker-compose.yml içindeki günlük geçersiz kılmaları, konteyner oluşturulurken servis bazında çalışır.
  3. daemon.json, açıkça belirtilmemiş tüm konteynerler için varsayılan genel yedek değer olarak işlev görür.

Adım 3: Docker günlük sürücünüz olarak Docker journald günlük kaydını etkinleştirin

Alternatif olarak günlükleri doğrudan sistemin journald arka plan programına yönlendirebilirsiniz. Docker journald günlük kaydı, systemctl ve harici günlük iletici araçlarla sorunsuz bütünleşir.

Yapılandırma dosyasını açın:

sudo nano /etc/docker/daemon.json

İçeriği journald yapılandırmasıyla değiştirin. Dosya içeriğini tamamen değiştirin - önceki tüm log-opts girdilerini kaldırın, çünkü journald, max-size veya max-file seçeneklerini desteklemez:

{ "log-driver": "journald" }

Dosyayı kaydedip kapatın. Yapılandırma güncellendi.

Hizmeti yeniden başlatın. Günlük yönetimini journald'a kaydırmak için docker.service yeniden yüklenmelidir:

sudo systemctl restart docker

Docker günlüklerini journald ile kullandığınızda, journald sürücüsü Docker tarafındaki rotasyon denetimini ortadan kaldırır. Günlük rotasyonu hâlâ vardır, ancak tamamen Docker dışında, systemd günlüğü (journal) tarafından yürütülür. Günlüklerin doğrudan systemd günlüğüne yönlendirildiğini görürsünüz. Bu günlükler docker.service birimine bağlı olmak yerine konteyner meta veri alanlarıyla dizinlenir.

Operasyonel olarak journald bu günlükleri /etc/systemd/journald.conf dosyasında yapılandırılan somut sınırlarla yönetir; özellikle SystemMaxUse, RuntimeMaxUse ve MaxRetentionSec. Bu, önemli bir etki alanı (blast radius) riski taşır: journald'ın tükenmesi, üretimde ssh günlüklerini, çekirdek günlüklerini, denetim günlüklerini ve günlüğü paylaşan diğer tüm hizmetleri etkileyebilir. max-size ve max-file seçeneklerinin yalnızca json-file ve local sürücüleri için geçerli olduğunu, journald için geçerli olmadığını unutmayın.

journald yapılandırmasındaki değişiklikleri uygulamak için:

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

Tip

Günlüklerin doğrudan sistem günlüğünden (journal) toplandığı ortamlara dağıtım yaparken Docker günlüklerini journald ile kullanın.

Adım 4: journalctl çıktısını yönetme

journald üzerinden Docker günlük rotasyonunu yapılandırdığınızda, günlüklerle docker logs yerine journalctl kullanarak çalışırsınız. journald hizmeti bu günlükleri merkezi olarak işler.

Belirli bir konteynerin günlüklerini Docker journald günlükleri ile görüntülemek için şunu çalıştırın:

journalctl CONTAINER_NAME=<YOUR_CONTAINER_NAME> -o cat

Tip

Ad yerine kimliğe (ID) göre filtrelemeyi tercih ediyorsanız, tam kimlik için CONTAINER_ID_FULL=$(docker inspect -f '{{.Id}}' <YOUR_CONTAINER_NAME>) kullanın veya CONTAINER_ID içinde saklanan kısa biçimle eşleşmesi için kimliği cut -c1-12 üzerinden geçirin. _CONTAINER_ID alanı systemd-cgroup'a aittir ve Docker konteyner kimliğine karşılık gelmez.

Beklenen çıktı:

Application started successfully

Adım 5: Doğrulama

Çalışan bir konteynerde Docker günlük sürücüsü yapılandırmasını doğrulamak için bir test konteyneri başlatın:

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

Konteynerin günlük seçeneklerini inceleyin:

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

local sürücüsü için beklenen çıktı:

local

journald yapılandırdıysanız çıktı bunun yerine journald olacaktır.

local sürücüsü için uygulanan parametreleri kontrol edin:

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

Beklenen çıktı:

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

Bu, daemon.json içindeki Docker günlük yapılandırmanızın Docker günlükleri için max-size ve max-file parametrelerini başarıyla uyguladığını doğrular. journald'ın burada max-size veya max-file seçeneklerini göstermediğini unutmayın, çünkü rotasyon işletim sistemine bırakılmıştır.

Hâlâ önceki sürücüyü kullanan mevcut konteynerleri belirlemek için bu komutu kullanın. Günlük sürücüsü konteyner oluşturulurken sabitlenir - bu konteynerlerin yeni yapılandırmayı devralması için yeniden oluşturulması gerekir (örn. docker compose up -d --force-recreate):

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

Değişiklikleri geri alma

Genel günlük sürücüsü yapılandırmasını varsayılan biçime döndürmek için yapılandırmayı daemon.json dosyasından kaldırın.

Dosyayı kaldırın (değiştirmeden önce yapılandırma dosyalarını her zaman yedekleyin) ve Docker hizmetini yeniden başlatın:

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

Warning

Bu değişiklikleri geri almak, yeni oluşturulan tüm konteynerler için sınırları hemen kaldırır; bunlar yüksek hacimde günlük üretirse disk alanının tükenmesi riski doğar.

Warning

/etc/docker/daemon.json ilgisiz arka plan programı ayarları içeriyorsa (kayıt defteri yansıtmaları, depolama sürücüsü, DNS, MTU, insecure-registries vb.), dosyayı kaldırmak bunları da siler. Ya önce dosyayı yedekleyin (yukarıda gösterildiği gibi) ya da yalnızca log-driver ve log-opts bölümlerini kaldırmak için dosyayı elle düzenleyin.

Sorun giderme

  • journalctl, CONTAINER_ID için çıktı döndürmüyor: Docker journald sürücüsü CONTAINER_ID alanına 12 karakterlik kısa kimliği yazarken docker inspect 64 karakterlik tam kimliği döndürür. Bunun yerine CONTAINER_NAME veya CONTAINER_ID_FULL kullanın.
  • Mevcut konteynerler yeniden başlatmadan sonra hâlâ json-file kullanıyor: docker update komutu günlük sürücüsünü değiştirmez. Yeni günlük sürücüsünü uygulamak için konteyneri yeniden oluşturmanız gerekir (örn. docker compose down ve ardından up ile).
  • max-size ve max-file, journald ile etkisiz: journald için günlük rotasyonu Docker'ın log-opts ayarlarıyla değil, /etc/systemd/journald.conf (örn. SystemMaxUse) üzerinden genel olarak yönetilir.

Sonuç

Konteyner çıktısını doğru yönetmek, güvenilir bir altyapının temel parçasıdır. Docker json-file ve local sürücüleri arasında doğru seçim yaparak depolama sorunlarını önlersiniz. Docker günlük rotasyonunu hafif Docker yerel dosya sürücüsü (local) ile yapılandırın ya da Docker journald günlük kaydı ile yerel olarak bütünleştirin, ortamınız artık büyük günlük akışlarını güvenle işlemeye hazırdır. Bu Docker günlük rotasyonu uygulamaları, Docker günlük sürücüsü yapılandırmanızın kararlı, ana bilgisayar kaynaklarınızın ise öngörülebilir kalmasını sağlar.

Doküman Sürümü: 1.0
Son Güncelleme: Mayıs 2026
Sorumlu: Teknik Dokümantasyon Ekibi

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