Бұрын біз бэкэнд туралы айтқан кезде, әдетте, бір, үлкен дерекқоры бар бір үлкен қолданбаға сілтеме жасайтынбыз және бақылау үшін журнал жүргізу жеткілікті болды. Енді Kubernetes сияқты технологиялардың арқасында микросервистер стандартқа айналды. Қолданбалар көбірек және таратылған және дәстүрлі журнал жүргізу қолданбаларымыздағы ақауларды түзету және диагностикалау үшін жеткіліксіз.
Мониторингті ұйымдастырудың тамаша шешімі OpenTelemetry болып табылады — таратылған жүйелерді жөндеу және өнімділігін талдау үшін пайдалануға болатын заманауи құралдар жинағы.
Бұл мақала серверді оңтайландыру бойынша білімдерін кеңейтуді қалайтын АТ мамандарына арналған. Төменде біз OpenTelemetry деген не екенін, оның негізгі ұғымдарын және шешуге көмектесетін мәселелерді егжей-тегжейлі қарастырамыз. Егер сіз OpenTelemetry серверлік жүйелерді бақылауға және жөндеуге, олардың сенімділігі мен тиімділігін арттыруға деген көзқарасыңызды қалай өзгерте алатынына қызығушылық танытсаңыз — әрі қарай оқыңыз.
Ірі технологиялық компаниялар алғаш рет 2000-шы жылдардың аяғында таратылған ағаш кесу және бақылау мәселесіне тап болды. 2010 жылы Google мақала жариялады,
2014 жылы микросервистерді және басқа бұлтпен таратылатын жүйелерді дамытуды айтарлықтай жеңілдететін Kubernetes пайда болды. Бұл көптеген компаниялардың микросервистерде бөлінген тіркеу және бақылау мәселелеріне тап болуына әкелді. Бөлінген бақылауды стандарттау үшін CNCF қабылдаған OpenTracing стандарты және Google OpenCensus жобасы жасалды.
2019 жылы OpenTracing және OpenCensus жобалары OpenTelemetry атауымен бірігу туралы жариялады. Бұл платформа көптеген жылдар бойы жинақталған үздік тәжірибелерді біріктіріп, олардың күрделілігіне қарамастан бақылауды, журналды және метрикаларды кез келген жүйеге үздіксіз біріктіруге мүмкіндік береді.
Бүгінгі таңда OpenTelemetry жай ғана жоба емес; бұл телеметрия деректерін жинауға және беруге арналған салалық стандарт. Оны мамандар қауымдастығы мен Google және Microsoft сияқты нарықтағы жетекші компаниялар әзірлейді және қолдайды. Жоба интеграция мен пайдалану процесін жеңілдету үшін жаңа мүмкіндіктерге ие бола отырып, дамуын жалғастыруда.
OpenTelemetry — қолданбаның сыртқы әлеммен әрекеттесу үшін қандай сигналдар жасай алатынын және қолданбалар мен жалпы жүйенің күйін бақылау үшін бұл сигналдарды қалай жинауға және бейнелеуге болатынын анықтайтын тәжірибелер мен құралдардың толық жиынтығы. Сигналдардың үш негізгі түрі - бақылау, журналға жазу және метрика жинау .
**Әр компонентті толығырақ қарастырайық: \
OpenTelemetry операция контексттері тұжырымдамасын енгізеді. Мәтінмән негізінен `trace_id`
(ағымдағы әрекетке арналған идентификатор) және `span_id`
(қосалқы сұраудың идентификаторы, ішкі сұраудың әрбір қайталау әрекетінде бірегей `span_id`
) сияқты атрибуттарды қамтиды.
Қосымша, мәтінмән қолданба орналастырылған түйін атауы немесе орта атауы (prod/qa) сияқты статикалық ақпаратты қамтуы мүмкін. OpenTelemetry терминологиясында ресурстар ретінде белгілі бұл өрістер іздеуді жеңілдету үшін әрбір журналға, метрикаға немесе жолға тіркеледі. Мәтінмәндер сонымен қатар журналдар, көрсеткіштер немесе жолдар топтарына таңдамалы түрде тіркелетін ағымдағы соңғы нүктенің идентификаторы ( `http_path: "GET /user/:id/info"`
) сияқты динамикалық деректерді қамтуы мүмкін.
OpenTelemetry мәтінмәндерін мәтінмәнді тарату хаттамалары арқылы әртүрлі қолданбалар арасында жіберуге болады. Бұл хаттамалар әрбір HTTP немесе gRPC сұрауына қосылатын тақырып жиындарынан немесе кезектерге арналған хабарлардың тақырыптарынан тұрады. Бұл төменгі ағындық қолданбаларға осы тақырыптардан операция контекстін қайта құруға мүмкіндік береді.
Міне, контекстті таратудың кейбір мысалдары:
B3-Propagation Бұл Zipkin бақылау жүйесі үшін бастапқыда әзірленген тақырыптар жинағы ( x-b3-*
). Ол OpenTracing-ге бейімделген және көптеген құралдар мен кітапханаларда қолданылған. B3-тарату trace_id
/ span_id
және үлгі алу қажет екенін көрсететін жалаушаны тасымалдайды.
W3C Trace Context W3C жұмыс тобы әзірлеген бұл стандарт мәтінмәнді таратудың әртүрлі тәсілдерін бір стандартқа біріктіреді және OpenTelemetry жүйесінде әдепкі болып табылады. Бұл стандарттарды қолданудың жақсы мысалы әртүрлі технологиялармен жүзеге асырылатын микросервистер арқылы өтетін сұраудың орындалуын бақылау және жөндеу дәлдігіне нұқсан келтірмей бақылау болып табылады.
Бақылау - бірнеше микросервистер арқылы сұрау жолының уақыт шкаласын жазу және кейіннен визуализациялау процесі.
Визуализацияда әрбір жолақ "аралық" деп аталады және бірегей "span_id" болады. Түбір аралығы «із» деп аталады және бүкіл сұрау үшін идентификатор ретінде қызмет ететін «trace_id» бар.
Визуализацияның бұл түрі мыналарға мүмкіндік береді:
trace_id
және span_id
жасайды.
Көрінетін қарапайымдылығына қарамастан, журнал жүргізу проблемаларды диагностикалаудың ең қуатты құралдарының бірі болып қала береді. OpenTelemetry мәтінмәндік ақпаратты қосу арқылы дәстүрлі журнал жүргізуді жақсартады. Атап айтқанда, егер белсенді із болса, `trace_id` және `span_id` атрибуттары журналдарға автоматты түрде қосылады, оларды бақылау уақыт шкаласына байланыстырады. Сонымен қатар, журнал атрибуттары түйін идентификаторы сияқты OpenTelemetry контекстіндегі статикалық ақпаратты, сонымен қатар ағымдағы HTTP соңғы нүкте идентификаторы (`http_path: "GET /user/:id"`) сияқты динамикалық ақпаратты қамтуы мүмкін.
`trace_id` көмегімен ағымдағы сұраумен байланысты барлық микросервистерден журналдарды таба аласыз, ал `span_id` ішкі сұрауларды ажыратуға мүмкіндік береді. Мысалы, қайталау жағдайында, әртүрлі әрекеттердің журналдарында әртүрлі `span_id` болады. Бұл идентификаторларды пайдалану нақты уақыт режимінде бүкіл жүйенің әрекетін жылдам талдауға, мәселені диагностикалауды жылдамдатуға және тұрақтылық пен сенімділікті арттыруға мүмкіндік береді.
Көрсеткіштер жинағы кешігу, қате жылдамдығы, ресурстарды пайдалану және т.б. сияқты жүйе өнімділігі туралы сандық деректерді қамтамасыз етеді. Көрсеткіштерді нақты уақыттағы бақылау өнімділік өзгерістеріне жедел жауап беруге, сәтсіздіктер мен ресурстардың сарқылуын болдырмауға және пайдаланушылар үшін қолданбаның жоғары қолжетімділігі мен сенімділігін қамтамасыз етуге мүмкіндік береді.
Prometheus және Grafana сияқты метрикалық сақтау және визуализация жүйелерімен интеграция бұл деректерді визуализациялауды жеңілдетеді, бақылауды айтарлықтай жеңілдетеді.
OpenTelemetry метрикалық коллекторлары Prometheus және OpenMetrics стандарттарымен үйлесімді, OpenTelemetry шешімдеріне елеулі өзгерістерсіз оңай өтуге мүмкіндік береді. OpenTelemetry SDK trace_id мысалдарын көрсеткіштермен бірге экспорттауға мүмкіндік береді, бұл көрсеткіштерді журнал мысалдарымен және жолдармен салыстыруға мүмкіндік береді.
Журналдар, көрсеткіштер және бақылау бірге жүйе күйінің жан-жақты көрінісін жасайды:
Үш негізгі құрамдас бөліктен басқа, OpenTelemetry сынама алу, багажды және операциялық контекстті басқару тұжырымдамаларын қамтиды.
Жоғары жүктемелі жүйелерде журналдар мен іздердің көлемі орасан зор болады, бұл инфрақұрылым мен деректерді сақтау үшін айтарлықтай ресурстарды қажет етеді. Бұл мәселені шешу үшін OpenTelemetry стандарттары сигналды таңдауды қамтиды — іздер мен журналдардың бір бөлігін ғана экспорттау мүмкіндігі. Мысалы, сұраулар пайызынан, ұзақ орындалатын сұраулардан немесе қате сұрауларынан егжей-тегжейлі сигналдарды экспорттауға болады. Бұл тәсіл айтарлықтай ресурстарды үнемдей отырып, статистиканы құру үшін жеткілікті іріктеуге мүмкіндік береді.
Дегенмен, егер әрбір жүйе қандай сұрауларды егжей-тегжейлі бақылауды дербес шешсе, біз әрбір сұраудың бөлшектелген көрінісін аламыз. Кейбір жүйелер егжей-тегжейлі деректерді экспорттай алады, ал басқалары тек ішінара экспорттай алады немесе мүлде экспорттамайды.
Бұл мәселені шешу үшін OpenTelemetry мәтінмәнді тарату механизмдері `trace_id`/`span_id`-мен бірге үлгі алу жалауын жібереді. Бұл пайдаланушы сұрауын алатын бастапқы қызмет сұрауды егжей-тегжейлі бақылау қажет деп шешсе, барлық басқа жүйелер де осыған сәйкес келетінін қамтамасыз етеді. Әйтпесе, ресурстарды үнемдеу үшін барлық жүйелер сигналдарды ішінара экспорттауы немесе экспорттамауы керек. Бұл тәсіл «басты іріктеу» деп аталады — кездейсоқ немесе кейбір енгізу атрибуттары негізінде сұранысты өңдеудің басында қабылданған шешім.
Сонымен қатар, OpenTelemetry «Құйрық үлгісін» қолдайды, мұнда барлық қолданбалар әрқашан барлық сигналдарды егжей-тегжейлі экспорттайды, бірақ аралық буфер бар. Барлық деректерді жинағаннан кейін бұл буфер толық деректерді сақтауды немесе тек ішінара үлгіні сақтауды шешеді. Бұл әдіс әрбір сұрау санатының (сәтті/ұзақ/қате) репрезентативті үлгісіне мүмкіндік береді, бірақ қосымша инфрақұрылым орнатуды қажет етеді.
Жолжүк механизмі сұрауды өңдеу кезінде барлық микросервистердің арасында автоматты түрде өтетін trace_id
/ span_id
арқылы еркін кілт-мән жұптарын жіберуге мүмкіндік береді. Бұл пайдаланушы ақпараты немесе орындалу ортасының параметрлері сияқты сұрау жолында қажет қосымша ақпаратты жіберу үшін пайдалы.
W3C стандарты бойынша багажды тасымалдау тақырыбының мысалы: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5
Міне, багажды пайдаланудың кейбір мысалдары:
Іскерлік контекстті жіберу userId
, productId
немесе deviceId
сияқты ақпаратты барлық микросервистер арқылы беруге болады. Қолданбалар бастапқы сұрау үшін пайдаланушы мәтінмәні бойынша журнал іздеулеріне мүмкіндік беретін бұл ақпаратты автоматты түрде тіркей алады.
Арнайы конфигурация параметрлері SDK немесе инфрақұрылым үшін параметрлер.
Маршруттау жалаулары Жүктеме теңестірушілерге бағыттау шешімдерін қабылдауға көмектесетін жалаушалар. Тестілеу кезінде кейбір сұрауларды жалған серверлерге бағыттау қажет болуы мүмкін. Жүк барлық қызметтер арқылы автоматты түрде тасымалданатындықтан, қосымша хаттамалар жасаудың қажеті жоқ — жүк теңгерімінде ережені орнату жеткілікті.
Жолжүктің жұмысына әсері аз болғанымен, шамадан тыс пайдалану желі мен қызмет жүктемесін айтарлықтай арттыруы мүмкін екенін ескеріңіз. Өнімділік мәселелерін болдырмас үшін багаж арқылы шын мәнінде қандай деректерді өткізу керек екенін мұқият таңдаңыз.
OpenTelemetry инфрақұрылымын инфрақұрылым деңгейінде енгізу OpenTelemetry серверлерін қолданба архитектурасына біріктіруді және деректерді біріктіру үшін инфрақұрылымды теңшеуді қамтиды.
Процесс төрт кезеңнен тұрады:
Қолданбаларды біріктіру Бірінші кезеңде, OpenTelemetry SDK-лары әрбір жүйе құрамдасының өнімділігі туралы деректердің үздіксіз ағынын қамтамасыз ете отырып, көрсеткіштерді, журналдарды және жолдарды жинау үшін қолданбаларға тікелей біріктіріледі.
Экспорттаушыларды конфигурациялау Жиналған деректер қажеттіліктеріңізге байланысты тіркеу, бақылау, бақылау немесе талдау жүйелері сияқты әрі қарай өңдеу үшін қолданбалардан экспорттаушылар арқылы сыртқы жүйелерге бағытталады.
Агрегация және сақтау Бұл кезең деректерді қалыпқа келтіруді, оны қосымша ақпаратпен байытуды және жүйе күйінің біртұтас көрінісін жасау үшін әртүрлі көздерден алынған деректерді біріктіруді қамтуы мүмкін.
Деректерді визуализациялау Соңында өңделген деректер Grafana (метрикалар мен жолдар үшін) немесе Kibana (журналдар үшін) сияқты жүйелерде бақылау тақталары ретінде ұсынылады. Бұл командаларға жүйенің денсаулығын жылдам бағалауға, мәселелер мен үрдістерді анықтауға және жасалған сигналдар негізінде ескертулерді орнатуға мүмкіндік береді.
Қолданбамен біріктіру үшін қолданылатын бағдарламалау тіліне сәйкес OpenTelemetry SDK қосуыңыз немесе OpenTelemetry-ді тікелей қолдайтын кітапханалар мен фреймворктарды пайдалануыңыз қажет. OpenTelemetry көбінесе белгілі кітапханалардан кеңінен қолданылатын интерфейстерді жүзеге асырады, бұл ашылмалы ауыстыруларға мүмкіндік береді. Мысалы, Микрометр кітапханасы Java экожүйесінде метрика жинау үшін жиі пайдаланылады. OpenTelemetry SDK негізгі қолданба кодын өзгертпестен метрикалық экспорттауға мүмкіндік беретін Микрометр интерфейстерінің іске асырылуын қамтамасыз етеді. Сонымен қатар, OpenTelemetry ескі OpenTracing және OpenCensus интерфейстерін іске асыруды ұсынады, бұл OpenTelemetry-ге тегіс көшуді жеңілдетеді.
АТ жүйелерінде OpenTelemetry сенімді және тиімді серверлердің болашағының кілті бола алады. Бұл құрал жөндеуді және бақылауды жеңілдетеді, сонымен қатар қолданба өнімділігі мен жаңа деңгейде оңтайландыруды терең түсінуге мүмкіндіктер ашады. OpenTelemetry қауымдастығына қосылыңыз, серверді өңдеу оңайырақ және тиімдірек болатын болашақты қалыптастыруға көмектесіңіз!