Metrik saxlama: Graphite+Whisper-dən Graphite+ClickHouse-a necə keçdik

Hamıya salam! Onun içində Son məqalə Mikroservis arxitekturası üçün modul monitorinq sisteminin təşkili haqqında yazmışdım. Heç bir şey yerində dayanmır, layihəmiz daim böyüyür və saxlanan ölçülərin sayı da belədir. Yüksək yükləmə şəraitində Graphite+Whisper-dən Graphite+ClickHouse-a keçidi necə təşkil etdik, ondan gözləntilər və kəsik altında miqrasiyanın nəticələri haqqında oxuyun.

Metrik saxlama: Graphite+Whisper-dən Graphite+ClickHouse-a necə keçdik

Graphite+Whisper-də ölçülərin saxlanmasından Graphite+ClickHouse-a keçidi necə təşkil etdiyimizi söyləməzdən əvvəl belə bir qərarın verilməsinin səbəbləri və uzun müddət birlikdə yaşadığımız Whisper-in mənfi cəhətləri haqqında məlumat vermək istərdim.

Qrafit+Pıçıltı problemləri

1. Disk alt sistemində yüksək yük

Keçid zamanı bizə dəqiqədə təxminən 1.5 milyon metrik gəlirdi. Belə bir axınla serverlərdə diskdən istifadə ~30% təşkil edirdi. Ümumiyyətlə, bu, kifayət qədər məqbul idi - hər şey stabil işlədi, tez yazılmışdı, tez oxundu... İnkişaf qruplarından biri yeni funksiyanı təqdim edənə və bizə dəqiqədə 10 milyon metri göndərməyə başlayana qədər. Bu zaman disk alt sistemi gücləndi və biz 100% istifadə gördük. Problem tez bir zamanda həll edildi, lakin bir qalıq qaldı.

2. Təkrarlanma və ardıcıllığın olmaması

Çox güman ki, Graphite+Whisper-dan istifadə edən/istifadə edən hər kəs kimi, biz də xətaya dözümlülük yaratmaq üçün eyni ölçüləri bir neçə Graphite serverinə tökdük. Bununla bağlı heç bir xüsusi problem yox idi - serverlərdən birinin nədənsə qəzaya uğradığı ana qədər. Bəzən biz yıxılmış serveri kifayət qədər tez götürə bilirdik və karbon-c-relay keşindən ölçüləri ona yükləməyi bacarırdıq, lakin bəzən yox. Sonra ölçülərdə bir boşluq var idi, onu rsync ilə doldurduq. Prosedur kifayət qədər uzun idi. Yeganə qənaət lütfü, bunun çox nadir hallarda baş verməsi idi. Biz həmçinin vaxtaşırı təsadüfi ölçülər toplusunu götürdük və onları klasterin qonşu qovşaqlarında eyni tipli digərləri ilə müqayisə etdik. Təxminən 5% hallarda bir neçə dəyər fərqli idi, bu da bizi çox sevindirmədi.

3. Böyük iz

Biz Graphite-də təkcə infrastrukturu deyil, həm də biznes ölçülərini (və indi də Kubernetes-dən ölçüləri) yazdığımız üçün biz tez-tez belə bir vəziyyətlə qarşılaşırıq ki, metrikdə yalnız bir neçə dəyər var və .wsp faylı bütün saxlama nəzərə alınmaqla yaradılır. müddətdir və bizim üçün ~2MB olan əvvəlcədən ayrılmış yer tutur. Problem bir çox oxşar faylların zaman keçdikcə ortaya çıxması ilə daha da ağırlaşır və onlar üzərində hesabatlar qurarkən boş nöqtələri oxumaq çox vaxt və resurslar tələb edir.

Dərhal qeyd etmək istərdim ki, yuxarıda təsvir olunan problemlər müxtəlif üsullardan istifadə etməklə və müxtəlif dərəcədə effektivliklə həll edilə bilər, lakin nə qədər çox məlumat almağa başlasanız, bir o qədər də pisləşir.

Yuxarıda göstərilənlərin hamısına sahib olmaq (əvvəlkiləri nəzərə alaraq Məqalə), həmçinin alınan metriklərin sayında daimi artım, bütün ölçüləri 30 saniyəlik saxlama intervalına köçürmək istəyi. (lazım olduqda 10 saniyəyə qədər) biz Whisper-a perspektivli alternativ kimi Graphite+ClickHouse-u sınamaq qərarına gəldik.

Qrafit+ClickHouse. Gözləntilər

Yandex-dən olan oğlanların bir neçə görüşünü ziyarət edərək, oxudu Habré haqqında bir neçə məqalə, sənədləri nəzərdən keçirərək və Graphite altında ClickHouse-u bağlamaq üçün sağlam komponentlər tapdıqdan sonra hərəkətə keçməyə qərar verdik!

Mən aşağıdakıları almaq istərdim:

  • disk alt sisteminin istifadəsini 30%-dən 5%-ə qədər azaltmaq;
  • 1 TB-dən 100 GB-a qədər işğal edilmiş yerin miqdarını azaltmaq;
  • serverə dəqiqədə 100 milyon metrik qəbul edə bilmək;
  • verilənlərin təkrarlanması və nasazlığa qarşı dözümlülük;
  • bir il bu layihədə oturmayın və məqbul bir müddət ərzində keçid edin;
  • fasiləsiz keçid.

Olduqca iddialı, elə deyilmi?

Qrafit+ClickHouse. Komponentlər

Qrafit protokolu vasitəsilə məlumatları qəbul etmək və sonra onu ClickHouse-da qeyd etmək üçün seçdim karbon klikxanası (qolanq).

ClickHouse-un ən son buraxılışı, stabil versiya 1.1.54253, zaman sıralarının saxlanması üçün verilənlər bazası kimi seçilmişdir. Bununla işləyərkən problemlər var idi: loglara bir sıra səhvlər töküldü və onlarla nə edəcəyimiz tam aydın deyildi. ilə müzakirə olunur Roman Lomonosov (carbon-clickhouse, graphite-clickhouse və bir çoxlarının müəllifi) daha yaşlısı seçildi buraxılış 1.1.54236. Səhvlər yox oldu - hər şey bir bang ilə işləməyə başladı.

ClickHouse-dan məlumatları oxumaq üçün seçilmişdir qrafit-slickhouse (qolanq). Qrafit üçün API kimi - karbonapi (qolanq). ClickHouse cədvəllər arasında replikasiyanı təşkil etmək üçün istifadə edilmişdir Zookeeper. Marşrut göstəriciləri üçün sevgilimizi tərk etdik karbon-c-rele (C) (əvvəlki məqaləyə baxın).

Qrafit+ClickHouse. Cədvəl quruluşu

“qrafit” monitorinq cədvəlləri üçün yaratdığımız verilənlər bazasıdır.

“graphite.metrics” - ReplicatedReplacingMergeTree mühərriki ilə cədvəl (replikasiya edilmiş) MergeTree-nin dəyişdirilməsi). Bu cədvəl ölçülərin adlarını və onlara gedən yolları saxlayır.

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” - ReplicatedGraphiteMergeTree mühərriki ilə cədvəl (replikasiya edilmişdir GraphiteMergeTree). Bu cədvəl metrik dəyərləri saxlayır.

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” ReplicatedReplacingMergeTree mühərriki ilə şərti doldurulmuş cədvəldir. Bu cədvəl gün ərzində rast gəlinən bütün göstəricilərin adlarını qeyd edir. Onun yaradılmasının səbəbləri bölmədə təsvir edilmişdir "Problemlər" bu məqalənin sonunda.

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” - ReplicatedAggregatingMergeTree mühərriki (replikasiya edilmiş) ilə şərtə uyğun doldurulmuş cədvəl AggregatingMergeTree). Bu cədvəl 4 yuva səviyyəsinə bölünmüş daxil olan metriklərin sayını qeyd edir.

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

Qrafit+ClickHouse. Komponentlərin qarşılıqlı əlaqə diaqramı

Metrik saxlama: Graphite+Whisper-dən Graphite+ClickHouse-a necə keçdik

Qrafit+ClickHouse. Məlumat miqrasiyası

Bu layihədən gözləntilərimizdən xatırladığımız kimi, ClickHouse-a keçid fasiləsiz olmalıdır; buna görə də biz bütün monitorinq sistemimizi istifadəçilərimiz üçün mümkün qədər şəffaf şəkildə yeni yaddaşa keçirməli olduq.
Biz bunu belə etdik.

  • ClickHouse cədvəllərinin təkrarlanmasında iştirak edən serverlərdən birinin karbon klikxanasına əlavə ölçülər axını göndərmək üçün karbon-c-relayinə bir qayda əlavə edilmişdir.

  • Biz python-da kiçik bir skript yazdıq, o, fısıltı-dump kitabxanasından istifadə edərək yaddaşımızdakı bütün .wsp fayllarını oxudu və bu məlumatları 24 mövzuda yuxarıda təsvir olunan karbon klikxanasına göndərdi. Carbon-clickhouse-da qəbul edilən metrik dəyərlərin sayı 125 milyon/dəq-ə çatdı və ClickHouse hətta tər tökmədi.

  • Mövcud panellərdə istifadə olunan funksiyaları sazlamaq üçün Grafana-da ayrıca DataSource yaratdıq. İstifadə etdiyimiz funksiyaların siyahısını müəyyən etdik, lakin onlar carbonapi-də tətbiq edilmədi. Biz bu funksiyaları əlavə etdik və carbonapi müəlliflərinə PR göndərdik (onlara xüsusi təşəkkürlər).

  • Balanslaşdırıcı parametrlərində oxu yükünü dəyişdirmək üçün son nöqtələri qrafit-apidən (Graphite+Whisper üçün API interfeysi) carbonapi-yə dəyişdik.

Qrafit+ClickHouse. nəticələr

  • disk alt sistemindən istifadənin 30%-dən 1%-ə qədər azaldılması;

    Metrik saxlama: Graphite+Whisper-dən Graphite+ClickHouse-a necə keçdik

  • tutulan yerin həcmi 1 TB-dən 300 GB-a endirildi;
  • serverə dəqiqədə 125 milyon metrik qəbul etmək imkanımız var (miqrasiya zamanı zirvələr);
  • bütün ölçüləri otuz saniyəlik saxlama intervalına köçürdü;
  • alınan məlumatların təkrarlanması və nasazlığa dözümlülük;
  • fasiləsiz keçid;
  • Hər şeyi tamamlamaq üçün təxminən 7 həftə çəkdi.

Qrafit+ClickHouse. Problemlər

Bizim vəziyyətimizdə bəzi tələlər var idi. Bu, keçiddən sonra qarşılaşdığımız şeydir.

  1. ClickHouse həmişə konfiqurasiyaları tez oxumur; bəzən onu yenidən yükləmək lazımdır. Məsələn, ClickHouse konfiqurasiyasında zookeeper klasterinin təsviri halında, klik evi-server yenidən işə salınana qədər istifadə edilməmişdir.
  2. Böyük ClickHouse sorğuları keçmədi, buna görə də qrafit-klikxanada ClickHouse əlaqə xəttimiz belə görünür:
    url = "http://localhost:8123/?max_query_size=268435456&max_ast_elements=1000000"
  3. ClickHouse tez-tez stabil buraxılışların yeni versiyalarını buraxır; onlar sürprizlər ola bilər: ehtiyatlı olun.
  4. Kubernetlərdə dinamik olaraq yaradılmış konteynerlər qısa və təsadüfi ömür müddəti ilə çoxlu sayda ölçülər göndərir. Bu cür ölçülər üçün çoxlu nöqtələr yoxdur və yerlə bağlı heç bir problem yoxdur. Ancaq sorğular qurarkən, ClickHouse 'ölçmələr' cədvəlindən çoxlu sayda eyni ölçüləri götürür. 90% hallarda, pəncərədən kənarda (24 saat) onlar haqqında məlumat yoxdur. Lakin 'məlumat' cədvəlində bu məlumatı axtarmağa vaxt sərf olunur və nəticədə vaxt aşımı ilə nəticələnir. Bu problemi həll etmək üçün gün ərzində rast gəlinən metriklər haqqında məlumatla ayrıca bir görünüş saxlamağa başladıq. Beləliklə, dinamik şəkildə yaradılmış konteynerlər üçün hesabatlar (qrafiklər) qurarkən, biz bütün vaxt ərzində deyil, yalnız verilmiş bir pəncərədə rast gəlinən ölçüləri sorğulayırıq ki, bu da onlar üzrə hesabatların qurulmasını əhəmiyyətli dərəcədə sürətləndirdi. Yuxarıda təsvir edilən həll üçün topladım qrafit-klikxana (çəngəl), bura date_metrics cədvəli ilə işin həyata keçirilməsini əhatə edir.

Qrafit+ClickHouse. Teqlər

1.1.0 versiyası ilə Graphite rəsmi oldu dəstək etiketləri. Və biz qrafit+klikxana yığınında bu təşəbbüsü dəstəkləmək üçün nə və necə edəcəyimizi fəal şəkildə düşünürük.

Qrafit+ClickHouse. Anomaliya detektoru

Yuxarıda təsvir edilən infrastruktura əsasən, biz anomaliya detektorunun prototipini tətbiq etdik və o işləyir! Ancaq onun haqqında daha çox növbəti məqalədə.

Abunə olun, yuxarı oxu basın və xoşbəxt olun!

Mənbə: www.habr.com

Добавить комментарий