Selamlar arkadaşlar bu yazımda sizlere Docker Logging hakkında bilgiler vereceğim.
Genel anlamda logları açıklamak gerekirse; bilgisayarlar çeşitli nedenlerden dolayı log tutacaktır. Bu logların tutulma şekli OS bazlı olarak değişiklik gösterecektir. Windows üzerindeki loglara Event Viewer’dan ulaştığımız gibi, Linux sistemlerde ise /var/log klasörü altında dosyalarda saklanmaktadır.
Logların tutulma nedenleri ise şunlar olabilir;
Sorun giderme ve hata ayıklama işlemlerinde kullanılabilecek loglar : yazılımlarımızın çalışma durumlarına göre loglar tutularak önemli bilgileri bize verebilir. Bir sorun ya da hata oluştuğunda bu loglar yardımıyla gerekli çözüme ulaşılabilecek adımları elde edebiliriz.
Güvenlik izleme ve Tehdit tespitinde kullanılabilecek loglar : Bu tarz loglarda yetkisiz erişimler, kötü niyetli girişimler kayıt edilecektir. Bu durum loglar ile analiz edildiğinde gerekli açıklar kapatılabilir.
Performas izleme ve Kapasite planlamalarında kullanılacak loglar : Bilgisayar ve sunucularımızda performans izlemeleri yapabilir ve bu loglar sayesinde doğru kapasite planlamaları yapılabilir.
Bu şekilde bir çok alanda loglar sistemlerimiz tarafından tutulacaktır.
Docker tarafında ise Container’larımız da oluşturduğumuz servislerimizi bir kere çalıştırırız ve daha sonrasında bir daha o Container içerisine girmeden gözlemlemek isteyebilir. Bunun için Docker üzerinde Log Management komutları sayesinde yapabiliriz.
STDIN – STDOUT – STDERR akışları :
Standart input-output-error araçları sayesinde uygulamamıza olan girdileri, bu girdilerin sonuçlarını ya da hatalarını görüntüleyebiliriz.
Stdin – uygulamaya yapılan girişler, Stdout – uygulamanın standart çıktılarıdır ve son olaran Stderr – ise uygulamada oluşan hataları göstermek için kullanılan çıktıdır.
Örnek vermek gerekirse 1 – ls -l Stdin’e, koddan çıkan sonuç Stdout’a, yanlış kod sonucu çıkan sonuç ise stderr’ye örnektir.
> docker logs hello
Komudu yardımıyla hello adındaki container’ın stdout ve stderr çıkışlarına gönderdiği tüm logları görebileceğiz.
> docker logs --help
Komutu yardımıyla logs’un alabileceği Options’ları görebilirsiniz. Bunlardan bazılarını açıklamam gerekirse -f ya da –follow; anlık olarak stdout ve stderr’a gelen logları ekrana basar. -t ya da –timestamps; ise oluşan loglarda zaman damgası yok ise bunu ekleyerek size gösterecektir. Bunların örneklerine birazdan bakacağız arkadaşlar.
> docker container run -d --name web -p 80:80 httpd
> docker logs web
> docker logs --details web
> docker logs --details -t web
Komutları ile logların; –details ile detaylarına bakabilir ya da -t ile timestamp ekleyebilirsiniz. Birden fazla options’ı yan yana yazarak kullandığınızda ise daha ayrıntılı sonuçlar elde edebilirsiniz.
> docker info
Komudu ile Docker’ın desteklediği bir çok loglama aracınıda görebilirsiniz. Bu driverları ayarlayarak loglarınızı istediğiniz format ve sisteme gönderebilirsiniz.
> docker run -d --log-driver syslog --log-opt syslog-address=udp://192.168.1.10:1543 httpd
Komudunda çalıştırmış olduğunuz apache server’ın –log-driver’ını syslog olarak belirlediniz. –log-opt’larını (log’lama optionlarını) ayarlarken syslog-address=udp://*.*.*.*:* adresine logları göndereceğinizi söylemiş oldunuz.
> docker stats
> docker stats 169
Komutları yardımıyla hangi Container ne kadar CPU, RAM ya da IO kullandığını gösterir. Komut yardımıyla istediğimiz Container içinde değerleri görebiliriz.
> docker top container_name
Ayrıca hangi Container’ınızda hangi process’lerin çalıştığını görmek istersenizde Top komutunu kullanabilirsiniz.
Container’ların CPU ve Memory limitlerini belirleme :
Memory Limitleri :
Sistemimiz üzerinde çalıştırmış olduğumuz Container’lar herhangi bir kısıtlama belirtilmezse, kurulu olduğu cihazın kaynaklarına tam erişimi olur. Diğer Container’larda oluşan sorunlardan dolayı etkilenecektir. Fazla Ram kullanımı ya da Disk kullanımı Containerlarımızı etkilemesin diye oluşturacağımız container’larımıza sistem kaynaklarını sınırlı olarak kullanmaları için limitler belirleriz.
> docker container run -d --memory=200m --memory-swap=400m -p 9090:9090 httpd
Komutudumuz ile –memory=200m yaparak 200MB memory kullanımına izin verirken, –memory-swap=400m ile de Swap olarak kullanılacak alanı belirledik. Memory boyutunu belirtirken kullanmış olduğumuz M = MB’dır. Bunun yerine K = KB, G = GB gibi değelerde girebilirsiniz. -1 yazarsanızda limitsiz olarak belirlersiniz.
> docker stats
Komudunu yazarak ise memory’de kısıtlama yapmış olduğumuz Container’ımızı görmüş oldunuz.
CPU Limitleri :
Cihazınızda bulunan CPU’nun Core sayılarına göre kısatlamalar yapabiliyoruz. Cihazınızda 14 Core 20 Logical Processors (thread) olduğunu varsayalım. Burada Logical Processors’ler işlemcileriniz olarak değerlendiriliyor ve her birini farklı Container’lara atama yapabiliyorsunuz. Bu atamalarda dağıtılan CPU, sadece o Container tarafından erişilebiliyor. Atamalarımızı yaparken ise CPU numarası ya da sayısı ile yapıyoruz. Ghz şeklinde atamalar yapılamıyor.
> docker container run -d --cpus="1.5" -p 12:12 httpd
> docker container run -d --cpuset-cpus="0,1" -p 13:13 httpd
> docker container run -d --cpus="1.5" --cpuset-cpus="0,1" -p 14:14 httpd
Container’larımızı çalıştırırken –cpus=”1.5” yazarsak, CPU’larımızdan bir buçuk tanesi kullanılacaktır. Bu değeri değiştirebilirsiniz. 3 ya da 4 CPU kullanılsın diyebiliriz. Bunu sadece –cpuset-cpus=”0,1” şeklinde yaparsak ise CPU’larımızdan sadece 0 ve 1 numaralı olanlar kullanılacaktır. Bu kodları aynı anda da kullanabiliriz tabi. Bu sayede bir buçuk CPU kullanırken, Bunları sadece 0 ve 1 numaralı CPU’dan al şeklinde açıklamasını yapabiliriz.
Bu şekilde Docker üzerinde Loglamalar yaparken artı olarak birde Container’larımızın kaynaklarınıda limitlemiş olduk.
Bir sonraki yazılarımda görüşmek üzere arkadaşlar. Yorum ve görüşlerinizi yorumlar alanından bana iletebilirsiniz. Ayrıca desteklerinizin olmasını isterseniz’de YouTube üzerinde SistemDostu kanalıma da abone olabilirsiniz. Hepimize kolaylıklar diliyorum.