Tarjamahan artikel ieu disiapkeun husus pikeun siswa tangtu
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
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
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.
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.
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 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.
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
- 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.
- 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.
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.
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.
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.
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.
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.
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":
- Tambahkeun Thanos Sidecar ka server Prometheus anjeun - contona, wadah sidecar dina pod Kubernetes.
- 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:
- Jieun ember AWS S3 atanapi GCS. Konpigurasikeun Sidecar pikeun nyalin data kana ember ieu. Panyimpen data lokal ayeuna tiasa diminimalkeun.
- Nyebarkeun Store Gateway tur sambungkeun ka klaster gosip anjeun aya. Ayeuna anjeun tiasa naroskeun data anu dicadangkeun!
- 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
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!
Kami salawasna ngabagéakeun Paménta Tarik GitHub sareng Masalah. Samentawis waktos, mangga ngahubungi kami liwat Masalah Github atanapi slack
sumber: www.habr.com