Panyimpen métrik: kumaha urang ngalih tina Graphite+Whisper ka Graphite+ClickHouse

Halo sadayana! Dina dirina tulisan panungtung Kuring nulis ngeunaan ngatur sistem monitoring modular pikeun arsitéktur microservice. Henteu aya anu nangtung, proyék kami terus-terusan ningkat, sareng ogé jumlah métrik anu disimpen. Kumaha urang ngatur transisi tina Graphite + Whisper to Graphite + ClickHouse dina kaayaan beban anu luhur, baca ngeunaan ekspektasi tina éta sareng hasil migrasi dina kaayaan anu dipotong.

Panyimpen métrik: kumaha urang ngalih tina Graphite+Whisper ka Graphite+ClickHouse

Sateuacan kuring nyarioskeun ka anjeun kumaha urang ngatur transisi tina nyimpen métrik dina Graphite + Whisper to Graphite + ClickHouse, Abdi hoyong masihan inpormasi ngeunaan alesan pikeun nyandak kaputusan sapertos kitu sareng ngeunaan kalemahan Whisper anu kami hirup salami lami.

Masalah grafit + bisikan

1. Beban tinggi dina subsistem disk

Dina waktos transisi, sakitar 1.5 juta métrik anu dugi ka kami per menit. Kalayan aliran sapertos kitu, panggunaan disk dina server nyaéta ~ 30%. Sacara umum, ieu rada bisa ditarima - sagalana digawé stably, ieu ditulis gancang, maca gancang ... Nepi ka salah sahiji tim ngembangkeun digulung kaluar fitur anyar sarta mimiti ngirim kami 10 juta metrics per menit. Éta nalika subsistem disk tightened up, sarta kami nempo 100% utilization. Masalah ieu gancang direngsekeun, tapi résidu a tetep.

2. Kurangna réplikasi jeung konsistensi

Paling dipikaresep, kawas dulur anu ngagunakeun / dipaké Graphite + Whisper, urang tuang aliran sarua metrics kana sababaraha server Graphite sakaligus dina urutan nyieun toleransi sesar. Sareng teu aya masalah khusus sareng ieu - dugi ka momen nalika salah sahiji server nabrak pikeun sababaraha alesan. Kadang-kadang urang junun nyokot server fallen cukup gancang, sarta karbon-c-relay junun beban metrics tina cache na kana eta, tapi kadang henteu. Lajeng aya liang dina metrics, nu urang ngeusi rsync. Prosedur ieu rada lila. Hiji-hijina rahmat nyalametkeun éta ieu kajadian pisan jarang. Kami ogé périodik nyandak sakumpulan métrik acak sareng dibandingkeun sareng anu sanés tina jinis anu sami dina titik tatangga kluster. Dina sakitar 5% kasus, sababaraha nilai béda, anu kami henteu resep pisan.

3. Tapak badag

Kusabab urang nulis dina Grafit teu ukur infrastruktur, tapi ogé metrics bisnis (jeung ayeuna ogé metrics ti Kubernetes), urang rada mindeng meunang kaayaan nu métrik ngandung ukur sababaraha nilai, sarta file .wsp dijieun nyokot kana akun sagala ingetan. jaman, sarta nyokot up jumlah pre-dialokasikeun spasi, nu keur urang éta ~ 2MB. Masalahna langkung parah ku kanyataan yén seueur file anu sami muncul dina waktosna, sareng nalika ngawangun laporan éta, maca titik kosong butuh seueur waktos sareng sumber.

Abdi hoyong langsung dicatet yén masalah ditétélakeun di luhur bisa diurus ngagunakeun rupa-rupa métode jeung tingkat varying of efektivitas, tapi beuki data anjeun ngawitan nampi, beuki aranjeunna worsen.

Ngabogaan sagala di luhur (nyandak akun saméméhna tulisan), kitu ogé kanaékan konstan dina jumlah metrics narima, kahayang pikeun mindahkeun sakabéh métrik ka interval gudang 30 detik. (nepi ka 10 detik lamun perlu), urang mutuskeun pikeun nyobaan Graphite+ClickHouse salaku alternatif ngajangjikeun pikeun Whisper.

Grafit + ClickHouse. Harepan

Nganjang ka sababaraha patepang lalaki ti Yandex, saatos maca sababaraha artikel ngeunaan Habré, Sanggeus ngaliwatan dokuméntasi jeung kapanggih komponén waras pikeun ngariung ClickHouse handapeun grafit, urang mutuskeun nyandak Peta!

Abdi hoyong nampi ieu:

  • ngurangan utilization subsistem disk ti 30% ka 5%;
  • ngurangan jumlah spasi nempatan ti 1TB ka 100GB;
  • tiasa nampi 100 juta métrik per menit kana server;
  • réplikasi data jeung kasabaran kasalahan out of the box;
  • entong linggih dina proyék ieu salami sataun sareng ngadamel transisi dina jangka waktu anu lumrah;
  • switch tanpa downtime.

Rada ambisius, bener?

Grafit + ClickHouse. Komponén

Pikeun nampa data via protokol grafit sarta salajengna ngarekam eta di ClickHouse, abdi dipilih karbon-clickhouse (golang).

Pelepasan panganyarna tina ClickHouse, versi stabil 1.1.54253, dipilih salaku database pikeun nyimpen runtuyan waktu. Aya masalah nalika damel sareng éta: gunung kasalahan dituang kana log, sareng éta henteu écés naon anu kudu dilakukeun sareng aranjeunna. Dina sawala jeung Roman Lomonosov (panulis carbon-clickhouse, grafit-clickhouse sareng seueur deui) anu langkung lami dipilih ngabebaskeun 1.1.54236. Kasalahan ngaleungit - sadayana mimiti damel sareng bang.

Dipilih pikeun maca data tina ClickHouse grafit-сlickhouse (golang). Salaku API pikeun Grafit − carbonapi (golang). ClickHouse ieu dipaké pikeun ngatur réplikasi antara tabel tukang lalajo. Pikeun métrik routing, urang tinggalkeun anu dipikacinta karbon-c-relay (C) (tingali artikel saméméhna).

Grafit + ClickHouse. Struktur méja

"grafit" nyaéta database urang dijieun pikeun tabel monitoring.

"graphite.metrics" - méja kalayan mesin ReplicatedReplacingMergeTree (replika NgagantiMergeTree). Tabel ieu nyimpen nami métrik sareng jalur ka aranjeunna.

CREATE TABLE graphite.metrics ( Date Date, Level UInt32, Path String, Deleted UInt8, Version UInt32 ) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.metrics', ‘r1’, Date, (Level, Path), 8192, Version);

"graphite.data" - tabel sareng mesin ReplicatedGraphiteMergeTree (replika GraphiteMergeTree). tabél ieu nyimpen nilai métrik.

CREATE TABLE graphite.data ( Path String, Value Float64, Time UInt32, Date Date, Timestamp UInt32 ) ENGINE = ReplicatedGraphiteMergeTree('/clickhouse/tables/replicator/graphite.data', 'r1', Date, (Path, Time), 8192, 'graphite_rollup')

"graphite.date_metrics" mangrupakeun tabel conditionally dieusian ku mesin ReplicatedReplacingMergeTree. Tabél ieu ngarékam nami sadaya métrik anu dipendakan salami siang. Alesan pikeun nyiptakeunana dijelaskeun dina bagian "Masalah" di ahir artikel ieu.

CREATE MATERIALIZED VIEW graphite.date_metrics ( Path String,  Level UInt32,  Date Date) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/replicator/graphite.date_metrics', 'r1', Date, (Level, Path, Date), 8192) AS SELECT toUInt32(length(splitByChar('.', Path))) AS Level, Date, Path FROM graphite.data

"graphite.data_stat" - méja dieusian nurutkeun kaayaan, kalawan mesin ReplicatedAggregatingMergeTree (replicated AggregatingMergeTree). Tabél ieu ngarékam jumlah métrik anu asup, direcah jadi 4 tingkat nyarang.

CREATE MATERIALIZED VIEW graphite.data_stat ( Date Date,  Prefix String,  Timestamp UInt32,  Count AggregateFunction(count)) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/replicator/graphite.data_stat', 'r1', Date, (Timestamp, Prefix), 8192) AS SELECT toStartOfMonth(now()) AS Date, replaceRegexpOne(Path, '^([^.]+.[^.]+.[^.]+).*$', '1') AS Prefix, toUInt32(toStartOfMinute(toDateTime(Timestamp))) AS Timestamp, countState() AS Count FROM graphite.data  GROUP BY Timestamp, Prefix

Grafit + ClickHouse. Diagram interaksi komponén

Panyimpen métrik: kumaha urang ngalih tina Graphite+Whisper ka Graphite+ClickHouse

Grafit + ClickHouse. Migrasi data

Salaku urang apal ti ekspektasi tina proyék ieu, transisi ka ClickHouse kedah tanpa downtimes; sasuai, urang kudu kumaha bae pindah sakabéh sistem ngawaskeun kami ka gudang anyar salaku transparan-gancang pikeun pamaké urang.
Ieu kumaha urang ngalakukeun eta.

  • Hiji aturan geus ditambahkeun kana karbon-c-relay pikeun ngirim hiji aliran tambahan tina metrics ka karbon-clickhouse tina salah sahiji server milu dina réplikasi tabel ClickHouse.

  • Urang nulis Aksara leutik di python, nu, ngagunakeun perpustakaan harewos-dump, maca sagala file .wsp ti gudang urang jeung dikirim data ieu ka karbon-clickhouse luhur-dijelaskeun dina 24 threads. Jumlah nilai métrik katampa dina carbon-clickhouse ngahontal 125 juta / mnt, sarta ClickHouse malah teu megatkeun kesang a.

  • Kami nyiptakeun DataSource anu misah di Grafana pikeun debug fungsi anu dianggo dina dasbor anu tos aya. Kami ngaidentipikasi daptar fungsi anu kami dianggo, tapi henteu dilaksanakeun dina carbonapi. Kami nambihan fungsi ieu sareng ngirim PR ka pangarang carbonapi (hatur nuhun khusus pikeun aranjeunna).

  • Pikeun ngalihkeun beban bacaan dina setélan pangimbang, kami ngarobih titik tungtung tina grafit-api (antarmuka API pikeun Graphite + Whisper) kana carbonapi.

Grafit + ClickHouse. hasilna

  • ngurangan utilization subsistem disk ti 30% ka 1%;

    Panyimpen métrik: kumaha urang ngalih tina Graphite+Whisper ka Graphite+ClickHouse

  • ngurangan jumlah spasi nempatan ti 1 TB ka 300 GB;
  • urang miboga kamampuh pikeun nampa 125 juta metrics per menit kana server (puncak dina waktu migrasi);
  • mindahkeun sadaya métrik kana interval neundeun tilu puluh detik;
  • nampi réplikasi data sareng kasabaran kasalahan;
  • switched tanpa downtime;
  • Butuh kira-kira 7 minggu pikeun ngarengsekeun sadayana.

Grafit + ClickHouse. Masalah

Dina kasus urang, aya sababaraha pitfalls. Ieu naon urang encountered sanggeus transisi.

  1. ClickHouse teu salawasna reread configs on laleur; kadang perlu rebooted. Contona, dina kasus pedaran kluster zookeeper dina ClickHouse config, teu dipaké nepi ka clickhouse-server ieu rebooted.
  2. Paménta ClickHouse ageung henteu ngaliwat, janten dina grafit-clickhouse string sambungan ClickHouse kami sapertos kieu:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse sering ngaluarkeun versi énggal tina sékrési stabil; aranjeunna tiasa ngandung kejutan: ati-ati.
  4. Wadah anu didamel sacara dinamis dina kubernetes ngirimkeun sajumlah métrik anu umurna pondok sareng acak. Henteu seueur titik pikeun métrik sapertos kitu, sareng teu aya masalah sareng rohangan. Tapi nalika ngawangun queries, ClickHouse nyokot sajumlah badag ieu metrics sarua tina tabel 'metrics'. Dina 90% kasus, teu aya data dina aranjeunna saluareun jandela (24 jam). Tapi waktosna diséépkeun milarian data ieu dina tabel 'data', sareng tungtungna parantos waktosna. Pikeun ngabéréskeun masalah ieu, urang mimiti ngajaga pandangan anu misah sareng inpormasi ngeunaan métrik anu dipanggihan dina sapoe. Ku kituna, nalika ngawangun laporan (grafik) pikeun wadahna dinamis dijieun, urang query ngan maranéhanana metrics nu encountered dina jandela tinangtu, sarta henteu pikeun sakabéh waktu, nu nyata nyepetkeun pangwangunan laporan on aranjeunna. Pikeun solusi anu dijelaskeun di luhur, kuring dikumpulkeun grafit-clickhouse (garpu), nu ngawengku palaksanaan gawé bareng tabel date_metrics.

Grafit + ClickHouse. Tag

Kalayan versi 1.1.0 Graphite janten resmi tag rojongan. Sarta kami aktip mikir ngeunaan naon jeung kumaha ngalakukeun pikeun ngarojong prakarsa ieu dina tumpukan grafit + clickhouse.

Grafit + ClickHouse. detektor anomali

Dumasar kana infrastruktur ditétélakeun di luhur, kami geus dilaksanakeun prototipe hiji detektor anomali, sarta gawéna! Tapi langkung seueur ngeunaan anjeunna dina tulisan salajengna.

Ngalanggan, pencét panah ka luhur sareng bagja!

sumber: www.habr.com

Tambahkeun komentar