Безкрайното пътуване към производително, ефективно доставяне на интерактивно съдържание доведе до обширна, богата екосистема от продукти, които се борят за вниманието на разработчиците, и всеки продукт има свое собствено уникално решение. От възможността за възобновяване на Qwik до React Server Components и тяхната способност все повече да локализират код и да размиват границите между предния край и базираните на сървъра операции, сеизмичните промени настъпват в пейзажа на javascript. Тези промени ни позволяват, като разработчици, да създаваме чудесно красноречиви решения на проблеми, които бяха невероятно тревожни дори преди няколко години.

Те също така създават все по-голям брой начини нашият код да се провали по нови и интересни начини. Наблюдаемостта, способността да се диагностицира поведението на вашия код, става от съществено значение не само за големи, разпределени системи, но и за по-малки разработчици. Например — сървърното изобразяване (SSR) и сървърните компоненти на React могат да увеличат производителността, но също така включват изобразяване на клиентски компоненти в задната част, което означава, че инструментите, традиционно използвани от предните разработчици (напр. мрежовия раздел на Chrome), са по-малко полезни за справяне с проблеми с производителността.

OpenTelemetry, инструмент за наблюдение с отворен код, управляван от Cloud Native Computing Foundation, бързо се превърна в индустриален стандарт. Създаден от сливането на OpenTracing и OpenCensus, два инструмента за наблюдение с отворен код, OpenTelemetry е невероятно богат на функции и може да се използва за осигуряване на наблюдаемост в почти всяка голяма рамка. За съжаление, това също е объркващо и въпреки че е наличен прекрасен базиран на видео Bootcamp, както bootcamp, така и документацията на OpenTelemetry са особено плътни. Тази статия ще ви преведе през основите на това как работи OpenTelemetry, ще предостави полезни примери и допълнително ще обясни как да го внедрите и използвате.

НАБЛЮДАЕМОСТ

Като начало, нека бързо да преминем през обяснение какво точно е наблюдаемостта. Най-общо казано, наблюдаемостта има три основни аспекта: показатели, регистрационни файлове и следи. Метриките са базирани на времето числени стойности — използване на процесора, потребление на памет, забавяне на заявката и т.н. Дневниците са текстови записи на определени събития, като потребителски действия или грешки в приложението. И накрая, следите представляват визуализиран поток от данни между услугите, показващ последователността от събития в определена система. OpenTelemetry може да се използва за генериране и на трите, което позволява на разработчика да диагностицира по-добре проблеми с различни услуги или дори в самата им кодова база, без да се налага индивидуално да тества всяка услуга чрез платформа за тестване на API като Пощальон или Безсъние.

СЛЕДИ И РАЗМЕРИ

На най-основното си ниво OpenTelemetry работи, като маркира данни, изпратени чрез различни услуги. Той обгръща функции, добавя тагове, след което измерва времето, което е необходимо на тези маркирани обекти да се движат през неговата система. Този процес е известен също като Разпространение на контекста и е основната функция на OpenTelemetry, която извиква създаването на тези обвити функции “ участъци” и „следи”. Всяко отделно действие или отделна стъпка в операция се нарича обхват и има уникален идентификатор на обхват. Поредица от операции, извършвани с течение на времето, ще бъде съставена от множество участъци и се нарича следа. Всяка част от данните, предоставена от OpenTelemetry, се основава на span или trace ID. Допълнителна информация може да бъде добавена към тези участъци с помощта на персонализиран междинен софтуер.

ИНСТРУМЕНТИ

Интегрирането на OpenTelemetry в приложение означава добавяне на пропагатори и контекст – инструментите, използвани за измерване на ефективността на вашия код. Следователно процесът на това се нарича инструментариум и е сложен и е специфичен както за език, така и за библиотека. За щастие, OpenTelemetry предоставя голямо разнообразие от комплекти за разработка на софтуер (SDK), които значително опростяват процеса. Има SDK за почти всичко, използвано в уеб разработката, включително Node.js, Java и Go, между другото. Дори по-добре, тези комплекти за разработване на софтуер (SDK) обикновено ви дават възможността автоматично да инструментирате кода си, което прави особено лесно събирането на най-често необходимата информация за наблюдение. Например, автоматичното инструментиране на Python е толкова просто, колкото три реда код:

Въпреки това, за по-задълбочена информация или персонализирани показатели, ще трябва ръчно да инструментирате кода си, което е малко по-сложно.

РЪЧНИ ИНСТРУМЕНТИ

Ръчното измерване включва използването на вашия конкретен доставчик на проследяване на SDK заедно с основния процесор за обхват на OpenTelemetry и износител на обхват. Започвате, като регистрирате вашия доставчик на проследяване, след което в началото на секцията от вашия код, който искате да наблюдавате, създавате нов участък, като използвате методите .getTracer и .startSpan otel-api, след което ръчно създавате контекста и атрибутите за вашия участък . И накрая, вие използвате метода the.end() на вашия създаден span, за да завършите процеса.

Страхотен! Инструментирал си кода си, генерираш следи и обхвати и може би дори си добавил някои ръчни инструменти за проследяване на нещо специфично за приложението. Сега е време да го видите!

… За съжаление, OpenTelemetry няма вградени методи за преглед на данните, които генерира. Докато информацията може да бъде предадена на вашия преден край и прегледана в конзолата, това бързо ще стане непосилно, тъй като предоставената информация е изключително гъста. Ще трябва да използвате бекенд решение за наблюдение, за да наблюдавате информацията си.

ПРЕГЛЕД НА ИНСТРУМЕНТИРАНИ ДАННИ

Има множество търговски решения като Datadog, New Relic, Dynatrace и Sentry , които обслужват предимно предприятия. Въпреки това е напълно възможно да го направите сами и да създадете такъв от нулата или да използвате някои инструменти с отворен код, създадени специално за измерване на този вид информация. Ако нямате нищо против да използвате docker за комбиниране на няколко услуги с отворен код, можете да създадете просто решение, като комбинирате например Zipkin, Jaeger и Grafana. Jaeger е създаден от Uber, докато Zipkin е създаден от Twitter, и двете се използват широко за наблюдение на данни от решения като OpenTelemetry, докато Grafana е табло за управление, което можете да използвате, за да организирате и показвате данните, които получавате от Zipkin и Jaeger.

АЛТЕРНАТИВНИ РЕШЕНИЯ

Понякога пълното усилие от инструментариума и мониторинга на бекенда е повече проблем, отколкото си струва – особено за приложения, които не изискват регистрационни файлове с показатели. В други случаи разработчиците не искат да предават данните си във външни бази данни или чрез големи, сложни кодови бази, които не могат да анализират напълно. В тези случаи разработчиците могат да изберат леки алтернативи. Пример в екосистемата с отворен код на Javascript е NetPulse, npm пакет за осигуряване на наблюдаемост в приложенията на Next.js, който е бърз и лесен за внедряване. NetPulse е имплементация на OpenTelemetry, която осигурява основна наблюдаемост за извличане от страна на сървъра и, което е по-важно, заявки за бази данни, които обикновено изискват по-сложни персонализирани инструменти на OpenTelemetry.

Независимо от решението, което решите да използвате, ще откриете, че данните, до които имате достъп от OpenTelemetry, ще подобрят работния ви процес и способността за бързо диагностициране и отстраняване на проблеми във вашия код. Тази статия представя само основите на използването на OpenTelemetry; има многобройни допълнителни персонализации, които можете да направите, като персонализиране на информацията, съхранявана на участъци, например. С основното въведение, което получихте тук, би трябвало да откриете, че е сравнително лесно да започнете с вашата отворена реализация на Observability and Tracing, като прочетете документацията на OpenTelemetry, намираща се „тук“.

Чувствайте се свободни да ме добавите в LinkedIn или да последвате моя среден акаунт за бъдещи статии — и вижте продукт, върху който работя: Netpulse