Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

Kubernetes izleme kavramını düşünün, Prometheus aracıyla tanışın ve uyarı verme hakkında konuşun.

İzleme konusu çok geniştir, tek bir makalede parçalara ayrılamaz. Bu metnin amacı araçlara, kavramlara ve yaklaşımlara genel bir bakış sağlamaktır.

Makalenin malzemesi, "Slurm" okulunun açık dersi. Tam bir kursa katılmak istiyorsanız - adresindeki kursa kaydolun Kubernetes'te altyapıyı izleme ve günlüğe kaydetme.

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

Kubernetes kümesinde neler izlenir?

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

fiziksel sunucular. Kubernetes kümesi sunucularına dağıtıldıysa bunların durumunu izlemeniz gerekir. Zabbix bu görevi üstleniyor; onunla çalışırsan reddetmene gerek yok, çatışma olmayacak. Sunucularımızın durumunu izleyen Zabbix'tir.

Küme düzeyinde izlemeye geçelim.

Kontrol Düzlemi bileşenleri: API, Zamanlayıcı ve diğerleri. En azından sunucuların veya vbd'nin API'sinin 0'dan büyük olduğundan emin olmanız gerekir. Etcd birçok ölçüm döndürebilir: üzerinde döndüğü disklere, vbd kümesinin sağlığına ve diğerlerine göre.

liman işçisi uzun zaman önce ortaya çıktı ve herkes sorunlarının farkında: birçok kap donma ve diğer sorunlara neden oluyor. Bu nedenle Docker'ın kendisi de bir sistem olarak en azından kullanılabilirlik açısından kontrol edilmelidir.

dns. Kümede DNS düşerse, Discovery hizmetinin tamamı bundan sonra düşecek ve bölmelerden bölmelere yapılan çağrılar çalışmayı durduracaktır. Uygulamamda böyle bir sorun olmadı ancak bu, DNS durumunun izlenmesine gerek olmadığı anlamına gelmez. İstek gecikmesi ve diğer bazı ölçümler CoreDNS'de takip edilebilir.

Giriş. Projeye giriş noktaları olarak girişlerin (Giriş Denetleyicisi dahil) kullanılabilirliğini kontrol etmek gerekir.

Kümenin ana bileşenleri parçalara ayrıldı - şimdi soyutlama düzeyine inelim.

Uygulamalar bölmeler halinde çalışıyor gibi görünüyor, bu da onların kontrol edilmesi gerektiği anlamına geliyor, ancak gerçekte öyle değil. Kapsüller geçicidir: bugün bir sunucuda, yarın başka bir sunucuda çalışırlar; bugün 10 tane, yarın 2 tane var. Bu nedenle kimse baklaları izlemiyor. Mikro hizmet mimarisinde uygulamanın bir bütün olarak kullanılabilirliğini kontrol etmek daha önemlidir. Özellikle hizmet uç noktalarının kullanılabilirliğini kontrol edin: işe yarayan herhangi bir şey var mı? Uygulama mevcutsa, arkasında ne olduğu, şu anda kaç kopya olduğu - bunlar ikinci dereceden sorulardır. Bireysel örnekleri izlemeye gerek yoktur.

Son aşamada, uygulamanın çalışmasını kontrol etmeniz, iş ölçümlerini almanız gerekir: sipariş sayısı, kullanıcı davranışı vb.

Prometheus

Bir kümeyi izlemek için en iyi sistem Prometheus. Kalite ve kullanım kolaylığı açısından Prometheus'la yarışabilecek bir araç bilmiyorum. Esnek altyapı açısından harikadır, dolayısıyla “Kubernetes izleme” denildiğinde genellikle Prometheus kastedilmektedir.

Prometheus'u kullanmaya başlamak için birkaç seçenek vardır: Helm'i kullanarak normal bir Prometheus veya Prometheus Operatörü kurabilirsiniz.

  1. Sıradan Prometheus. Onunla her şey yolunda, ancak ConfigMap'i yapılandırmanız gerekiyor - aslında, daha önce yaptığımız gibi, mikro hizmet mimarisinden önce metin tabanlı yapılandırma dosyaları yazmalısınız.
  2. Prometheus Operatörü biraz daha dağınıktır, iç mantık açısından biraz daha karmaşıktır, ancak onunla çalışmak daha kolaydır: ayrı nesneler vardır, kümeye soyutlamalar eklenir, bu nedenle kontrol edilmesi ve yapılandırılması çok daha uygundur.

Ürünü anlamak için öncelikle normal Prometheus'u kurmanızı öneririm. Her şeyi yapılandırma aracılığıyla yapılandırmanız gerekecek, ancak bu faydalı olacaktır: neyin neye ait olduğunu ve nasıl yapılandırıldığını anlayacaksınız. Prometheus Operator'da hemen daha yüksek bir soyutlamaya yükselirsiniz, ancak dilerseniz derinliklere de inebilirsiniz.

Prometheus, Kubernetes ile iyi bir şekilde entegre edilmiştir: API Sunucusuna erişebilir ve onunla etkileşime girebilir.

Prometheus popülerdir, bu nedenle çok sayıda uygulama ve programlama dili onu desteklemektedir. Prometheus'un kendi metrik formatı olduğundan ve bunu aktarmak için uygulama içinde bir kütüphaneye veya hazır bir dışa aktarıcıya ihtiyacınız olduğundan destek gereklidir. Ve bu türden epeyce ihracatçı var. Örneğin, PostgreSQL Exporter var: PostgreSQL'den veri alıyor ve Prometheus'un çalışabilmesi için onu Prometheus formatına dönüştürüyor.

Prometheus mimarisi

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

Prometheus Sunucusu Prometheus'un arka ucu, beyni. Metrikler burada saklanır ve işlenir.

Metrikler zaman serisi veritabanında (TSDB) saklanır. TSDB ayrı bir veritabanı değil, Go dilinde Prometheus'a gömülü bir pakettir. Kabaca konuşursak, her şey tek bir ikili dosyadadır.

Verileri TSDB'de uzun süre saklamayın

Prometheus altyapısı metriklerin uzun süreli saklanmasına uygun değildir. Varsayılan saklama süresi 15 gündür. Bu sınırı aşabilirsiniz ancak şunu unutmayın: TSDB'de ne kadar çok veri depolarsanız ve bunu ne kadar uzun süre yaparsanız, o kadar çok kaynak tüketecektir. Geçmiş verileri Prometheus'ta saklamak kötü bir uygulama olarak kabul edilir.

Çok büyük bir trafiğiniz varsa, metriklerin sayısı saniyede yüz binlerce ise, depolamalarını disk alanına veya döneme göre sınırlamak daha iyidir. Genellikle "sıcak veriler" TSDB'de depolanır ve ölçümler yalnızca birkaç saat içinde gerçekleşir. Daha uzun depolama için, buna gerçekten uygun olan veritabanlarında, örneğin InfluxDB, ClickHouse vb. harici depolama kullanılır. ClickHouse hakkında daha iyi yorumlar gördüm.

Prometheus Server model üzerinde çalışıyor Çek: Ona verdiğimiz uç noktalara yönelik ölçümlere gidiyor. “API Sunucusuna gidin” dediler ve o da her n'inci saniyede bir oraya gidiyor ve metrikleri alıyor.

Kazıma dönemleri arasında görünebilecek kısa ömürlü nesneler (iş veya cron işi) için bir Pushgateway bileşeni vardır. Kısa vadeli nesnelerden gelen metrikler buna itilir: iş yükseldi, bir eylem gerçekleştirdi, metrikleri Pushgateway'e gönderdi ve tamamlandı. Bir süre sonra Prometheus kendi hızıyla aşağıya inecek ve bu metrikleri Pushgateway'den alacak.

Prometheus'ta bildirimleri yapılandırmak için ayrı bir bileşen vardır - uyarı yöneticisi. Ve uyarı kuralları. Örneğin, sunucu API'si 0 ise bir uyarı oluşturmanız gerekir. Etkinlik tetiklendiğinde uyarı, daha fazla gönderilmek üzere uyarı yöneticisine iletilir. Uyarı yöneticisi oldukça esnek yönlendirme ayarlarına sahiptir: bir grup uyarı yöneticilerin telgraf sohbetine, bir diğeri geliştiricilerin sohbetine ve üçüncüsü de altyapı çalışanlarının sohbetine gönderilebilir. Bildirimler Slack, Telegram, e-posta ve diğer kanallara gönderilebilir.

Ve son olarak size Prometheus'un katil özelliğinden bahsedeceğim - Keşfi. Prometheus ile çalışırken, izleme için nesnelerin belirli adreslerini belirtmenize gerek yoktur, türlerini ayarlamanız yeterlidir. Yani, "işte IP adresi, işte bağlantı noktası - monitör" yazmanıza gerek yok, bunun yerine bu nesneleri hangi ilkelere göre bulacağınızı belirlemeniz gerekir (hedefler - hedefler). Prometheus'un kendisi, o anda hangi nesnelerin aktif olduğuna bağlı olarak gerekli olanları çeker ve izlemeye ekler.

Bu yaklaşım, her şeyin yüzdüğü Kubernetes yapısına çok iyi uyuyor: bugün 10 sunucu var, yarın 3. Sunucunun IP adresini her seferinde belirtmemek için, onu nasıl bulacağınızı bir kez yazdılar - ve Discovering bunu yapacak. .

Prometheus dili denir PromQL. Bu dili kullanarak belirli metriklerin değerlerini elde edebilir ve daha sonra bunları dönüştürebilir, bunlara dayanarak analitik hesaplamalar oluşturabilirsiniz.

https://prometheus.io/docs/prometheus/latest/querying/basics/

Простой запрос

    container_memory_usage_bytes

Математические операции

    container_memory_usage_bytes / 1024 / 1024

Встроенные функции

    sum(container_memory_usage_bytes) / 1024 / 1024

Уточнение запроса

    100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)

Prometheus'un web arayüzü

Prometheus'un oldukça minimalist bir web arayüzü var. Yalnızca hata ayıklama veya gösteri için uygundur.

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

İfade satırına PromQL dilinde bir sorgu yazabilirsiniz.

Uyarılar sekmesi uyarı kurallarını içerir ve bunların üç durumu vardır:

  1. etkin değil - eğer uyarı şu anda etkin değilse, yani her şey yolundaysa ve işe yaramadıysa;
  2. beklemede - bu, uyarının işe yaradığı ancak gönderimin henüz geçmediği durumdur. Gecikme, ağ yanıp sönmesini telafi edecek şekilde ayarlanmıştır: belirtilen hizmet bir dakika içinde artmışsa, alarm henüz çalınmamalıdır;
  3. Ateşleme, uyarının yandığı ve mesaj gönderdiği üçüncü durumdur.

Durum menüsünde Prometheus'un ne olduğu hakkındaki bilgilere erişim bulacaksınız. Yukarıda bahsettiğimiz hedeflere (hedeflere) geçiş de var.

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

Prometheus arayüzüne daha ayrıntılı bir genel bakış için bkz. Slurm'un Kubernetes kümesinin izlenmesine ilişkin dersinde.

Grafana ile entegrasyon

Prometheus web arayüzünde kümenin durumu hakkında sonuç çıkarabileceğiniz güzel ve anlaşılır grafikler bulamazsınız. Bunları inşa etmek için Prometheus, Grafana ile entegre edilmiştir. Bu tür kontrol panelleri alıyoruz.

Kubernetes Kümesini İzleme: Prometheus'a Genel Bakış ve Giriş

Prometheus ve Grafana entegrasyonunu kurmak hiç de zor değil, dokümantasyonda talimatları bulabilirsiniz: PROMETHEUS'A GRAFANA DESTEĞİNeyse bununla bitireceğim.

Sonraki yazılarımızda izleme konusuna devam edeceğiz: Grafana Loki ve alternatif araçları kullanarak log toplama ve analiz etme hakkında konuşacağız.

Yazar: Marcel Ibraev, sertifikalı Kubernetes yöneticisi, şirkette uygulama mühendisi Güney köprüsü, konuşmacı ve kurs geliştiricisi Slurm.

Kaynak: habr.com

Yorum ekle