Kubernetes kümenizin sağlığını ve performansını izlemek, sıradan uygulama izlemenin ötesine geçer. Bu süreçte altyapıyı, çalışan yükleri ve kümenin kendi durumunu takip etmek zorundasınız. Neyse ki, son yıllarda araçlar büyük ölçüde gelişti ve artık sıfırdan başlamak zorunda değilsiniz.
Prometheus: Kubernetes’in De Facto İzleme Aracı
Prometheus, Kubernetes ekosisteminde standart olarak kabul edilen bir izleme aracıdır. Çekme modeliyle çalışması, Kubernetes’in hizmet keşfi mekanizmasıyla doğal bir uyum sağlar. Kümenizdeki pod’ları otomatik olarak algılamak için sadece birkaç ek açıklama (annotation) eklemeniz yeterli olur. Manuel yapılandırmaya gerek kalmaz.
Ancak, büyük ölçekli bir kümede Prometheus’un kaynak kullanımı dikkatli yönetilmezse beklenmedik sonuçlara yol açabilir. Örneğin, 200 düğümden oluşan ve yaklaşık 4.000 pod barındıran bir kümede, varsayılan 15 saniyelik toplama aralığı, sunucuya 1 GB’tan fazla RAM tüketimine neden oldu. Bu sorunu çözmek için düşük frekanslı hizmetler için toplama aralığını 30 saniyeye çıkardık ve kullanılmayan metrikleri filtrelemek için relabel kurallarını uyguladık. Sonuç? RAM kullanımı yarı yarıya azaldı.
Bunun yanı sıra, Thanos sidecar kullanarak ham verileri doğrudan S3’e aktardık. Böylece yerel disklerin dolma riskini ortadan kaldırırken, 30 günlük veri saklama süresini de garanti altına aldık. Ancak, bu yaklaşımın bir bedeli vardı: ek ağ trafiği nedeniyle özel bir bant genişliği dilimi ayarlamak zorunda kaldık, aksi takdirde toplama işlemlerinde gecikmeler oluşabilirdi.
Grafana: Verilerinizi Görselleştirmek ve Uyarılar Oluşturmak
Grafana, Prometheus, Loki ve Tempo gibi araçlarla entegre çalışarak kontrol panelleri, uyarılar ve çoklu kaynak sorguları sunar. Grafana topluluğu, Kubernetes için önceden hazırlanmış birçok kontrol panelini grafana.com/dashboards adresinde paylaşmaktadır. Bu hazır şablonlarla başlayıp, ihtiyaçlarınıza göre özelleştirebilirsiniz.
Loki: Verimli ve Ölçeklenebilir Günlük Toplama
Loki, Prometheus’tan esinlenen bir günlük toplama aracıdır. Aynı etiketleme modelini kullanarak çalışır, ancak log’ları sıkıştırılmış akışlar halinde depolar ve yalnızca etiketlere göre indeksler. Bu sayede, Elasticsearch kadar güçlü olmasa da, büyük ölçekli ortamlarda çok daha düşük maliyetle çalışır.
Ancak, Loki’yi büyük ölçekte kullanırken etiket tasarımına dikkat etmek kritik önem taşır. Örneğin, bir dağıtımdaki her pod adı, ad alanı ve konteyner görüntü etiketini indekslediğimizde, etiket çeşitliliği 200 bine ulaştı ve basit LogQL sorguları bile zaman aşımına uğramaya başladı. Çözüm olarak, sadece hizmet ve ortam etiketlerini tutan bir modele geçtik ve ham verileri doğrudan S3’e aktardık. Bu değişiklikle indeks boyutu %70 azaldı ve sorgular sanıiyenin altında yanıt verir hale geldi. Tabii ki, bu yaklaşımın bir bedeli vardı: artık herhangi bir pod adıyla arama yapamıyoruz. Bu nedenle, nadir durumlarda arama yapabilmek için küçük bir sidecar ekledik.
Etkili Uyarılar Oluşturmanın Sırları
Kubernetes ortamlarında yaygın bir hata, her olası metriği uyarıya bağlamaktır. Bunun sonucunda, on-call mühendisleri uyarıların gürültüsü altında ezilir ve gerçekten önemli olanları gözden kaçırabilir. Bunun yerine, hata bütçesi tüketimini izleyen çoklu yanma oranlı uyarılar tanımlamalısınız.
Semptom temelli uyarıları sadece hata ayıklama aracı olarak kullanın, on-call uyarıları olarak değil. Örneğin, CPU kullanımındaki geçici artışları uyarı olarak tetiklemek yerine, sisteminizin hedeflediği hata bütçesini ne kadar hızlı tükettiğini izleyin.
Alertmanager yapılandırması da uyarı gürültüsünü ya ortadan kaldırır ya da patlatır. Üretim ortamında yaptığımız bir dağıtım sırasında dakikada 250 uyarı alıyorduk. Bunların çoğu, geçici CPU artışlarından kaynaklanıyordu. Çözüm olarak:
- Düşük önemdeki uyarıların, yüksek önemdeki uyarılar tarafından bastırılmasını sağlayan engelleme kuralları tanımladık.
- Uyarıları hizmet ve önem derecesine göre gruplandırdık.
Sonuç? On-call akışındaki uyarılar saatte 15’e kadar düştü. Tabii ki, bu yaklaşımın da bir bedeli vardı: engelleme matrisini sürekli güncel tutmanız gerekiyor. Aksi takdirde, kritik bir hata, zararsız bir yükseltme uyarısının arkasında gizlenebilir.
Gözlemleme Yığını Kurarken Dikkat Edilmesi Gerekenler
Kubernetes gözlemleme yığını oluştururken, Prometheus, Grafana ve Loki ile başlamanız en sağlam temeli oluşturacaktır. Bu araçlar, kümenizin, yüklerinizin ve uygulamalarınızın durumunu izlemek için güçlü bir temel sunar. Kontrol panellerinizi ekibinizin ihtiyaçlarına göre özelleştirmeyi unutmayın.
Doğru şekilde yapılandırılmış bir gözlemleme yığınıyla, sorunlara hızlıca yanıt verebilir ve uygulamalarınızı veri odaklı kararlarla iyileştirebilirsiniz. Bu süreç sadece izlemekle ilgili değil, aynı zamanda sisteminizi anlamak ve daha iyi hale getirmekle ilgilidir.
Deneyimlerime göre, iyi kurulmuş bir Kubernetes gözlemleme sistemi, uygulamalarınızın ve hizmetlerinizin başarısı için olmazsa olmazdır. Bu sistemi sonradan eklemeye çalışmak yerine, tasarım aşamasından itibaren planlamanız gerekiyor. Doğru araçlar ve bakış açısıyla, sisteminizi yüksek görünürlük ve kontrolle yönetebilirsiniz.
Yapay zeka özeti
Kubernetes kümenizi izlemek için Prometheus, Grafana ve Loki kullanmanın en iyi yöntemlerini öğrenin. Kaynak kullanımını optimize etme, uyarı stratejileri ve ölçeklenebilir günlük toplama hakkında ipuçları.