docker

Docker: Günlüklerle Çalışma – Çıktıyı Yakalama ve Hata Ayıklama

Günlükler, Docker kapsayıcılarında sorun giderme ve hata ayıklamanın paha biçilmez bir yönüdür. Docker içinde uygulamalar çalıştırırken günlükleri etkili bir şekilde yakalamak, geliştiricilerin sorunları daha hızlı teşhis etmelerini ve etkili bir şekilde düzeltmelerini sağlar. Bu makalede, davranışları hakkında fikir edinmek ve ortaya çıkan sorunları çözmek için Docker kapsayıcılarından günlükleri yakalamak ve analiz etmek için çeşitli yöntemleri inceleyeceğiz.

 

Docker’dan Günlükleri Yakalama ve Analiz Etme

DOCKER GÜNLÜKLERİNİ ANLAMA
Docker, konteynerlarınızın çıktısını (stdout ve stderr) yakalar ve bu çıktıya, sorunları ayıklamanıza yardımcı olacak komutlar kullanılarak erişilebilir.

Bu bölüm, Docker kapsayıcılarını çalıştırırken günlükleri nasıl yakalayacağınız ve analiz edeceğiniz konusunda adım adım talimatlar sağlayacaktır. Sorunları hızlı bir şekilde belirleme ve düzeltmede etkili günlük yönetimi kritik öneme sahiptir.

Adım Adım Talimatlar

  1. Docker Konteynerini Ayrık Modda Çalıştırın: Gerekli portları açığa çıkarırken arka planda bir konteyner başlatın.
    $ docker run -d --name linuxconfig -p 8888:80 httpd

    Burada, httpd Apache HTTP Sunucusu görüntüsüdür, linuxconfig konteynere atanan isimdir ve ana bilgisayardaki 8888 portu konteynerdeki 80 portuna eşlenmiştir. -d seçeneği konteyneri ayrı modda çalıştırır.

  2. Konteyner Günlüklerini Görüntüle: Çalışan konteynerinizin günlüklerine erişerek çıktısını izleyin.
    $ docker logs linuxconfig

    Bu komut, konteynerin başlatıldığı tarihten itibaren oluşturduğu tüm günlükleri görüntüler.

     

    Basic docker command to view container Logs
    Konteyner Günlüklerini görüntülemek için temel docker komutu
  3. Gerçek Zamanlı Kayıtları Takip Edin: Kayıtlar oluşturuldukça bunları sürekli olarak izleyin.
    $ docker logs -f linuxconfig

    -f (veya –follow) seçeneği komutun çalışmaya devam etmesini sağlar ve yeni günlük girdilerini oluştukça görüntüler; bu, bir günlük dosyasında tail -f kullanılmasına benzer.

Docker Logs Komut Örnekleri

Docker, geliştiricilerin sorunları gidermelerine ve kapsayıcı davranışlarını izlemelerine yardımcı olan güçlü günlük kaydı yetenekleri sağlar. Aşağıdaki örnekler, kapsayıcı günlüklerini yakalamak, filtrelemek ve analiz etmek için çeşitli teknikleri gösterir. Temel komutlardan gelişmiş yapılandırmalara kadar, bu örnekler kapsayıcı uygulamalarınızı etkili bir şekilde hata ayıklamanıza yardımcı olmak için çok çeşitli senaryoları kapsar.

  1. Temel Günlük Alma: Bir konteynerdaki tüm günlükleri alın.
    $ docker logs linuxconfig

    Bu, konteyner çalışmaya başladığından beri oluşturulan tüm günlükleri gösterir.

  2. Gerçek Zamanlı Kayıt İzleme: Kayıtlar oluşturuldukça takip edin.
    $ docker logs --follow linuxconfig

    Günlükleri görüntüler ve Ctrl+C tuşlarına basana kadar yeni çıktı akışını sürdürür.

  3. Günlük Çıktısını Sınırlama: Yalnızca en son günlükleri alın.
    $ docker logs --tail=50 linuxconfig

    Yalnızca son 50 günlük satırını gösterir; kapsamlı günlükleri olan kapsayıcılar için kullanışlıdır.

  4. Zaman Damgalı Günlükleri Görüntüleme: Günlükleri zaman bilgileriyle birlikte görüntüleyin.
    $ docker logs --timestamps linuxconfig

    Olayların daha iyi izlenebilmesi için her günlük satırına zaman damgası eklenir.

     

    Viewing Logs with Timestamps
    Zaman Damgalı Günlükleri Görüntüleme
  5. Zamanla Sınırlı Kayıtları Yakalama: Belirli bir zaman dilimi içindeki kayıtları alın.
    $ docker logs --since="2023-03-15T10:00:00" --until="2023-03-15T11:00:00" linuxconfig

    Sadece belirtilen zaman aralığında oluşturulan günlükleri gösterir.

  6. Göreceli Zaman Filtreleme: Son birkaç dakika veya saate ait günlükleri görüntüleyin.
    $ docker logs --since=30m linuxconfig

    Son 30 dakikanın günlüklerini görüntüler. s (saniye), m (dakika), h (saat) veya d (gün) kullanabilirsiniz.

  7. Günlükleri Bir Dosyaya Kaydetme: Günlükleri daha detaylı analiz için bir dosyaya yönlendirin.
    $ docker logs linuxconfig > container_logs.txt 2>&1

    Tüm konteyner günlüklerini diğer araçlarla paylaşılabilen veya analiz edilebilen bir metin dosyasına kaydeder.

     

    Saving Docker Container Logs to a File
    Docker Konteyner Günlüklerini Bir Dosyaya Kaydetme
  8. grep ile Günlükleri Filtreleme: Günlüklerde belirli kalıpları arayın.
    $ docker logs linuxconfig 2>&1 | grep ERROR

    Yalnızca “ERROR” kelimesini içeren günlük satırlarını göstererek sorunların belirlenmesini kolaylaştırır.

  9. Birden Fazla Konteyneri İzleme: Bir servis yığınından günlükleri görmek için Docker Compose’u kullanın.
    $ docker-compose logs -f

    Docker Compose dosyasında tanımlanan birden fazla kapsayıcıyla çalışırken, bu komut tüm servislerden gelen günlükleri gösterir.

  10. Günlük Sürücüleriyle Gelişmiş Hata Ayıklama: Bir konteyneri belirli bir günlük sürücüsünü kullanacak şekilde yapılandırın.
    $ docker run -d --name debug-container --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx

    Döndürme ayarlarıyla JSON dosya sürücüsünü kullanır, günlük dosyalarını 10 MB ile sınırlar ve maksimum 3 dosya tutar.

  11. Durdurulmuş Bir Konteynerden Günlükleri Görüntüle
    $ docker logs my_old_container

    Docker, konteyner durdurulmuş olsa bile, kaldırılmadığı sürece günlükleri tutar.

  12. JSON Günlük Kaydı Sürücüsünü Kullanın (konteyneri başlatırken)
    $ docker run -d --name jsonlogger --log-driver=json-file httpd

    Varsayılan `json-file` günlük sürücüsünü kullanır; günlükler docker günlükleriyle incelenebilir.

  13. Özel Bir Günlük Kaydı Sürücüsü Kullanın (örneğin syslog)
    $ docker run -d --name syslogger --log-driver=syslog httpd

    Merkezi sistemlere (Syslog, Fluentd, vb.) log göndermek için kullanışlıdır.

  14. Günlük Sürücü Ayarlarını Denetle
    $ docker inspect --format='{{.HostConfig.LogConfig.Type}}' linuxconfig

    Konteyner tarafından şu anda kullanılan günlük sürücüsünü döndürür.

     

    Inspect Log Driver Settings - In this case the container is set to json-file driver
    Günlük Sürücüsü Ayarlarını Denetle – Bu durumda konteyner json-dosya sürücüsüne ayarlanır
  15. Konteyner Olaylarının Analizi: Konteyner yaşam döngüsü olaylarını takip edin.
    $ docker events --filter container=linuxconfig

    Başlatma, durdurma veya sağlık durumu değişiklikleri gibi konteynerle ilgili olayları gösterir.

EN İYİ UYGULAMALAR
Merkezi bir günlük kaydı çözümü veya bir günlük kaydı sürücüsü kullanmayı düşünün. Docker, daha kolay sorgulama için günlükleri toplamaya yardımcı olabilen json-file ve fluentd dahil olmak üzere çeşitli günlük kaydı sürücülerini destekler.

Özetlersek

Docker kapsayıcılarından günlükleri tutarlı bir şekilde yakalamak ve analiz etmek, etkili hata ayıklama ve sorun çözümü için önemlidir. Docker’ın yerel günlükleme yeteneklerinden yararlanarak, uygulamalarınızın davranışları hakkında değerli içgörüler elde edebilir ve verimli operasyonları sürdürebilirsiniz.
Günlük kaydının etkinliğini artıran Fluentd veya ELK yığını entegrasyonu gibi ek araçları veya çerçeveleri keşfetmeyi unutmayın.

Sıkça Sorulan Sorular (SSS)

  1. Bir konteyner yeniden başlatılsa bile günlükleri kalıcı hale getirebilir miyim?

    Evet, json-file gibi günlük kayıt sürücülerini kullanmak günlük kayıtlarının kalıcı olmasını sağlayarak, konteyner yeniden başlatıldıktan sonra bile kullanılabilir olmasını sağlayabilir.

  2. Docker hangi log formatlarını destekler?

    Docker, günlükler için öncelikli olarak JSON formatını kullanır ancak syslog veya journald gibi farklı formatları barındırabilen çeşitli günlük sürücülerini de destekler.

  3. Tüm konteynerlerin günlüklerini aynı anda nasıl görüntüleyebilirim?

    Toplu olarak analiz etmek istiyorsanız, çalışan tüm konteynerlerden günlükleri almak için $ docker logs $(docker ps -q) komutunu kullanın.

  4. Günlükleri belirli anahtar kelimelere göre filtreleyebilir miyim?

    Evet, ilgili bilgileri filtrelemek için grep komutunu logs komutuyla kullanabilirsiniz. Örneğin, $ docker logs my_container | grep “ERROR”.

 

Yazının orijinalini buradan okuyabilirsiniz.