Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Docker'da Log Yönetimi: stdout/stderr ile Uygulama Loglarınızı Kontrol Edin 📝

pixero

Üye
Katılım
14 Mart 2026
Mesajlar
7
Docker'da Log Yönetimi: stdout/stderr ile Uygulama Loglarınızı Kontrol Edin 📝

Selam sistemciler! 🐧 Konteyner dünyasında yeni bir uygulama ayağa kaldırdık, her şey harika çalışıyor gibi görünüyor. Peki ya loglar? "Loglar nereye gitti?", "Hata aldım ama nereden bakacağımı bilmiyorum" diye terminalin başında dönüp durduğunuz oldu mu? Bugün, Docker'ın bize sunduğu en temel ve güçlü log yönetimi mekanizması olan stdout ve stderr'i konuşuyoruz. Korkmayın, karmaşık yapılandırmalara girmeyeceğiz, Docker'ın doğal akışını nasıl kullanacağımızı öğreneceğiz.

Neden stdout/stderr Bu Kadar Önemli? 🖥️

Docker'ın felsefesi "bir konteyner, bir işlem" şeklinde özetlenebilir. Bu işlemin (genellikle uygulamamızın) konsola yazdığı her şey - ister bilgi mesajı (stdout), ister hata mesajı (stderr) - Docker konteyner logu olarak kaydeder. Bunu yapmasının birkaç harika nedeni var:

  • Merkezileşme: Logları uygulamanın içinde bir dosyaya yazdırmak zorunda kalmazsınız. Docker sizin için toplar.
  • Standartlaşma: Farklı dillerde (Python, Node.js, Go) yazılmış tüm uygulamalarınızın loglarına aynı komutla (`docker logs`) erişirsiniz.
  • Rotasyon ve Boyut Limiti: Docker, log dosyalarının belli bir boyutu aşmasını ve diskinizi doldurmasını engelleyecek şekilde yapılandırılabilir.

Temel Log Komutları ile Tanışalım ⚙️

Hadi biraz pratik yapalım. Çalışan bir konteynerinizin olduğunu varsayıyorum.

* **Logları görmek için:**
`docker logs <konteyner-adi-veya-id>` komutu, konteynerin başlangıcından itibaren tüm logları size gösterir.
Bash:
docker logs my_web_app

* **Son logları takip etmek (tail -f gibi):**
Canlı olarak logları takip etmek isterseniz `-f` (follow) flag'ini kullanın.
Bash:
docker logs -f my_web_app

* **Son birkaç satırı görmek:**
Sadece son 50 satırı görmek isterseniz:
Bash:
docker logs --tail 50 my_web_app

* **Zaman bilgisi ile birlikte görmek:**
Log satırlarının ne zaman oluşturulduğunu görmek çok değerlidir. `-t` flag'ini ekleyin.
Bash:
docker logs -ft my_web_app

Log Sürücüleri (Logging Drivers): Nereye, Nasıl Yazılsın? 🌐

Docker'ın varsayılan log sürücüsü `json-file`'dır. Yani logları, konteyner başına bir JSON dosyası olarak host makinenizde (`/var/lib/docker/containers/...`) saklar. Ancak bu tek seçenek değil!

`docker info` komutu ile mevcut log sürücünüzü görebilirsiniz.
Bash:
docker info --format '{{.LoggingDriver}}'

Eğer logları sistemd'in journal'ına (systemd kullanan sistemlerde) yönlendirmek isterseniz, Docker daemon'ını `journald` sürücüsü ile başlatabilir veya konteyner oluştururken `--log-driver` parametresini kullanabilirsiniz.
Bash:
docker run --log-driver journald --name deneme nginx:alpine

Diğer popüler seçenekler arasında merkezi log sistemlerine göndermek için `syslog`, `fluentd`, `awslogs` veya `splunk` gibi sürücüler de bulunur.

En Kritik Konu: Log Rotasyonu 🛡️

Varsayılan `json-file` sürücüsü kullanılırken log dosyalarının kontrolsüz büyüyüp diskinizi doldurabileceğini unutmayın! Bunu engellemek için Docker Daemon yapılandırmasında (`/etc/docker/daemon.json`) log rotasyonu limitlerini belirleyebilirsiniz.

Örnek bir `daemon.json` yapılandırması:
JSON:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

Bu yapılandırma:
* `max-size`: "10m" -> Her bir log dosyasının maksimum 10 megabayt olmasını sağlar.
* `max-file`: "3" -> En fazla 3 adet log dosyası (örn: `log.json`, `log.json.1`, `log.json.2`) tutar. En eski dosya (`.2`) yenisi oluşunca silinir.

Bu dosyayı oluşturup veya düzenledikten sonra Docker servisini yeniden başlatmayı unutmayın: `sudo systemctl restart docker`.

Uygulamanızı stdout/stderr'e Yazmaya Nasıl Hazırlarsınız?

Bu, geliştirici tarafında yapılması gereken en önemli adımdır. Uygulamanızı, logları doğrudan konsola (stdout/stderr) yazacak şekilde kodlayın veya yapılandırın.

* **Python (logging modülü):**
Python:
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logger.info("Bu mesaj Docker log'unda görünecek!")

* **Node.js (console.log):**
`console.log()`, `console.error()` doğrudan stdout ve stderr'e yazar. Docker bunları yakalar.
JavaScript:
console.log('Uygulama başlatıldı.');
console.error('Bir hata oluştu!');

* **Nginx/Apache:** Varsayılan yapılandırmaları genellikle logları dosyaya yönlendirir. Bunu değiştirmek için `Dockerfile` içinde sembolik link oluşturabilir veya log dosyalarını `tail -f` ile stdout'a yönlendirebilirsiniz. Popüler bir yöntem:
Kod:
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

Sonuç olarak, Docker log yönetiminin gücü, sadeliğinde ve standartlaşmasında yatıyor. Uygulamalarınızı bu şekilde yazdığınızda, log takibi, hata ayıklama ve monitorizasyon işlemleri çok daha sorunsuz hale geliyor.

Peki ya siz? Konteyner loglarınızı yönetmek için başka hangi araçları veya yöntemleri kullanıyorsunuz? (Loki, ELK Stack, vs.) Deneyimlerinizi yorumlarda paylaşın, tartışalım! 💬
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri