Docker ile Performans ve Log Takibi

Merhaba arkadaşlar, Mobilhanem ‘de devam ettiğimiz Docker eğitimlerimize devam ediyoruz. Bir önceki yazımızda kendi kodumuzdan Docker imajı oluşturmuş ve bu container’da bulunan web sunucusuna uzaktan bağlanmıştık.  Bu yazımızda Docker ile Performans ve Log takibi nasıl olur anlatmaya çalışacağız. Bunun için bir  container açıp, loglarını takip edip performansını nasıl takip edebileceğimizi göreceğiz.

Çalıştırdığımız Docker container’ları sistemde izole bir ortamda çalışmaktadır. Bu izolasyonun verdiği yönetim rahatlığı ile bu container’ın ne yaptığı çok daha rahat izlenebilmektedir. Çalışan programlar normalde çıktılarını konsola basar. Dosyaya basan uygulamalar olsa da, Docker’da çalışan uygulamalar için böyle bir ayrım yapmaya gerek kalmaz. Çünkü Docker container’larındaki dosya sistemi de izole edilmiştir. Bu yüzden çoğu Docker container’ı çıkıtısını konsola basar. Container arka planda çalıştığında ise bu çıktılarına erişmek için docker logs komutu kullanılır. Docker Hub’dan Postgres veritabanını indireceğiz. Docker Hub’dan bir imaj kullanmadan önce kullanım talimatlarını okumak önemlidir. Özellikle Postgres gibi konfigürasyonu karmaşık bir veritabanının Docker’da güzelce çalışabilmesi için değişik parametreler girilmesi gerekebilir. Bu yüzden https://hub.docker.com/_/postgres sayfasını ziyaret etmenizi öneririm.

Docker DB Kurmak

Kuracağımız veritabanını şu komutla çalıştıracağız: docker run –name mydb -e POSTGRES_PASSWORD=sifre1234 -d postgres:12.2 . Komut arka planda bir Docker container’ı açacak. Bu komutta container’ımıza -name parametresiyle mydb ismini verdik. Bu ismi başka komutlarda kullanarak gerekli bilgilere ulaşacağız. Öncelikle bir önceki derste de olduğu gibi bu container’ın doğru çalıştığını docker ps komutu ile kontrol edelim.

Postgres biraz kompleks bir yapı olduğu için birden fazla katmana sahip olduğundan indirmesi biraz zaman alabilir. Fakat indirdikten sonra çalışması sadece saniyeler sürüyor. Bu container neler yapmış diye bakmak için docker logs mydb komutunu çalıştıralım.

Docker Loglar

Görüldüğü üzere postgres container’ı yukarıdaki gibi bir şeyler basmış olacak. Postgres kurulumu hazır olunca en altta database system is ready to accept connections yazısını görmüş olacağız. Container’ların basabileceği çıktılar tamamen çalışan programa bağlı olup, ihtiyacınıza göre anlam çıkarmanız gerekebilir. Bir şeyi yanlış yaparsanız ve container çalışıp ölürse, yine docker logs komutu ile ne olduğuna bakabilirsiniz.

Bu container çalışıyor, fakat siz bu container’ı nasıl kullanacaksınız? Port yönlendirmesi yapmadık ama bu container’ın IP’sini öğrenmek için docker inspect mydb komutunu çalıştırabilirsiniz. Dikkat etmeniz gereken, bu inspect komutu çok şey bastığından, çıktıların içinden IP’sini bulmanız gerekmektedir. IP’yi kolayca almak için docker inspect -f ‘{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ mydb komutunu çalıştırabilirsiniz. Böylece bilgisayarınızda psql CLI ya da GUI’si olan bir tool varsa bağlanabilirsiniz.

Alternatif olarak ise bu container arka planda çalışsa dahi, container’ın içine docker exec -ti mydb sh komutu ile girebiliriz. Exec komutu, çalışmakta olan bir container’da belirtilen programın interaktif olarak açılmasını sağlar. Belirttiğimiz sh programı bir shell programıdır ve container içinde ek komutlar çalıştırmamızı sağlayacaktır. İçine girip psql komutunu çalıştırıp, Postgres’e bağlanıp işlemleri gerçekleştirebiliriz.

Docker Performans

En son olarak ise, bu container’ın ne kadar kaynak kullandığını, docker stats komutu ile takip edebiliriz. Bu komut sistemdeki tüm container’ların CPU, RAM, ve disk kullanımı metriklerini vermekte, saniyede bir güncellenmektedir.

Dilerseniz container’ların CPU ve RAM kullanımı kısıtlanabilmektedir. Bu sayede sisteminizde birden fazla container’ı kaynakları tüketmeden rahatlıkla kullanabilirsiniz. CPU limitlerini test etmek için, içinde sysbench yazılımı olan bir imaj deneyeceğiz. Bu yazılım belirli bir süre işlem yaparak 10 saniyede kaç işlem yapabildiğini raporlamaktadır.

Yukarıdaki resimden görebileceğiniz, üzere tek thread’li testimizde, bir CPU sınırlaması olmadan 10 saniyede 22376 işlem gerçekleşmiştir. Fakat CPU’yu 0.5 yani sadece yarım çekirdek zamanı kullan diye kısıtladığımızda aynı sürede 10400 işlem gerçekleşebilmiştir. Yani performans yaklaşık yarıya düşmüştür. Linux ve Docker’da CPU kısıtlaması geniş bir konudur, ve daha detaylı bilgi isterseniz İngilizce olan şu kaynağa göz atabilirsiniz. Docker’da aynı şekilde RAM de kısıtlanabilmektedir. Eğer container izin verilenden fazla RAM kullanmak isterse, sunucuda daha fazlası olmasına rağmen işleme devam edemez ve kapanır. Daha detaylı bilgiler için Docker’ın dökümantasyonuna göz atmanızda fayda var.

Docker’daki loglar ve performans metrikleri Elasticsearch, InfluxDB gibi açık kaynak sistemlere ya da Datadog, SignalFx, NewRelic gibi ücretli SaaS servislerine de kolaylıkla aktarılabilmektedir.

Bu dersimizde Docker ile Performans ve Log takibi nasıl olur anlatmaya çalıştık. Bir sonraki dersimizde Docker Volumes ile Kalıcı Veri ve Veri Paylaşımı‘nı anlatacağız.

Tüm Docker ve Kubernetes Eğitimi için tıklayınız!

5

Mustafa Akın

SRE Architect @Atlassian Opsgenie
PhD Öğrencisi @Bilkent Üniversitesi

Yorum Yaz

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?