Thanos - масштабталатын Прометей

Мақаланың аудармасы курс студенттері үшін арнайы дайындалған «DevOps тәжірибелері мен құралдары».

Фабиан Рейнарц бағдарламалық жасақтаманы әзірлеуші, Go фанаты және мәселені шешуші. Ол сондай-ақ Prometheus техникалық қызметшісі және Kubernetes SIG аспаптарының негізін қалаушы болып табылады. Бұрын ол SoundCloud-та өндіріс инженері болған және CoreOS-те мониторинг тобын басқарған. Қазіргі уақытта Google-да жұмыс істейді.

Бартек Плотка - Improbable компаниясының инфрақұрылым инженері. Оны жаңа технологиялар мен бөлінген жүйелердің мәселелері қызықтырады. Оның Intel-де төмен деңгейлі бағдарламалау тәжірибесі, Mesos-та үлес қосушы тәжірибесі және Improbable-де әлемдік деңгейдегі SRE өндірісі тәжірибесі бар. Микросервис әлемін жақсартуға арналған. Оның үш сүйіспеншілігі: Голанг, ашық код және волейбол.

SpatialOS флагмандық өніміне қарап, сіз «Мүмкін емес» ондаған Kubernetes кластерлері бар жоғары динамикалық, жаһандық ауқымды бұлттық инфрақұрылымды қажет ететінін болжауға болады. Мониторинг жүйесін алғашқылардың бірі болып қолдандық Прометей. Prometheus миллиондаған көрсеткіштерді нақты уақыт режимінде бақылай алады және сізге қажетті ақпаратты шығаруға мүмкіндік беретін қуатты сұрау тілімен бірге келеді.

Прометейдің қарапайымдылығы мен сенімділігі оның басты артықшылықтарының бірі болып табылады. Алайда, біз белгілі бір масштабтан өткеннен кейін бірнеше кемшіліктерге тап болдық. Осы мәселелерді шешу үшін біз әзірледік Thanos бар Prometheus кластерлерін шексіз тарихи деректерді сақтау мүмкіндігі бар бір бақылау жүйесіне үздіксіз түрлендіру үшін Improbable жасаған ашық бастапқы жоба. Thanos Github сайтында қолжетімді осында.

Improbable соңғы жаңалықтарынан хабардар болыңыз.

Thanos-пен біздің мақсаттарымыз

Белгілі бір ауқымда ваниль Прометейдің мүмкіндіктерінен тыс мәселелер туындайды. Петабайттарды тарихи деректерді қалай сенімді және үнемді сақтауға болады? Мұны жауап беру уақытын бұзбай жасауға болады ма? Бір API сұрауымен әртүрлі Prometheus серверлерінде орналасқан барлық көрсеткіштерге қол жеткізу мүмкін бе? Prometheus HA көмегімен жиналған қайталанатын деректерді біріктірудің қандай да бір жолы бар ма?

Осы мәселелерді шешу үшін біз Thanos құрдық. Келесі бөлімдер осы мәселелерге қалай жақындағанымызды сипаттайды және мақсаттарымызды түсіндіреді.

Бірнеше Prometheus даналарынан деректерді сұрау (жаһандық сұрау)

Prometheus sharding үшін функционалды тәсілді ұсынады. Тіпті жалғыз Prometheus сервері барлық дерлік пайдалану жағдайларында пайдаланушыларды көлденең бөлудің күрделілігінен босату үшін жеткілікті ауқымдылықты қамтамасыз етеді.

Бұл қолданудың тамаша үлгісі болғанымен, әртүрлі Prometheus серверлеріндегі деректерге бір API немесе UI – ғаламдық көрініс арқылы қол жеткізу қажет. Әрине, бір Grafana панелінде бірнеше сұрауларды көрсетуге болады, бірақ әрбір сұрауды тек бір Prometheus серверінде орындауға болады. Екінші жағынан, Thanos көмегімен бірнеше Prometheus серверлерінен деректерді сұрауға және біріктіруге болады, өйткені олардың барлығына бір соңғы нүктеден қол жеткізуге болады.

Бұрын «Мүмкін емес» бағдарламасында жаһандық көрініс алу үшін біз Prometheus даналарын көп деңгейлі етіп ұйымдастырдық. Иерархиялық федерация. Бұл әрбір жапырақ серверінен кейбір көрсеткіштерді жинайтын бір Prometheus мета серверін жасауды білдіреді.

Thanos - масштабталатын Прометей

Бұл тәсіл проблемалы болып шықты. Бұл күрделі конфигурацияларға, қосымша ықтимал сәтсіздік нүктесін қосуға және біріктірілген соңғы нүкте тек өзіне қажет деректерді алатынына көз жеткізу үшін күрделі ережелерді қолдануға әкелді. Бұған қоса, федерацияның бұл түрі шынайы жаһандық көріністі алуға мүмкіндік бермейді, өйткені барлық деректер бір API сұрауынан қол жетімді емес.

Бұған қол жетімділігі жоғары (HA) Prometheus серверлерінде жиналған деректердің бірыңғай көрінісі тығыз байланысты. Прометейдің HA моделі деректерді екі рет дербес жинайды, бұл соншалықты қарапайым, одан оңай болуы мүмкін емес. Дегенмен, екі ағынның біріктірілген және қайталанбаған көрінісін пайдалану әлдеқайда ыңғайлы болар еді.

Әрине, жоғары қолжетімді Prometheus серверлері қажет. Improbable бағдарламасында біз минут сайын деректерді бақылауға шындап қараймыз, бірақ кластерге бір Prometheus данасы болуы бір сәтсіздік нүктесі болып табылады. Кез келген конфигурация қатесі немесе аппараттық құралдың ақаулығы маңызды деректердің жоғалуына әкелуі мүмкін. Тіпті қарапайым орналастыру метрика жинағында аздаған үзілістерді тудыруы мүмкін, себебі қайта іске қосу сызу аралығынан айтарлықтай ұзағырақ болуы мүмкін.

Тарихи деректерді сенімді сақтау

Арзан, жылдам, ұзақ мерзімді көрсеткіштерді сақтау - бұл біздің арманымыз (Прометей пайдаланушыларының көпшілігі ортақ). «Мүмкін емес» бағдарламасында біз метриканы сақтау мерзімін тоғыз күнге теңшеуге мәжбүр болдық (Prometheus 1.8 үшін). Бұл біздің қаншалықты артқа қарай алатынымызға айқын шектеулер қосады.

Prometheus 2.0 осыған байланысты жақсарды, өйткені уақыт қатарларының саны сервердің жалпы өнімділігіне әсер етпейді (қараңыз. Prometheus 2 туралы KubeCon негізгі баяндамасы). Дегенмен, Prometheus деректерді жергілікті дискіде сақтайды. Жоғары тиімді деректерді қысу жергілікті SSD пайдалануды айтарлықтай азайтуы мүмкін болса да, сайып келгенде, сақтауға болатын тарихи деректер көлеміне әлі де шектеу бар.

Бұған қоса, Improbable компаниясында біз сенімділік, қарапайымдылық және бағаға мән береміз. Үлкен жергілікті дискілерді басқару және сақтық көшірме жасау қиынырақ. Олар қымбатқа түседі және қосымша сақтық көшірме құралдарын қажет етеді, бұл қажетсіз күрделілікке әкеледі.

Төмен үлгілеу

Тарихи деректермен жұмыс істей бастағанда, біз апталар, айлар және жылдар деректерімен жұмыс істегенде сұрауларды баяу және баяу ететін big-O-да негізгі қиындықтар бар екенін түсіндік.

Бұл мәселенің стандартты шешімі болар еді кішірейту (төмен таңдау) – сигналды таңдау жиілігін азайту. Төмен іріктеу арқылы біз үлкенірек уақыт диапазонына дейін «кішірейте» аламыз және сұрауларға жауап бере отырып, үлгілердің бірдей санын сақтай аламыз.

Ескі деректерді кішірейту кез келген ұзақ мерзімді сақтау шешімдерінің сөзсіз талабы болып табылады және ваниль Прометейінің ауқымынан тыс.

Қосымша мақсаттар

Thanos жобасының бастапқы мақсаттарының бірі кез келген бар Prometheus қондырғыларымен үздіксіз интеграциялау болды. Екінші мақсат кіруге минималды кедергілермен жұмыс істеудің қарапайымдылығы болды. Кез келген тәуелділік шағын және үлкен пайдаланушылар үшін оңай қанағаттандырылуы керек, бұл сонымен қатар төмен базалық шығындарды білдіреді.

Танос архитектурасы

Алдыңғы бөлімде мақсаттарымызды атап өткеннен кейін, олар арқылы жұмыс істеп, Thanos бұл мәселелерді қалай шешетінін көрейік.

Жаһандық көрініс

Бар Prometheus даналарының үстінен жаһандық көріністі алу үшін бізге бір сұрау енгізу нүктесін барлық серверлерге байланыстыру керек. Thanos компоненті дәл осылай жасайды. Sidecar. Ол әрбір Prometheus серверінің жанында орналастырылған және уақыт сериясының деректерін тег және уақыт ауқымы арқылы шығарып алуға мүмкіндік беретін gRPC Store API арқылы жергілікті Prometheus деректеріне қызмет көрсететін прокси ретінде әрекет етеді.

Екінші жағынан - стандартты Prometheus HTTP API арқылы PromQL сұрауларына жауап берумен шектелмейтін кеңейтілген, азаматтығы жоқ Querier компоненті. Querier, Sidecar және басқа Thanos компоненттері арқылы байланысады өсек протоколы.

Thanos - масштабталатын Прометей

  1. Querier сұрауды алғаннан кейін сәйкес Store API серверіне, яғни біздің Sidecars-ға қосылады және сәйкес Prometheus серверлерінен уақыттық қатарлар деректерін алады.
  2. Осыдан кейін ол жауаптарды біріктіреді және олар бойынша PromQL сұрауын орындайды. Querier Prometheus HA серверлерінен бөлінген деректерді де, қайталанатын деректерді де біріктіре алады.

Бұл біздің басқатырғыштың негізгі бөлігін шешеді - оқшауланған Prometheus серверлеріндегі деректерді бір көрініске біріктіру. Шындығында, Thanos тек осы функция үшін пайдаланылуы мүмкін. Қолданыстағы Prometheus серверлеріне өзгертулер енгізудің қажеті жоқ!

Сақтау мерзімі шексіз!

Дегенмен, ерте ме, кеш пе, біз деректерді қалыпты Prometheus сақтау уақытынан тыс сақтағымыз келеді. Тарихи деректерді сақтау үшін нысанды сақтауды таңдадық. Ол кез келген бұлтта, сондай-ақ жергілікті деректер орталықтарында кеңінен қол жетімді және өте тиімді. Сонымен қатар, кез келген дерлік нысанды сақтау белгілі S3 API арқылы қол жетімді.

Прометей деректерді жедел жадтан дискіге шамамен екі сағат сайын жазады. Сақталған деректер блогы белгілі бір уақыт кезеңі үшін барлық деректерді қамтиды және өзгермейді. Бұл өте ыңғайлы, себебі Thanos Sidecar жай ғана Prometheus деректер каталогын қарап, жаңа блоктар қол жетімді болған сайын оларды объектіні сақтау шелектеріне жүктей алады.

Thanos - масштабталатын Прометей

Дискіге жазғаннан кейін бірден нысан қоймасына жүктеу қырғыштың (Prometheus және Thanos Sidecar) қарапайымдылығын сақтауға мүмкіндік береді. Бұл қолдауды, шығындарды және жүйе дизайнын жеңілдетеді.

Көріп отырғаныңыздай, деректердің сақтық көшірмесін жасау өте қарапайым. Бірақ нысанды сақтаудағы деректерді сұрау туралы не деуге болады?

Thanos Store құрамдас бөлігі деректерді сақтау объектісінен алу үшін прокси ретінде әрекет етеді. Thanos Sidecar сияқты, ол өсек кластеріне қатысады және Store API іске асырады. Осылайша, бар Querier оны Sidecar сияқты уақыттық қатар деректерінің басқа көзі ретінде қарастыра алады - арнайы конфигурация қажет емес.

Thanos - масштабталатын Прометей

Уақыт қатарларының деректер блоктары бірнеше үлкен файлдардан тұрады. Оларды сұраныс бойынша жүктеу өте тиімсіз болады және оларды жергілікті түрде кэштеу үлкен көлемдегі жад пен дискілік кеңістікті қажет етеді.

Оның орнына Store Gateway Prometheus сақтау пішімін қалай өңдеу керектігін біледі. Смарт сұрауларды жоспарлаушы және блоктардың тек қажетті индекс бөліктерін кэштеу арқасында күрделі сұрауларды нысанды сақтау файлдарына HTTP сұрауларының ең аз санына дейін азайтуға болады. Осылайша, сұраулар санын төрт-алты ретке азайтып, жергілікті SSD-дегі деректерге сұраулардан ажырату әдетте қиын жауап беру уақытына қол жеткізуге болады.

Thanos - масштабталатын Прометей

Жоғарыдағы диаграммада көрсетілгендей, Thanos Querier Prometheus сақтау пішімін пайдалану және қатысты деректерді қатар орналастыру арқылы нысанды сақтау деректерінің сұранысының құнын айтарлықтай төмендетеді. Бұл тәсілді пайдалана отырып, біз көптеген жалғыз сұрауларды ең аз көлемді операциялар санына біріктіре аламыз.

Тығыздау және кішірейту

Уақыт сериялары деректерінің жаңа блогы нысан жадына сәтті жүктелгеннен кейін, біз оны Дүкен шлюзі арқылы дереу қол жетімді «тарихи» деректер ретінде қарастырамыз.

Дегенмен, біраз уақыттан кейін бір көзден блоктар (Прометейдің Sidecar бар) жинақталады және енді толық индекстеу әлеуетін пайдаланбайды. Бұл мәселені шешу үшін біз Compactor деп аталатын басқа компонентті енгіздік. Ол жай ғана Прометейдің жергілікті тығыздау механизмін нысанды сақтаудағы тарихи деректерге қолданады және қарапайым мерзімді топтамалық тапсырма ретінде іске қосылуы мүмкін.

Thanos - масштабталатын Прометей

Тиімді қысудың арқасында жадты ұзақ уақыт бойы сұрау деректер өлшемі бойынша проблема тудырмайды. Дегенмен, миллиардтаған мәнді ашудың және оларды сұрау процессоры арқылы іске қосудың ықтимал құны сөзсіз сұрауды орындау уақытының күрт артуына әкеледі. Екінші жағынан, экранда бір пиксельде жүздеген деректер нүктелері болғандықтан, деректерді толық ажыратымдылықта визуализациялау мүмкін болмайды. Осылайша, кішірейту мүмкін ғана емес, сонымен қатар дәлдіктің айтарлықтай жоғалуына әкелмейді.

Thanos - масштабталатын Прометей

Деректерді кішірейту үшін Compactor деректерді бес минут және бір сағат ажыратымдылығымен үздіксіз біріктіреді. TSDB XOR қысу арқылы кодталған әрбір өңделмеген бөлік үшін бір блок үшін мин, максимум немесе қосынды сияқты жиынтық деректердің әртүрлі түрлері сақталады. Бұл Querier-ге берілген PromQL сұрауына сәйкес келетін жиынтықты автоматты түрде таңдауға мүмкіндік береді.

Пайдаланушыға төмендетілген дәлдік деректерді пайдалану үшін арнайы конфигурация қажет емес. Пайдаланушы үлкейту және кішірейту кезінде Querier әртүрлі ажыратымдылықтар мен өңделмеген деректер арасында автоматты түрде ауысады. Қажет болса, пайдаланушы оны тікелей сұраудағы «қадам» параметрі арқылы басқара алады.

Бір ГБ сақтау құны төмен болғандықтан, әдепкі бойынша Thanos бастапқы деректерді, бес минуттық және бір сағаттық ажыратымдылық деректерін сақтайды. Бастапқы деректерді жоюдың қажеті жоқ.

Жазу ережелері

Тіпті Thanos-пен бірге жазу ережелері мониторинг стекінің маңызды бөлігі болып табылады. Олар сұраулардың күрделілігін, кешігуін және құнын азайтады. Олар сонымен қатар пайдаланушыларға көрсеткіштер бойынша жинақталған деректерді алу үшін ыңғайлы. Thanos ванильді Prometheus даналарына негізделген, сондықтан жазу ережелері мен ескерту ережелерін бар Prometheus серверінде сақтау өте қолайлы. Дегенмен, кейбір жағдайларда бұл жеткіліксіз болуы мүмкін:

  • Ғаламдық ескерту және ереже (мысалы, қызмет үш кластердің екеуінен көп жұмыс істемейтіні туралы ескерту).
  • Жергілікті жадтан тыс деректерге арналған ереже.
  • Барлық ережелер мен ескертулерді бір жерде сақтау ниеті.

Thanos - масштабталатын Прометей

Осы жағдайлардың барлығы үшін Thanos-та Thanos сұраулары арқылы ереже мен ескертуді есептейтін Ruler деп аталатын жеке құрамдас кіреді. Танымал StoreAPI қамтамасыз ету арқылы Сұрау түйіні жаңа есептелген көрсеткіштерге қол жеткізе алады. Кейінірек олар нысан қоймасында сақталады және Store Gateway арқылы қолжетімді болады.

Таностың күші

Thanos сіздің қажеттіліктеріңізге сәйкес бейімделу үшін жеткілікті икемді. Бұл әсіресе қарапайым Прометейден көшкен кезде пайдалы. Thanos компоненттері туралы не білгенімізді жылдам мысалмен қайталап көрейік. Міне, ванильді Prometheus-ді «шексіз метрика сақтау» әлеміне қалай апаруға болады:

Thanos - масштабталатын Прометей

  1. Prometheus серверлеріне Thanos Sidecar қосыңыз - мысалы, Kubernetes подкастындағы бүйірлік контейнер.
  2. Деректерді көре алу үшін бірнеше Thanos Querier көшірмелерін орналастырыңыз. Бұл кезеңде Scraper және Querier арасында өсек орнату оңай. Құрамдастардың өзара әрекеттесуін тексеру үшін "thanos_cluster_members" көрсеткішін пайдаланыңыз.

Прометей HA әлеуетті көшірмелерінен ғаламдық көріністі және біркелкі деректерді қайталауды қамтамасыз ету үшін осы екі қадам жеткілікті! Бақылау тақталарын Querier HTTP соңғы нүктесіне жалғаңыз немесе тікелей Thanos UI пайдаланыңыз.

Дегенмен, көрсеткіштердің сақтық көшірмесін және ұзақ мерзімді сақтауды қажет етсеңіз, сізге тағы үш қадамды орындау қажет болады:

  1. AWS S3 немесе GCS шелегін жасаңыз. Деректерді осы шелектерге көшіру үшін Sidecar қолданбасын конфигурациялаңыз. Жергілікті деректерді сақтауды енді азайтуға болады.
  2. Дүкен шлюзін орналастырып, оны бар өсек кластеріне қосыңыз. Енді сақтық көшірмесі жасалған деректерді сұрауға болады!
  3. Сығыздау және кішірейту арқылы ұзақ уақыт бойы сұрау тиімділігін арттыру үшін Compactor қолданбасын қолданыңыз.

Егер сіз көбірек білгіңіз келсе, біздің сайтқа назар аударыңыз kubernetes айқын мысалдар и басталу!

Бар болғаны бес қадамда біз Prometheus-ті жаһандық көрінісі, шектеусіз сақтау уақыты және көрсеткіштердің ықтимал жоғары қолжетімділігі бар сенімді бақылау жүйесіне айналдырдық.

Сұраныс: бізге сен керексің!

Thanos басынан бастап ашық бастапқы жоба болды. Prometheus-пен үздіксіз интеграция және Thanos-тың бір бөлігін ғана пайдалану мүмкіндігі оны бақылау жүйесін оңай масштабтауға тамаша таңдау жасайды.

Біз әрқашан GitHub тарту сұраулары мен мәселелерін қабылдаймыз. Әзірше, Github мәселелері немесе slack арқылы бізбен байланысыңыз Improbable-eng #thanosегер сізде сұрақтар немесе кері байланыс болса немесе оны пайдалану тәжірибеңізбен бөліскіңіз келсе! Егер сізге Improbable компаниясында не істейтініміз ұнаса, бізбен байланысудан тартынбаңыз - бізде әрқашан бос орындар бар!

Курс туралы көбірек біліңіз.

Ақпарат көзі: www.habr.com

пікір қалдыру