Thanos - Ölçeklenebilir Prometheus

Makalenin çevirisi ders öğrencilerine özel olarak hazırlanmıştır. "DevOps uygulamaları ve araçları".

Fabian Reinartz bir yazılım geliştiricisi, Go fanatiği ve problem çözücüdür. Aynı zamanda Prometheus'un bakımcısı ve Kubernetes SIG enstrümantasyonunun kurucu ortağıdır. Geçmişte SoundCloud'da üretim mühendisiydi ve CoreOS'ta izleme ekibine liderlik ediyordu. Şu anda Google'da çalışıyor.

Bartek Plotka - Improbable'da Altyapı Mühendisi. Yeni teknolojiler ve dağıtık sistemlerin sorunlarıyla ilgileniyor. Intel'de düşük düzeyde programlama deneyimi, Mesos'ta katılımcı deneyimi ve Improbable'da birinci sınıf SRE üretim deneyimi bulunmaktadır. Mikro hizmetler dünyasını geliştirmeye adanmıştır. Üç aşkı: Golang, açık kaynak ve voleybol.

Amiral gemisi ürünümüz SpatialOS'a baktığınızda, Improbable'ın onlarca Kubernetes kümesiyle son derece dinamik, küresel ölçekte bir bulut altyapısı gerektirdiğini tahmin edebilirsiniz. İzleme sistemini ilk kullananlardan biriyiz Prometheus. Prometheus, milyonlarca ölçümü gerçek zamanlı olarak takip etme kapasitesine sahiptir ve ihtiyacınız olan bilgiyi çıkarmanıza olanak tanıyan güçlü bir sorgulama diliyle birlikte gelir.

Prometheus'un sadeliği ve güvenilirliği ana avantajlarından biridir. Ancak belli bir ölçeği aştığımızda birçok olumsuzlukla karşılaştık. Bu sorunları çözmek için geliştirdiğimiz Thanos mevcut Prometheus kümelerini sınırsız geçmiş veri depolamaya sahip tek bir izleme sistemine sorunsuz bir şekilde dönüştürmek için Improbable tarafından oluşturulan açık kaynaklı bir projedir. Thanos Github'da mevcut burada.

Olasılıksızlık'tan en son haberleri takip edin.

Thanos ile hedeflerimiz

Belli bir ölçekte, vanilya Prometheus'un yeteneklerinin ötesinde sorunlar ortaya çıkıyor. Petabaytlarca geçmiş veriyi güvenilir ve ekonomik bir şekilde nasıl saklayabilirim? Yanıt süresinden ödün vermeden bu yapılabilir mi? Farklı Prometheus sunucularında bulunan tüm metriklere tek bir API isteği ile erişmek mümkün müdür? Prometheus HA kullanılarak toplanan çoğaltılmış verileri birleştirmenin herhangi bir yolu var mı?

Bu sorunları çözmek için Thanos'u yarattık. Aşağıdaki bölümlerde bu konulara nasıl yaklaştığımız anlatılıyor ve hedeflerimiz açıklanıyor.

Birden fazla Prometheus örneğinden veri sorgulama (genel sorgu)

Prometheus parçalamaya işlevsel bir yaklaşım sunuyor. Tek bir Prometheus sunucusu bile neredeyse tüm kullanım durumlarında kullanıcıları yatay parçalamanın karmaşıklığından kurtarmak için yeterli ölçeklenebilirlik sağlar.

Bu harika bir dağıtım modeli olsa da, genellikle farklı Prometheus sunucularındaki verilere tek bir API veya kullanıcı arayüzü (küresel bir görünüm) aracılığıyla erişmek gerekir. Elbette bir Grafana panelinde birden fazla sorgu görüntülemek mümkündür ancak her sorgu yalnızca bir Prometheus sunucusunda yürütülebilir. Öte yandan, Thanos ile hepsine tek bir uç noktadan erişilebildiği için birden fazla Prometheus sunucusundaki verileri sorgulayabilir ve toplayabilirsiniz.

Daha önce Olasılıksız'da küresel bir görünüm elde etmek için Prometheus örneklerimizi çok düzeyli olarak organize etmiştik. Hiyerarşik Federasyon. Bu, her yaprak sunucudan bazı ölçümleri toplayan bir Prometheus meta sunucusu oluşturmak anlamına geliyordu.

Thanos - Ölçeklenebilir Prometheus

Bu yaklaşımın sorunlu olduğu ortaya çıktı. Bu, daha karmaşık yapılandırmalara, ek bir potansiyel hata noktasının eklenmesine ve birleştirilmiş uç noktanın yalnızca ihtiyaç duyduğu verileri almasını sağlamak için karmaşık kuralların uygulanmasına yol açtı. Ayrıca bu tür bir birleştirme, tek bir API isteğinden tüm verilere ulaşılamadığı için gerçek bir küresel görünüm elde etmenize olanak vermez.

Yüksek kullanılabilirliğe sahip (HA) Prometheus sunucularında toplanan verilerin birleşik görünümü bununla yakından ilişkilidir. Prometheus'un HA modeli, verileri bağımsız olarak iki kez toplar; bu o kadar basittir ki bundan daha basit olamaz. Ancak, her iki akışın birleştirilmiş ve tekilleştirilmiş görünümünün kullanılması çok daha uygun olacaktır.

Elbette yüksek kullanılabilirliğe sahip Prometheus sunucularına da ihtiyaç var. Improbable'da, dakika dakika veri izlemeyi gerçekten ciddiye alıyoruz, ancak küme başına bir Prometheus örneğine sahip olmak tek bir başarısızlık noktasıdır. Herhangi bir yapılandırma hatası veya donanım arızası önemli verilerin kaybolmasına neden olabilir. Basit bir dağıtım bile ölçümlerin toplanmasında küçük kesintilere neden olabilir çünkü yeniden başlatmalar, kazıma aralığından önemli ölçüde daha uzun olabilir.

Geçmiş verilerin güvenilir şekilde saklanması

Ucuz, hızlı, uzun vadeli metrik depolama bizim hayalimizdir (çoğu Prometheus kullanıcısı tarafından paylaşılmaktadır). Olasılıksızlık'ta metrik saklama süresini dokuz gün olarak yapılandırmak zorunda kaldık (Prometheus 1.8 için). Bu, ne kadar geriye bakabileceğimize bariz sınırlar getiriyor.

Prometheus 2.0, zaman serisi sayısı artık sunucunun genel performansını etkilemediğinden bu konuda gelişme gösterdi (bkz. Prometheus 2 hakkındaki KubeCon açılış konuşması). Ancak Prometheus verileri yerel diskte saklar. Yüksek verimli veri sıkıştırma, yerel SSD kullanımını önemli ölçüde azaltabilse de sonuçta depolanabilecek geçmiş veri miktarında hala bir sınır vardır.

Ayrıca Olasılıksızlık olarak güvenilirliği, basitliği ve maliyeti önemsiyoruz. Büyük yerel disklerin çalıştırılması ve yedeklenmesi daha zordur. Daha pahalıdırlar ve daha fazla yedekleme aracı gerektirirler, bu da gereksiz karmaşıklığa neden olur.

Altörnekleme

Geçmiş verilerle çalışmaya başladığımızda, haftalarca, aylarca ve yıllarca süren verilerle çalışırken big-O'da sorguları giderek daha yavaş hale getiren temel zorluklar olduğunu fark ettik.

Bu sorunun standart çözümü şu olacaktır: altörnekleme (alt örnekleme) - sinyal örnekleme frekansının azaltılması. Alt örneklemeyle, daha geniş bir zaman aralığına "ölçeklendirebilir" ve aynı sayıda örneği koruyarak sorguların yanıt vermesini sağlayabiliriz.

Eski verilerin altörneklenmesi, herhangi bir uzun vadeli depolama çözümünün kaçınılmaz bir gereksinimidir ve vanilya Prometheus'un kapsamı dışındadır.

Ek hedefler

Thanos projesinin asıl hedeflerinden biri mevcut Prometheus kurulumlarıyla sorunsuz bir şekilde bütünleşmekti. İkinci hedef ise giriş engellerinin minimum düzeyde olduğu operasyon kolaylığıydı. Hem küçük hem de büyük kullanıcılar için her türlü bağımlılık kolayca karşılanmalıdır; bu aynı zamanda düşük bir temel maliyet anlamına da gelir.

Thanos mimarisi

Bir önceki bölümde hedeflerimizi sıraladıktan sonra gelin bunların üzerinde çalışalım ve Thanos'un bu sorunları nasıl çözdüğünü görelim.

Küresel görüş

Mevcut Prometheus örneklerine ek olarak genel bir görünüm elde etmek için tek bir istek giriş noktasını tüm sunuculara bağlamamız gerekir. Thanos bileşeninin yaptığı da tam olarak budur. motosiklet sepeti. Her Prometheus sunucusunun yanına dağıtılır ve proxy görevi görerek yerel Prometheus verilerini gRPC Store API aracılığıyla sunarak zaman serisi verilerinin etikete ve zaman aralığına göre alınmasına olanak tanır.

Diğer tarafta, standart Prometheus HTTP API aracılığıyla PromQL sorgularını yanıtlamaktan çok az fazlasını yapan, ölçeği genişletilebilen, durum bilgisi olmayan Querier bileşeni bulunur. Querier, Sidecar ve diğer Thanos bileşenleri aracılığıyla iletişim kurar dedikodu protokolü.

Thanos - Ölçeklenebilir Prometheus

  1. Sorgulayıcı, bir talep aldığında ilgili Mağaza API sunucusuna, yani Sepetlerimize bağlanır ve ilgili Prometheus sunucularından zaman serisi verilerini alır.
  2. Daha sonra yanıtları birleştirir ve bunlar üzerinde bir PromQL sorgusu yürütür. Querier, Prometheus HA sunucularından hem ayrık verileri hem de kopya verileri birleştirebilir.

Bu, bulmacamızın büyük bir parçasını çözüyor; yalıtılmış Prometheus sunucularından gelen verileri tek bir görünümde birleştiriyor. Aslında Thanos yalnızca bu özellik için kullanılabilir. Mevcut Prometheus sunucularında herhangi bir değişiklik yapılmasına gerek yoktur!

Sınırsız raf ömrü!

Ancak er ya da geç verileri Prometheus'un normal saklama süresinin ötesinde depolamak isteyeceğiz. Geçmiş verileri depolamak için nesne depolamayı seçtik. Herhangi bir bulutta ve şirket içi veri merkezlerinde yaygın olarak bulunur ve çok uygun maliyetlidir. Ek olarak, hemen hemen her türlü nesne depolaması, iyi bilinen S3 API aracılığıyla kullanılabilir.

Prometheus, verileri RAM'den diske yaklaşık iki saatte bir yazar. Saklanan veri bloğu, sabit bir süre boyunca tüm verileri içerir ve değiştirilemez. Bu çok kullanışlıdır çünkü Thanos Sidecar, Prometheus veri dizinine kolayca bakabilir ve yeni bloklar mevcut olduğunda bunları nesne depolama paketlerine yükleyebilir.

Thanos - Ölçeklenebilir Prometheus

Diske yazdıktan hemen sonra nesne deposuna yükleme yapmak aynı zamanda kazıyıcının (Prometheus ve Thanos Sidecar) basitliğini korumanıza da olanak tanır. Bu da desteği, maliyeti ve sistem tasarımını basitleştirir.

Gördüğünüz gibi veri yedekleme çok basittir. Peki nesne depolamadaki verileri sorgulamaya ne dersiniz?

Thanos Mağazası bileşeni, nesne depolama alanından veri almak için bir proxy görevi görür. Thanos Sidecar gibi dedikodu kümesine katılır ve Mağaza API'sini uygular. Bu şekilde, mevcut Sorgulayıcı onu bir Sepet gibi, başka bir zaman serisi veri kaynağı olarak ele alabilir; özel bir yapılandırmaya gerek yoktur.

Thanos - Ölçeklenebilir Prometheus

Zaman serisi veri blokları birkaç büyük dosyadan oluşur. Bunları isteğe bağlı olarak yüklemek oldukça verimsiz olacaktır ve bunları yerel olarak önbelleğe almak çok büyük miktarda bellek ve disk alanı gerektirecektir.

Bunun yerine Store Gateway, Prometheus depolama formatının nasıl işleneceğini biliyor. Akıllı sorgu zamanlayıcı ve blokların yalnızca gerekli dizin bölümlerini önbelleğe alma sayesinde, karmaşık sorguları nesne depolama dosyalarına yönelik minimum sayıda HTTP isteğine indirmek mümkündür. Bu şekilde, istek sayısını dört ila altı büyüklük sırası kadar azaltabilir ve yerel bir SSD'deki verilere yönelik isteklerden ayırt edilmesi genellikle zor olan yanıt sürelerine ulaşabilirsiniz.

Thanos - Ölçeklenebilir Prometheus

Yukarıdaki şemada gösterildiği gibi Thanos Querier, Prometheus depolama formatından yararlanarak ve ilgili verileri yan yana yerleştirerek nesne depolama verilerinin sorgu başına maliyetini önemli ölçüde azaltır. Bu yaklaşımı kullanarak, birçok tekli isteği minimum sayıda toplu işlemde birleştirebiliriz.

Sıkıştırma ve altörnekleme

Yeni bir zaman serisi veri bloğu nesne depolamaya başarılı bir şekilde yüklendikten sonra, bunu "tarihsel" veriler olarak ele alırız ve bu veriler, Mağaza Ağ Geçidi aracılığıyla hemen kullanılabilir.

Ancak bir süre sonra tek bir kaynaktan (Sidecar'lı Prometheus) gelen bloklar birikir ve artık tam indeksleme potansiyelini kullanmaz. Bu sorunu çözmek için Kompaktör adında başka bir bileşen ekledik. Prometheus'un yerel sıkıştırma motorunu nesne depolamadaki geçmiş verilere uygular ve basit bir periyodik toplu iş olarak çalıştırılabilir.

Thanos - Ölçeklenebilir Prometheus

Etkin sıkıştırma sayesinde depolamanın uzun süre sorgulanması veri boyutu açısından sorun teşkil etmez. Ancak bir milyar değeri paketinden çıkarıp bunları bir sorgu işlemcisi aracılığıyla çalıştırmanın potansiyel maliyeti, kaçınılmaz olarak sorgu yürütme süresinde dramatik bir artışa neden olacaktır. Öte yandan ekranda piksel başına yüzlerce veri noktası bulunduğundan, verileri tam çözünürlükte görselleştirmek bile imkansız hale geliyor. Bu nedenle, altörnekleme sadece mümkün olmakla kalmaz, aynı zamanda gözle görülür bir doğruluk kaybına da yol açmaz.

Thanos - Ölçeklenebilir Prometheus

Verileri alt örneklemek için Compactor, verileri sürekli olarak beş dakika ve bir saatlik çözünürlükte toplar. TSDB XOR sıkıştırması kullanılarak kodlanan her ham parça için, bir blok için minimum, maksimum veya toplam gibi farklı türde toplu veriler depolanır. Bu, Querier'ın belirli bir PromQL sorgusu için uygun olan bir toplamayı otomatik olarak seçmesine olanak tanır.

Kullanıcının azaltılmış hassasiyetteki verileri kullanması için özel bir konfigürasyona gerek yoktur. Kullanıcı yakınlaştırıp uzaklaştırdıkça Querier farklı çözünürlükler ve ham veriler arasında otomatik olarak geçiş yapar. İstenirse kullanıcı bunu doğrudan request içerisindeki “step” parametresi üzerinden kontrol edebilir.

Bir GB depolamanın maliyeti düşük olduğundan Thanos varsayılan olarak ham verileri, beş dakikalık ve bir saatlik çözünürlüklü verileri depolar. Orijinal verileri silmeye gerek yoktur.

Kayıt kuralları

Thanos'ta bile kayıt kuralları izleme yığınının önemli bir parçasıdır. Sorguların karmaşıklığını, gecikmesini ve maliyetini azaltırlar. Ayrıca kullanıcıların metriklere göre toplu veriler elde etmesi de uygundur. Thanos, vanilya Prometheus örneklerine dayalı olduğundan, kayıt kurallarının ve uyarı kurallarının mevcut bir Prometheus sunucusunda saklanması tamamen kabul edilebilir. Ancak bazı durumlarda bu yeterli olmayabilir:

  • Genel uyarı ve kural (örneğin, bir hizmet üç kümeden ikisinden fazlasında çalışmadığında verilen uyarı).
  • Yerel depolama alanı dışındaki veriler için kural.
  • Tüm kuralları ve uyarıları tek bir yerde saklama arzusu.

Thanos - Ölçeklenebilir Prometheus

Tüm bu durumlar için Thanos, Thanos Sorguları aracılığıyla kuralı ve uyarıyı hesaplayan Cetvel adı verilen ayrı bir bileşen içerir. Sorgu düğümü, iyi bilinen bir StoreAPI sağlayarak yeni hesaplanan ölçümlere erişebilir. Daha sonra bunlar da nesne deposunda depolanır ve Mağaza Ağ Geçidi aracılığıyla kullanıma sunulur.

Thanos'un Gücü

Thanos ihtiyaçlarınıza uyacak şekilde özelleştirilebilecek kadar esnektir. Bu özellikle Prometheus düzlüğünden göç ederken kullanışlıdır. Thanos bileşenleri hakkında öğrendiklerimizi kısa bir örnekle hızlıca özetleyelim. Vanilya Prometheus'unuzu "sınırsız ölçüm depolama" dünyasına nasıl taşıyacağınız aşağıda açıklanmıştır:

Thanos - Ölçeklenebilir Prometheus

  1. Thanos Sidecar'ı Prometheus sunucularınıza ekleyin (örneğin, Kubernetes bölmesindeki bir sepet konteyneri).
  2. Verileri görüntüleyebilmek için birden fazla Thanos Querier kopyası dağıtın. Bu aşamada Scraper ve Querier arasında dedikodu yapmak kolaydır. Bileşenlerin etkileşimini kontrol etmek için 'thanos_cluster_members' metriğini kullanın.

Yalnızca bu iki adım, potansiyel Prometheus HA kopyalarından küresel görünüm ve kesintisiz veri tekilleştirme sağlamak için yeterlidir! Kontrol panellerinizi Querier HTTP uç noktasına bağlamanız veya doğrudan Thanos kullanıcı arayüzünü kullanmanız yeterlidir.

Ancak ölçüm yedeklemesine ve uzun süreli depolamaya ihtiyacınız varsa üç adımı daha tamamlamanız gerekir:

  1. Bir AWS S3 veya GCS paketi oluşturun. Verileri bu paketlere kopyalamak için Sidecar'ı yapılandırın. Yerel veri depolama artık en aza indirilebilir.
  2. Store Gateway'i dağıtın ve mevcut dedikodu kümenize bağlayın. Artık yedeklenen verileri sorgulayabilirsiniz!
  3. Sıkıştırma ve alt örneklemeyi kullanarak uzun süre sorgu verimliliğini artırmak için Sıkıştırıcıyı dağıtın.

Daha fazlasını öğrenmek istiyorsanız, makalemize göz atmaktan çekinmeyin. kubernetes manifest örnekleri и başlamak!

Yalnızca beş adımda Prometheus'u küresel görünüme, sınırsız depolama süresine ve yüksek düzeyde ölçüm kullanılabilirliğine sahip güvenilir bir izleme sistemine dönüştürdük.

Çekme isteği: sana ihtiyacımız var!

Thanos En başından beri açık kaynaklı bir projeydi. Prometheus ile kusursuz entegrasyon ve Thanos'un yalnızca bir kısmını kullanma yeteneği, izleme sisteminizi zahmetsizce ölçeklendirmek için onu mükemmel bir seçim haline getiriyor.

GitHub Çekme İsteklerini ve Sorunlarını her zaman memnuniyetle karşılarız. Bu arada Github Sorunları veya Slack aracılığıyla bizimle iletişime geçmekten çekinmeyin. Olasılıksız-eng #thanosSorularınız veya geri bildirimleriniz varsa veya bunu kullanma deneyiminizi paylaşmak istiyorsanız! Improbable'da yaptıklarımızı beğendiyseniz bizimle iletişime geçmekten çekinmeyin - her zaman boş yerimiz var!

Kurs hakkında daha fazla bilgi edinin.

Kaynak: habr.com

Yorum ekle