Thanos - Scalable Prometheus

Tarjamahan artikel ieu disiapkeun husus pikeun siswa tangtu "Praktik sareng alat DevOps".

Fabian Reinartz mangrupakeun pamekar software, Go fanatik, sarta solver masalah. Anjeunna ogé pangropéa Prometheus sareng ko-pangadeg instrumentasi Kubernetes SIG. Baheula, anjeunna insinyur produksi di SoundCloud sareng mingpin tim ngawaskeun di CoreOS. Ayeuna damel di Google.

Bartek Plotka - Insinyur Infrastruktur di Improbable. Anjeunna museurkeun téknologi anyar jeung masalah sistem disebarkeun. Anjeunna gaduh pangalaman program tingkat rendah di Intel, pangalaman kontributor di Mesos, sareng pangalaman produksi SRE kelas dunya di Improbable. Dedicated pikeun ngaronjatkeun dunya microservices. Tilu karesepna: Golang, open source sareng voli.

Ningali produk unggulan kami SpatialOS, anjeun tiasa nebak yén Improbable butuh infrastruktur awan skala global anu dinamis pisan sareng puluhan klaster Kubernetes. Kami salah sahiji anu pangheulana ngagunakeun sistem ngawaskeun Prometheus. Prometheus sanggup ngalacak jutaan métrik sacara real waktos sareng nganggo basa query anu kuat anu ngamungkinkeun anjeun nimba inpormasi anu anjeun peryogikeun.

Kesederhanaan sareng reliabilitas Prometheus mangrupikeun salah sahiji kaunggulan utami. Sanajan kitu, sakali kami geus kaliwat skala nu tangtu, urang encountered sababaraha drawbacks. Pikeun ngajawab masalah ieu kami geus dimekarkeun Thanos mangrupikeun proyék open source anu diciptakeun ku Improbable pikeun ngarobih klaster Prometheus anu tos aya kana sistem ngawaskeun tunggal sareng panyimpenan data sajarah anu henteu terbatas. Thanos sayogi dina Github di dieu.

Tetep nepi ka tanggal jeung beja panganyarna ti Improbable.

Tujuan kami sareng Thanos

Dina skala anu tangtu, masalah timbul anu di luar kamampuan vanili Prometheus. Kumaha reliably tur ékonomis nyimpen petabytes data sajarah? Naha ieu tiasa dilakukeun tanpa kompromi waktos réspon? Naha mungkin pikeun ngaksés sadaya métrik anu aya dina server Prometheus anu béda kalayan pamundut API tunggal? Naha aya cara pikeun ngagabungkeun data réplikasi anu dikumpulkeun nganggo Prometheus HA?

Pikeun ngatasi masalah ieu, kami nyiptakeun Thanos. Bagian di handap ieu ngajelaskeun kumaha urang ngadeukeutan masalah ieu sareng ngajelaskeun tujuan urang.

Querying data tina sababaraha instansi Prometheus (query global)

Prometheus nawiskeun pendekatan fungsional pikeun sharding. Malah hiji server Prometheus tunggal nyadiakeun scalability cukup jang ngosongkeun pamaké ti complexities of sharding horizontal di ampir kabéh kasus pamakéan.

Sanaos ieu mangrupikeun modél panyebaran anu saé, sering peryogi aksés data dina server Prometheus anu béda-béda ngalangkungan API atanapi UI tunggal - pandangan global. Tangtu, kasebut nyaéta dimungkinkeun pikeun nembongkeun sababaraha queries dina hiji panel Grafana, tapi unggal query ngan bisa dieksekusi dina hiji server Prometheus. Di sisi anu sanés, kalayan Thanos anjeun tiasa naroskeun sareng ngumpulkeun data tina sababaraha server Prometheus sabab sadayana tiasa diaksés tina hiji titik tungtung.

Saméméhna, pikeun meunangkeun pandangan global dina Improbable, urang ngatur instansi Prometheus urang kana multi-level. Féderasi hirarki. Ieu hartosna nyiptakeun hiji server meta Prometheus anu ngumpulkeun sababaraha métrik tina unggal server daun.

Thanos - Scalable Prometheus

Pendekatan ieu kabuktian masalah. Ieu nyababkeun konfigurasi anu langkung kompleks, tambihan titik poténsial tambahan pikeun gagal, sareng aplikasi aturan anu rumit pikeun mastikeun yén titik akhir federasi ngan ukur nampi data anu diperyogikeun. Sajaba ti éta, jenis ieu federasi teu ngidinan Anjeun pikeun meunangkeun pintonan global leres, saprak teu sakabeh data sadia tina hiji pamundut API.

Raket patalina jeung ieu pintonan hasil ngahijikeun Tatar data dikumpulkeun dina-kasadiaan tinggi (HA) server Prometheus. Modél HA Prometheus sacara mandiri ngumpulkeun data dua kali, anu saderhana pisan teu tiasa langkung saderhana. Nanging, nganggo tampilan gabungan sareng deduplicated tina duanana aliran bakal langkung merenah.

Tangtosna, peryogi pikeun server Prometheus anu sayogi pisan. Di Improbable, urang serius ngawas data menit-demi-menit, tapi gaduh hiji conto Prometheus per klaster mangrupikeun titik gagalna. Kasalahan konfigurasi atanapi kagagalan hardware tiasa nyababkeun leungitna data penting. Malah panyebaran saderhana tiasa nyababkeun gangguan leutik dina kempelan métrik sabab dibalikan deui tiasa langkung lami tibatan interval scraping.

Panyimpenan data sajarah anu dipercaya

Murah, gancang, neundeun métrik jangka panjang nyaéta impian urang (dibagikeun ku kalolobaan pangguna Prometheus). Dina Improbable, urang kapaksa ngonpigurasikeun periode ingetan métrik ka salapan poé (pikeun Prometheus 1.8). Ieu nambihan wates anu jelas pikeun sabaraha jauh urang tiasa ningali.

Prometheus 2.0 parantos ningkat dina hal ieu, sabab jumlah séri waktos henteu deui mangaruhan kinerja server sadayana (tingali. Keynote KubeCon ngeunaan Prometheus 2). Tapi, Prometheus nyimpen data dina disk lokal. Sanajan komprési data-efisiensi tinggi nyata bisa ngurangan pamakean SSD lokal, aya tungtungna masih wates pikeun jumlah data sajarah nu bisa disimpen.

Salaku tambahan, di Improbable kami paduli ngeunaan reliabilitas, kesederhanaan sareng biaya. Disk lokal anu ageung langkung hese dioperasikeun sareng dicadangkeun. Éta langkung mahal sareng peryogi langkung seueur alat cadangan, nyababkeun pajeulitna anu teu perlu.

Downsampling

Sakali kami ngamimitian gawé bareng data sajarah, urang sadar yén aya kasusah fundamental jeung badag-O nu nyieun queries laun tur laun sakumaha urang dianggo kalayan minggu, bulan, jeung taun data.

Solusi standar pikeun masalah ieu bakal downsampling (downsampling) - ngurangan frékuénsi sampling sinyal. Kalawan downsampling, urang bisa "skala handap" ka rentang waktu nu leuwih gede tur ngajaga jumlah sarua sampel, ngajaga queries responsif.

Downsampling data heubeul mangrupa sarat dilawan tina sagala solusi gudang jangka panjang sarta saluareun ruang lingkup vanili Prometheus.

Tujuan tambahan

Salah sahiji tujuan aslina tina proyék Thanos nyaéta pikeun ngahijikeun lancar sareng pamasangan Prometheus anu aya. Tujuan kadua nyaéta betah operasi sareng halangan minimal pikeun asup. Sakur katergantungan kedah gampang puas pikeun pangguna leutik sareng ageung, anu ogé hartosna biaya dasar anu rendah.

Arsitéktur Thanos

Saatos daptar tujuan urang dina bagian sateuacana, hayu urang jalankeunana sareng tingali kumaha Thanos ngarengsekeun masalah ieu.

Témbongkeun global

Pikeun kéngingkeun pandangan global di luhur instansi Prometheus anu tos aya, urang kedah ngaitkeun hiji titik éntri pamundut ka sadaya server. Ieu persis naon anu dilakukeun ku komponén Thanos. Sidecar. Hal ieu deployed gigireun unggal server Prometheus sarta meta salaku proxy a, ngalayanan data Prometheus lokal ngaliwatan gRPC Store API, sahingga data runtuyan waktu bisa dipulut ku tag na rentang waktu.

Di sisi séjén nyaéta skala-kaluar, komponén Querier stateless, nu ngalakukeun saeutik leuwih ti ngan ngajawab queries PromQL via standar Prometheus HTTP API. Querier, Sidecar sarta komponén Thanos séjén komunikasi via protokol gosip.

Thanos - Scalable Prometheus

  1. Querier, nalika nampi pamundut, nyambung ka server API Store anu saluyu, nyaéta, ka Sidecars kami sareng nampi data séri waktos tina server Prometheus anu saluyu.
  2. Sanggeus éta, éta ngagabungkeun réspon jeung executes hiji pamundut PromQL on aranjeunna. Querier bisa ngagabungkeun duanana data disjoint sarta duplikat data ti server Prometheus HA.

Ieu ngarengsekeun sapotong utama teka-teki kami - ngagabungkeun data tina server Prometheus terasing kana hiji tampilan. Nyatana, Thanos ngan ukur tiasa dianggo pikeun fitur ieu. Henteu aya parobahan anu kedah dilakukeun pikeun server Prometheus anu tos aya!

hirup rak Unlimited!

Tapi, engké atanapi engké urang bakal hoyong nyimpen data saluareun waktos ingetan Prometheus normal. Urang milih gudang objék pikeun nyimpen data sajarah. Éta lega sayogi dina méga naon waé ogé pusat data di tempat sareng hargana efektif pisan. Sajaba ti éta, ampir sagala gudang obyék sadia ngaliwatan S3 API well-dipikawanoh.

Prometheus nyerat data tina RAM ka disk kirang langkung unggal dua jam. Blok data anu disimpen ngandung sadaya data pikeun waktos anu tetep sareng teu tiasa dirobih. Hal ieu kacida merenah sabab Thanos Sidecar ngan saukur bisa nempo diréktori data Prometheus jeung, salaku blok anyar sadia, beban kana ember gudang objék.

Thanos - Scalable Prometheus

Ngamuat kana panyimpenan obyék langsung saatos nyerat kana disk ogé ngamungkinkeun anjeun pikeun ngajaga kesederhanaan scraper (Prometheus sareng Thanos Sidecar). Anu nyederhanakeun dukungan, biaya sareng desain sistem.

Sakumaha anjeun tiasa tingali, cadangan data saderhana pisan. Tapi kumaha upami querying data dina neundeun obyék?

Komponén Thanos Store tindakan minangka proxy pikeun meunangkeun data ti gudang objék. Kawas Thanos Sidecar, éta ilubiung dina klaster gosip sarta implements API Toko. Ku cara ieu, Querier anu aya tiasa ngarawat éta sapertos Sidecar, salaku sumber data séri waktos sanés - henteu aya konfigurasi khusus anu diperyogikeun.

Thanos - Scalable Prometheus

Blok data séri waktos diwangun ku sababaraha file ageung. Ngamuat aranjeunna dina paménta bakal rada teu episien, sareng cache aranjeunna sacara lokal ngabutuhkeun jumlah mémori sareng rohangan disk anu ageung.

Gantina, Store Gateway terang kumaha carana ngadamel format panyimpenan Prometheus. Hatur nuhun kana scheduler query pinter jeung cache ngan bagian indéks perlu blok, kasebut nyaéta dimungkinkeun pikeun ngurangan queries kompléks ka jumlah minimum requests HTTP pikeun file gudang objék. Ku cara kieu, anjeun bisa ngurangan jumlah requests ku opat nepi ka genep ordo gedena sarta ngahontal kali respon anu umumna hese ngabedakeun tina requests kana data dina SSD lokal.

Thanos - Scalable Prometheus

Ditémbongkeun saperti dina diagram di luhur, Thanos Querier nyata ngurangan biaya per pamundut data gudang obyék ku leveraging format gudang Prometheus sarta nempatkeun data patali samping ku samping. Ngagunakeun pendekatan ieu, urang bisa ngagabungkeun loba requests tunggal kana jumlah minimum operasi bulk.

Compaction na downsampling

Sakali blok anyar data runtuyan waktu geus hasil dimuat kana gudang obyék, urang ngubaran eta salaku "sajarah" data, nu langsung sadia ngaliwatan Store Gateway.

Nanging, saatos sababaraha waktos, blok tina hiji sumber (Prometheus sareng Sidecar) ngumpulkeun sareng henteu deui nganggo poténsi indéks pinuh. Pikeun ngajawab masalah ieu, urang ngawanohkeun komponén sejen disebut Compactor. Éta ngan saukur nerapkeun mesin compaction lokal Prometheus kana data sajarah dina panyimpenan obyék sareng tiasa dijalankeun salaku padamelan périodik saderhana.

Thanos - Scalable Prometheus

Hatur nuhun kana komprési efisien, querying gudang dina jangka waktu nu lila teu ngabalukarkeun masalah dina ukuran data. Nanging, biaya poténsial pikeun ngabongkar samilyar nilai sareng ngajalankeunana ngaliwatan prosésor query pasti bakal nyababkeun paningkatan dramatis dina waktos palaksanaan pamundut. Di sisi séjén, saprak aya ratusan titik data per piksel dina layar, janten teu mungkin mun malah visualize data dina resolusi pinuh. Ku kituna, downsampling teu ukur mungkin, tapi ogé moal ngakibatkeun leungitna noticeable tina akurasi.

Thanos - Scalable Prometheus

Pikeun downsample data, Compactor terus aggregates data dina resolusi lima menit jeung hiji jam. Pikeun unggal chunk atah disandikeun maké TSDB XOR komprési, tipena béda data agrégat disimpen, kayaning mnt, max atawa jumlah pikeun hiji blok. Hal ieu ngamungkinkeun Querier otomatis milih agrégat anu luyu pikeun pamundut PromQL dibikeun.

Taya konfigurasi husus diperlukeun pikeun pamaké ngagunakeun ngurangan data precision. Querier otomatis pindah antara resolusi béda jeung data atah nalika pamaké zum asup jeung kaluar. Upami hoyong, pamaké bisa ngadalikeun ieu langsung ngaliwatan parameter "hambalan" dina pamundut nu.

Kusabab biaya nyimpen hiji GB rendah, sacara standar Thanos nyimpen data atah, data résolusi lima menit sareng hiji jam. Henteu kedah ngahapus data asli.

Aturan rékaman

Malah sareng Thanos, aturan ngarékam mangrupikeun bagian penting tina tumpukan ngawaskeun. Aranjeunna ngirangan pajeulitna, latency, sareng biaya patarosan. Éta ogé merenah pikeun pamaké pikeun ménta data aggregated ku metrics. Thanos dumasar kana instansi vanili Prometheus, ku kituna sampurna ditarima pikeun nyimpen aturan rekaman jeung aturan alerting dina server Prometheus aya. Sanajan kitu, dina sababaraha kasus ieu bisa jadi teu cukup:

  • Waspada sareng aturan global (contona, waspada nalika jasa henteu tiasa dianggo dina langkung ti dua tina tilu klaster).
  • Aturan pikeun data di luar panyimpenan lokal.
  • Kahayang pikeun nyimpen sadaya aturan sareng panggeuing dina hiji tempat.

Thanos - Scalable Prometheus

Pikeun sadaya kasus ieu, Thanos kalebet komponén anu misah anu disebut Ruler, anu ngitung aturan sareng waspada via Thanos Query. Ku nyayogikeun StoreAPI anu terkenal, titik Query tiasa ngaksés métrik anu énggal-énggal diitung. Engké aranjeunna ogé disimpen dina gudang obyék sarta sadia ngaliwatan Store gateway.

Kakuatan Thanos

Thanos cukup fleksibel pikeun disaluyukeun pikeun nyocogkeun ka kabutuhan anjeun. Ieu hususna kapaké nalika migrasi ti Prometheus polos. Hayu urang gancang recap naon anu urang diajar ngeunaan komponén Thanos ku conto gancang. Ieu kumaha carana nyandak vanili Prometheus anjeun ka dunya "panyimpenan métrik anu henteu terbatas":

Thanos - Scalable Prometheus

  1. Tambahkeun Thanos Sidecar ka server Prometheus anjeun - contona, wadah sidecar dina pod Kubernetes.
  2. Nyebarkeun sababaraha réplika Thanos Querier pikeun tiasa ningali data. Dina tahap ieu, gampang pikeun nyetél gosip antara Scraper sareng Querier. Pikeun mariksa interaksi komponén, paké métrik 'thanos_cluster_members'.

Ngan dua léngkah ieu cukup pikeun nyayogikeun pandangan global sareng deduplikasi data anu mulus tina réplika Prometheus HA poténsial! Kantun sambungkeun dasbor anjeun ka titik akhir HTTP Querier atanapi nganggo UI Thanos langsung.

Nanging, upami anjeun peryogi cadangan métrik sareng panyimpenan jangka panjang, anjeun kedah ngalengkepan tilu léngkah deui:

  1. Jieun ember AWS S3 atanapi GCS. Konpigurasikeun Sidecar pikeun nyalin data kana ember ieu. Panyimpen data lokal ayeuna tiasa diminimalkeun.
  2. Nyebarkeun Store Gateway tur sambungkeun ka klaster gosip anjeun aya. Ayeuna anjeun tiasa naroskeun data anu dicadangkeun!
  3. Nyebarkeun Compactor pikeun ningkatkeun efisiensi query dina jangka waktu anu panjang nganggo compaction sareng downsampling.

Upami anjeun hoyong terang langkung seueur, ulah ragu pikeun ningali kami conto manifest kubernetes и ngamimitian!

Dina ngan ukur lima léngkah, kami ngajantenkeun Prometheus janten sistem ngawaskeun anu dipercaya sareng pandangan global, waktos panyimpen anu henteu terbatas sareng poténsi kasadiaan métrik anu luhur.

Tarik pamundut: urang peryogi anjeun!

Thanos geus mangrupa proyék open source ti pisan awal. Integrasi anu mulus sareng Prometheus sareng kamampuan ngagunakeun ngan sabagian Thanos ngajantenkeun pilihan anu saé pikeun skala sistem ngawaskeun anjeun kalayan gampang.

Kami salawasna ngabagéakeun Paménta Tarik GitHub sareng Masalah. Samentawis waktos, mangga ngahubungi kami liwat Masalah Github atanapi slack Improbable-eng #thanosupami anjeun gaduh patarosan atanapi eupan balik, atanapi hoyong bagikeun pangalaman anjeun nganggo éta! Upami anjeun resep naon anu kami lakukeun di Improbable, tong ragu ngahubungi kami - urang sok aya lowongan!

Diajar langkung seueur ngeunaan kursus.

sumber: www.habr.com

Tambahkeun komentar