paint-brush
OpenTelemetry деген эмне жана ал сиздин Backend сапатын кантип жакшыртат? тарабынан@ymatigoosa
39,510 окуулар
39,510 окуулар

OpenTelemetry деген эмне жана ал сиздин Backend сапатын кантип жакшыртат?

тарабынан Dmitrii Pakhomov8m2024/06/19
Read on Terminal Reader
Read this story w/o Javascript

өтө узун; Окуу

OpenTelemetry - заманбап сервердик системаларды көзөмөлдөө жана мүчүлүштүктөрдү оңдоо үчүн күчтүү курал. Ал тиркеменин иштешинин жана ишенимдүүлүгүнүн бирдиктүү көрүнүшүн камсыз кылуу менен байкоону, журналды каттоону жана метрикаларды чогултууну бириктирет. Бул колдонмо микросервистерди жана бөлүштүрүлгөн системаларды оптималдаштыруу үчүн анын тарыхын, негизги түшүнүктөрүн жана ишке ашырууну изилдейт.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - OpenTelemetry деген эмне жана ал сиздин Backend сапатын кантип жакшыртат?
Dmitrii Pakhomov HackerNoon profile picture
0-item

Мурда биз backend жөнүндө сөз кылганда, биз, адатта, бир чоң маалымат базасы бар бир чоң тиркемеге кайрылчубуз жана мониторинг жүргүзүү үчүн журналды каттоо жетиштүү болчу. Эми, Kubernetes сыяктуу технологиялардын аркасында микросервистер стандарт болуп калды. Тиркемелер көбүрөөк жана бөлүштүрүлгөн жана салттуу журналдар биздин тиркемелердеги көйгөйлөрдү оңдоо жана диагностикалоо үчүн мындан ары жетишсиз.

Мониторингди уюштуруу үчүн эң сонун чечим OpenTelemetry болуп саналат — бөлүштүрүлгөн системалардын мүчүлүштүктөрүн оңдоо жана натыйжалуулугун талдоо үчүн колдонула турган заманбап инструменттер.


Бул макала оптималдаштыруу боюнча билимин кеңейтүүнү каалаган IT адистерине арналган. Төмөндө биз OpenTelemetry деген эмне экенин, анын негизги түшүнүктөрүн жана ал чечүүгө жардам берген көйгөйлөрдү деталдаштырабыз. Эгер сиз OpenTelemetry сервердик системалардын мониторингине жана мүчүлүштүктөрүн оңдоого болгон мамилеңизди кантип өзгөртө аларына кызыксаңыз, алардын ишенимдүүлүгүн жана эффективдүүлүгүн жогорулата аласыз — улантыңыз.


OpenTelemetry кыскача тарыхы

Ири технологиялык компаниялар биринчи жолу 2000-жылдардын аягында бөлүштүрүлгөн журналдарды кесүү жана көзөмөлдөө кыйынчылыгына туш болушкан. 2010-жылы Google бир макала жарыялаган, Dapper, ири масштабдуу бөлүштүрүлгөн системаларды көзөмөлдөө инфраструктурасы , 2012-жылы чыгарылган Твиттердин Zipkin аттуу издөө куралына негиз салган.


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 сурамына кошулган баш маалымат топтомдорунан же кезектер үчүн билдирүүлөрдүн аталыштарынан турат. Бул ылдый агымдагы колдонмолорго ушул аталыштардагы операция контекстин кайра курууга мүмкүндүк берет.


Бул жерде контексттик жайылтуунун кээ бир мисалдары:

  1. B3-Propagation Бул Zipkin трасса системасы үчүн иштелип чыккан аталыштардын жыйындысы ( x-b3-* ). Ал OpenTracingге ыңгайлаштырылган жана көптөгөн инструменттер жана китепканалар тарабынан колдонулган. B3-Propagation trace_id / span_id жана үлгү алуу зарыл экендигин көрсөткөн желекти алып жүрөт.


  2. W3C Trace Context W3C жумушчу тобу тарабынан иштелип чыккан бул стандарт контекстти жайылтуу боюнча ар кандай ыкмаларды бирдиктүү стандартка бириктирет жана OpenTelemetryде демейки болуп саналат. Бул стандарттарды колдонуунун жакшы мисалы, мониторинг жана мүчүлүштүктөрдү оңдоонун тактыгын бузбастан, ар кандай технологиялар менен ишке ашырылган микросервистер аркылуу өтүүчү суроо-талаптын аткарылышын көзөмөлдөө.

Издөө

Издөө - бул бир нече микросервистер аркылуу суроо-талаптын жолунун хронологиясын жазуу жана андан кийин визуалдаштыруу процесси.


[сүрөт булагы: https://opentelemetry.io/docs/demo/screenshots/]


Визуализацияда ар бир тилке "span" деп аталат жана уникалдуу "span_id" га ээ. Тамыр аралыгы "из" деп аталат жана бүт сурам үчүн идентификатор катары кызмат кылган "trace_id" бар.


Визуализациянын бул түрү төмөнкүлөргө мүмкүндүк берет:

  • Оптималдаштырууну талап кылган тоскоолдуктарды аныктоо үчүн ар кандай системалар жана маалымат базалары боюнча суроо-талаптарды аткаруу убактысын анализдеңиз.
  • Кызматтардын ортосундагы циклдик көз карандылыктарды аныктоо.
  • Кайталанма сурамдарды табыңыз. Издөө маалыматтарын колдонуу менен сиз кошумча аналитиканы түзө аласыз, мисалы, микросервистердин картасын түзүү же операцияны иштетүүдө ар кандай системалар боюнча убакытты бөлүштүрүү. Убакыт тилкелерин визуализациялоо үчүн трасса маалыматтарын колдонбосоңуз да, OpenTelemetry дагы эле башка сигналдарда колдонуу үчүн trace_id жана span_id түзөт.


Журналдар

Көрүнүп тургандай жөнөкөйлүгүнө карабастан, журналдарды жазуу көйгөйлөрдү аныктоо үчүн эң күчтүү куралдардын бири бойдон калууда. OpenTelemetry контексттик маалыматты кошуу менен салттуу журналды жакшыртат. Тактап айтканда, эгерде жигердүү трек бар болсо, `trace_id` жана `span_id` атрибуттары автоматтык түрдө журналдарга кошулуп, аларды трассага байланыштырат. Мындан тышкары, журналдын атрибуттары түйүн идентификатору сыяктуу OpenTelemetry контекстиндеги статикалык маалыматты, ошондой эле учурдагы HTTP акыркы чекит идентификатору (`http_path: "GET /user/:id"`) сыяктуу динамикалык маалыматты камтышы мүмкүн.


`trace_id` колдонуу менен сиз учурдагы суроо-талап менен байланышкан бардык микросервистерден журналдарды таба аласыз, ал эми `span_id` суб-суроолорду айырмалоого мүмкүндүк берет. Мисалы, кайра аракет кылган учурда, ар кандай аракеттердин журналдарында ар кандай `span_id` болот. Бул идентификаторлорду колдонуу реалдуу убакыт режиминде бүт системанын жүрүм-турумун тез талдоого, көйгөйдү аныктоону тездетүүгө жана туруктуулукту жана ишенимдүүлүктү жогорулатууга мүмкүндүк берет.


Метрикалар

Метрикаларды чогултуу күтүү, ката ылдамдыгы, ресурстарды колдонуу жана башкалар сыяктуу системанын иштеши боюнча сандык маалыматтарды берет. Өлчөмдөрдүн реалдуу убакыт режиминде мониторинги өндүрүмдүүлүктүн өзгөрүшүнө ыкчам жооп кайтарууга, мүчүлүштүктөрдү жана ресурстардын түгөнүшүнө жол бербөөгө жана колдонуучулар үчүн тиркеменин жогорку жеткиликтүүлүгүн жана ишенимдүүлүгүн камсыз кылууга мүмкүндүк берет.


Prometheus жана Grafana сыяктуу метрикалык сактоо жана визуализация системалары менен интеграция бул маалыматтарды визуалдаштырууну жеңилдетип, мониторингди кыйла жөнөкөйлөтөт.


[сүрөт булагы: https://grafana.com/blog/2021/06/22/grafana-dashboard-showcase-visualizations-for-prometheus-home-energy-usage-github-and-more/]


Метрикалык коллекторлор

OpenTelemetry метрикалык коллекторлору Prometheus жана OpenMetrics стандарттарына шайкеш келип, OpenTelemetry чечимдерине олуттуу өзгөрүүлөрсүз оңой өтүүгө мүмкүндүк берет. OpenTelemetry SDK trace_id мисалдарын метрика менен бирге экспорттоого мүмкүндүк берет, бул көрсөткүчтөрдү журнал мисалдары жана издер менен салыштырууга мүмкүндүк берет.


Сигналдын корреляциясы

Биргелешип, журналдар, метрика жана трасса системанын абалынын толук көрүнүшүн түзөт:

  • Журналдар каталарды тез аныктоого жана чечүүгө мүмкүндүк берген система окуялары жөнүндө маалымат берет.
  • Метрикалар жооп берүү убактысы же ката ылдамдыгы сыяктуу системанын сапаттык жана сандык көрсөткүчтөрүн чагылдырат.
  • Издөө тутумдун ар кандай компоненттери аркылуу сурамдын аткарылышынын жолун көрсөтүү менен бул көз карашты толуктайт, алардын өз ара байланышын түшүнүүгө жардам берет. Журналдар, издер жана метрика ортосундагы так корреляция OpenTelemetry айырмалоочу өзгөчөлүгү болуп саналат. Мисалы, Grafana колдонуучуларга журналды көрүп жатканда тиешелүү изди жана суроо-талаптын көрсөткүчтөрүн көрүүгө мүмкүндүк берет, бул платформанын колдонууга ыңгайлуулугун жана натыйжалуулугун бир топ жогорулатат.



[сүрөт булагы: https://grafana.com/blog/2020/03/31/how-to-successfully-correlate-metrics-logs-and-traces-in-grafana/]


Үч негизги компоненттен тышкары, OpenTelemetry үлгү алуу, багаж жана операция контекстти башкаруу түшүнүктөрүн камтыйт.


Үлгү алуу

Жогорку жүктөмдүү системаларда журналдардын жана издердин көлөмү абдан чоң болуп, инфраструктура жана маалыматтарды сактоо үчүн олуттуу ресурстарды талап кылат. Бул маселени чечүү үчүн, OpenTelemetry стандарттары сигналдарды тандоону камтыйт — издер менен журналдардын бир бөлүгүн гана экспорттоо мүмкүнчүлүгү. Мисалы, сиз сурамдардын пайызынан, узакка созулган суроо-талаптардан же ката сурамдарынан деталдуу сигналдарды экспорттой аласыз. Бул ыкма олуттуу ресурстарды үнөмдөө менен бирге статистиканы түзүү үчүн жетиштүү үлгүлөрдү алууга мүмкүндүк берет.


Бирок, эгерде ар бир система кайсы суроо-талаптарды деталдуу түрдө көзөмөлдөөнү өз алдынча чечсе, анда биз ар бир суроо-талаптын фрагменттүү көрүнүшүнө ээ болобуз. Кээ бир системалар толук маалыматты экспорттосо, башкалары жарым-жартылай экспорттошу мүмкүн же такыр экспорттобойт.


Бул көйгөйдү чечүү үчүн, OpenTelemetry контексттик жайылтуу механизмдери `trace_id`/`span_id` менен бирге үлгү алуу желегин өткөрөт. Бул колдонуучунун суроо-талабын кабыл алган баштапкы кызмат суроо-талапка деталдуу түрдө мониторинг жүргүзүү керек деп чечсе, бардык башка системалар дал ошондой болоорун камсыздайт. Болбосо, бардык системалар ресурстарды үнөмдөө үчүн сигналдарды жарым-жартылай экспорттош керек. Бул ыкма "Баштын үлгүсүн алуу" деп аталат — суроо-талаптарды иштетүүнүн башталышында кабыл алынган чечим, же туш келди же кээ бир киргизүү атрибуттарынын негизинде.


Мындан тышкары, OpenTelemetry "Tail Sampling" ды колдойт, мында бардык колдонмолор ар дайым бардык сигналдарды майда-чүйдөсүнө чейин экспорттойт, бирок ортодогу буфер бар. Бардык маалыматтарды чогулткандан кийин, бул буфер толук маалыматты сактоону же жарым-жартылай гана үлгүнү сактоону чечет. Бул ыкма ар бир суроо-талап категориясынын репрезентативдик үлгүсүн алууга мүмкүндүк берет (ийгиликтүү/узак/ката), бирок кошумча инфраструктураны орнотууну талап кылат.


Багаж

Багаж механизми суроо-талапты иштеп чыгуу учурунда бардык микросервистердин ортосунда автоматтык түрдө өтүп, trace_id / span_id менен бирге каалаган ачкыч-маани жуптарын берүүгө мүмкүндүк берет. Бул колдонуучу маалыматы же иштөө чөйрөсүнүн жөндөөлөрү сыяктуу суроо-талап жолунда керектүү кошумча маалыматты берүү үчүн пайдалуу.

W3C стандартына ылайык багажды өткөрүү үчүн аталыштын мисалы: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5

Бул жерде багажды колдонуунун кээ бир мисалдары келтирилген:

  • userId , productId же deviceId сыяктуу бизнес контекстинин маалыматын өткөрүү бардык микросервистерден өтсө болот. Колдонмолор бул маалыматты автоматтык түрдө журналга киргизип, баштапкы сурам үчүн колдонуучунун контексти боюнча журнал издөөсүнө мүмкүндүк берет.

  • SDK же инфраструктура үчүн конкреттүү конфигурация параметрлери .

  • Маршруттук Flags Жүк баланстоочуларга маршруттук чечимдерди кабыл алууга жардам берген желектер. Сыноо учурунда кээ бир суроо-талаптарды шылдыңдоочу серверлерге багыттоо керек болушу мүмкүн. Жүк бардык кызматтар аркылуу автоматтык түрдө өткөрүлүп берилгендиктен, кошумча протоколдорду түзүүнүн кереги жок — жөн гана жүк балансында эрежени орнотуңуз.


Багаждын иштешине тийгизген таасири минималдуу болгону менен, ашыкча колдонуу тармактын жана кызматтын жүгүн бир топ жогорулатат. Иштин майнаптуулугуна жол бербөө үчүн багаж аркылуу чындап эле кайсы дайындарды өткөрүү керек экенин кылдаттык менен тандаңыз.

Инфраструктураны ишке ашыруу

OpenTelemetryди инфраструктура деңгээлинде ишке ашыруу OpenTelemetry серверлерин колдонмо архитектурасына интеграциялоону жана маалыматтарды топтоо үчүн инфраструктураны конфигурациялоону камтыйт.


Процесс төрт этаптан турат:


  1. Колдонмо интеграциясы Биринчи этапта, OpenTelemetry SDK'лары системанын ар бир компонентинин иштеши жөнүндө маалыматтардын үзгүлтүксүз агымын камсыз кылуу менен метрикаларды, журналдарды жана издерди чогултуу үчүн тиркемелерге түздөн-түз интеграцияланат.


  2. Экспорттоочуларды конфигурациялоо Чогултулган маалыматтар сиздин муктаждыктарыңызга жараша андан ары кайра иштетүү үчүн, мисалы, журналга алуу, мониторинг жүргүзүү, көзөмөлдөө же аналитика системалары үчүн колдонмолордон экспорттоочулар аркылуу тышкы системаларга багытталат.


  3. Агрегация жана сактоо Бул этап маалыматтарды нормалдаштырууну, аны кошумча маалымат менен байытууну жана системанын абалынын бирдиктүү көрүнүшүн түзүү үчүн ар кандай булактардан алынган маалыматтарды бириктирүүнү камтышы мүмкүн.


  4. Берилиштерди визуалдаштыруу Акыр-аягы, иштетилген маалыматтар Grafana (метрика жана из үчүн) же Kibana (журналдар үчүн) сыяктуу системаларда башкаруу панели катары берилет. Бул командаларга системанын ден соолугуна тез баа берүүгө, көйгөйлөрдү жана тенденцияларды аныктоого жана түзүлгөн сигналдардын негизинде эскертүүлөрдү орнотууга мүмкүндүк берет.


Колдонмону ишке ашыруу

Тиркеме менен интеграциялоо үчүн, колдонулуп жаткан программалоо тилине ылайыктуу OpenTelemetry SDK туташтырыңыз же OpenTelemetryди түздөн-түз колдогон китепканаларды жана алкактарды колдонушуңуз керек. OpenTelemetry көбүнчө белгилүү китепканалардан кеңири колдонулган интерфейстерди ишке ашырат, бул алмаштырууну алмаштырууга мүмкүндүк берет. Мисалы, Micrometer китепканасы көбүнчө Java экосистемасындагы метрикаларды чогултуу үчүн колдонулат. OpenTelemetry SDK негизги колдонмо кодун өзгөртпөстөн метрикалык экспорттоого мүмкүндүк берүүчү микрометр интерфейстерин ишке ашырууну камсыз кылат. Мындан тышкары, OpenTelemetry эски OpenTracing жана OpenCensus интерфейстерин ишке ашырууну сунуштайт, бул OpenTelemetryге жылмакай миграцияны жеңилдетет.

Корутунду

IT системаларында OpenTelemetry ишенимдүү жана эффективдүү бэкенддердин келечегинин ачкычы болуп калышы мүмкүн. Бул курал мүчүлүштүктөрдү оңдоону жана мониторингди жеңилдетет, ошондой эле колдонмонун иштешин жана жаңы деңгээлде оптималдаштырууну терең түшүнүү үчүн мүмкүнчүлүктөрдү ачат. Backend иштеп чыгуу жөнөкөй жана натыйжалуу боло турган келечекти түзүүгө жардам берүү үчүн OpenTelemetry коомчулугуна кошулуңуз!

L O A D I N G
. . . comments & more!

About Author

Dmitrii Pakhomov HackerNoon profile picture
Dmitrii Pakhomov@ymatigoosa
10 yeas of experience of building mission critical Fintech system handling extremely high load

ТАГИП АЛУУ

БУЛ МАКАЛА БЕРИЛГЕН...