Ilgari, biz backend haqida gapirganda, biz odatda bitta, katta ma'lumotlar bazasiga ega bo'lgan bitta katta dasturga murojaat qilardik va monitoring uchun jurnallar etarli edi. Endi Kubernetes kabi texnologiyalar tufayli mikroservislar standartga aylandi. Ilovalar ko'proq va tarqatilgan va an'anaviy jurnallar endi ilovalarimizdagi muammolarni tuzatish va tashxislash uchun etarli emas.
Monitoringni tashkil qilish uchun ajoyib yechim OpenTelemetry bo'lib, u nosozliklarni tuzatish va tarqatilgan tizimlarning ishlashini tahlil qilish uchun ishlatilishi mumkin bo'lgan zamonaviy asboblar to'plamidir.
Ushbu maqola backend optimallashtirish bo'yicha o'z bilimlarini kengaytirishga intilayotgan IT mutaxassislari uchun mo'ljallangan. Quyida biz OpenTelemetry nima ekanligini, uning asosiy tushunchalari va u hal qilishga yordam beradigan muammolarni batafsil bayon qilamiz. Agar siz OpenTelemetry backend tizimlarini monitoring qilish va disk raskadrovka qilishga bo'lgan yondashuvingizni qanday o'zgartirishi, ularning ishonchliligi va samaradorligini oshirishi bilan qiziqsangiz - o'qing.
Yirik texnologiya kompaniyalari birinchi marta 2000-yillarning oxirida taqsimlangan loglarni yozish va kuzatish muammosiga duch kelishdi. 2010 yilda Google bir maqola chop etdi,
2014 yilda Kubernetes paydo bo'ldi, bu mikroservislar va boshqa bulutli taqsimlangan tizimlarning rivojlanishini sezilarli darajada soddalashtirdi. Bu ko'plab kompaniyalarning mikroservislarda taqsimlangan ro'yxatga olish va kuzatish bilan bog'liq muammolarga duch kelishiga olib keldi. Tarqalgan kuzatuvni standartlashtirish uchun CNCF tomonidan qabul qilingan OpenTracing standarti va Googlening OpenCensus loyihasi yaratildi.
2019 yilda OpenTracing va OpenCensus loyihalari OpenTelemetry nomi ostida birlashishni e'lon qildi. Ushbu platforma ko'p yillar davomida to'plangan eng yaxshi tajribalarni o'zida mujassam etgan bo'lib, ularning murakkabligidan qat'i nazar, kuzatuv, jurnal va o'lchovlarni istalgan tizimga uzluksiz integratsiyalash imkonini beradi.
Bugungi kunda OpenTelemetry shunchaki loyiha emas; bu telemetriya ma'lumotlarini yig'ish va uzatish uchun sanoat standartidir. U Google va Microsoft kabi mutaxassislar jamoasi va bozorda yetakchi kompaniyalar tomonidan ishlab chiqilgan va qo‘llab-quvvatlangan. Loyiha integratsiya va foydalanish jarayonini soddalashtirish uchun yangi imkoniyatlarga ega bo'lgan holda rivojlanishda davom etmoqda.
OpenTelemetry - bu ilova tashqi dunyo bilan o'zaro aloqada bo'lish uchun qanday signallarni yaratishi mumkinligini va ilovalar va umuman tizimning holatini kuzatish uchun bu signallarni qanday yig'ish va vizualizatsiya qilish mumkinligini aniqlaydigan keng qamrovli amaliyotlar va vositalar to'plami. Signallarning uchta asosiy turi kuzatuv, jurnalga yozish va o'lchovlarni yig'ishdir .
** Keling, har bir komponentni batafsil ko'rib chiqaylik: \
OpenTelemetry operatsiya kontekstlari tushunchasini taqdim etadi. Kontekst birinchi navbatda `trace_id`
(joriy operatsiya uchun identifikator) va `span_id`
(sub-so'rov uchun identifikator, sub-so'rovning har bir qayta urinishi noyob `span_id`
ega) kabi atributlarni o'z ichiga oladi.
Bundan tashqari, kontekst statik ma'lumotlarni o'z ichiga olishi mumkin, masalan, dastur o'rnatilgan tugun nomi yoki muhit nomi (prod/qa). OpenTelemetry terminologiyasida manbalar sifatida tanilgan ushbu maydonlar qidiruvni osonlashtirish uchun har bir jurnalga, metrikaga yoki izga biriktirilgan. Kontekstlar shuningdek, joriy oxirgi nuqta identifikatori ( `http_path: "GET /user/:id/info"`
) kabi dinamik ma'lumotlarni o'z ichiga olishi mumkin, ular tanlab jurnallar, o'lchovlar yoki izlar guruhlariga biriktirilishi mumkin.
OpenTelemetry kontekstlari kontekstni tarqatish protokollari yordamida turli ilovalar o'rtasida uzatilishi mumkin. Ushbu protokollar har bir HTTP yoki gRPC so'roviga qo'shiladigan sarlavhalar to'plamlaridan yoki navbatlar uchun xabarlar sarlavhalaridan iborat. Bu quyi oqim ilovalariga ushbu sarlavhalardan operatsiya kontekstini qayta qurish imkonini beradi.
Bu erda kontekstni tarqatishning ba'zi misollari:
B3-Propagation Bu dastlab Zipkin kuzatuv tizimi uchun ishlab chiqilgan sarlavhalar to'plami ( x-b3-*
). U OpenTracing-ga moslashtirilgan va ko'plab vositalar va kutubxonalar tomonidan ishlatilgan. B3-Propagation trace_id
/ span_id
va namuna olish zarurligini ko'rsatadigan bayroqni o'z ichiga oladi.
W3C Trace Context W3C ishchi guruhi tomonidan ishlab chiqilgan ushbu standart kontekstni tarqatish bo'yicha turli yondashuvlarni yagona standartda birlashtiradi va OpenTelemetry-da standart hisoblanadi. Ushbu standartlarni qo'llashning yaxshi namunasi - monitoring va disk raskadrovka aniqligini buzmasdan, turli texnologiyalar bilan amalga oshirilgan mikroservislar orqali o'tadigan so'rovning bajarilishini kuzatish.
Kuzatish - bu bir nechta mikroservislar orqali so'rov yo'lining vaqt jadvalini yozib olish va keyinchalik vizualizatsiya qilish jarayoni.
Vizualizatsiyada har bir satr "span" deb ataladi va o'ziga xos "span_id" ga ega. Ildiz oralig'i "iz" deb ataladi va butun so'rov uchun identifikator bo'lib xizmat qiluvchi "trace_id" ga ega.
Ushbu turdagi vizualizatsiya sizga quyidagilarga imkon beradi:
trace_id
va span_id
yaratadi.
Ko'rinib turgan soddaligiga qaramay, jurnallar muammolarni tashxislash uchun eng kuchli vositalardan biri bo'lib qolmoqda. OpenTelemetry kontekstli ma'lumotlarni qo'shish orqali an'anaviy jurnalni yaxshilaydi. Xususan, agar faol iz mavjud boʻlsa, “trace_id” va “span_id” atributlari avtomatik ravishda jurnallarga qoʻshiladi va ularni kuzatish vaqt jadvaliga bogʻlaydi. Bundan tashqari, jurnal atributlari OpenTelemetry kontekstidan tugun identifikatori kabi statik ma'lumotlarni hamda joriy HTTP so'nggi nuqta identifikatori (`http_path: "GET /user/:id"`) kabi dinamik ma'lumotlarni o'z ichiga olishi mumkin.
"Trace_id" dan foydalanib, joriy so'rov bilan bog'liq bo'lgan barcha mikroservislardan jurnallarni topishingiz mumkin, "span_id" esa pastki so'rovlarni farqlash imkonini beradi. Misol uchun, takroriy urinishlar bo'lsa, turli urinishlardagi jurnallar har xil "span_id" ga ega bo'ladi. Ushbu identifikatorlardan foydalanish real vaqt rejimida butun tizim xatti-harakatlarini tezkor tahlil qilish imkonini beradi, muammolarni aniqlashni tezlashtiradi va barqarorlik va ishonchlilikni oshiradi.
Ko'rsatkichlar to'plami kechikish, xatolik darajasi, resurslardan foydalanish va boshqalar kabi tizim ishlashi haqida miqdoriy ma'lumotlarni taqdim etadi. Ko'rsatkichlarning real vaqt rejimida monitoringi unumdorlikdagi o'zgarishlarga zudlik bilan javob berish, nosozliklar va resurslarning tugashini oldini olish, foydalanuvchilar uchun ilovaning yuqori mavjudligi va ishonchliligini ta'minlash imkonini beradi.
Prometey va Grafana kabi metrik saqlash va vizualizatsiya tizimlari bilan integratsiya ushbu ma'lumotlarni vizualizatsiya qilishni osonlashtiradi va monitoringni sezilarli darajada soddalashtiradi.
OpenTelemetry metrik kollektorlari Prometey va OpenMetrics standartlari bilan mos keladi, bu esa OpenTelemetry yechimlariga sezilarli o'zgarishlarsiz oson o'tish imkonini beradi. OpenTelemetry SDK trace_id misollarini ko'rsatkichlar bilan birga eksport qilish imkonini beradi, bu ko'rsatkichlarni jurnal misollari va izlari bilan bog'lash imkonini beradi.
Jurnallar, ko'rsatkichlar va kuzatish birgalikda tizim holatining to'liq ko'rinishini yaratadi:
Uchta asosiy komponentdan tashqari, OpenTelemetry Namuna olish, Bagaj va operatsiya kontekstini boshqarish tushunchalarini o'z ichiga oladi.
Yuqori yuklangan tizimlarda jurnallar va izlar hajmi juda katta bo'lib, infratuzilma va ma'lumotlarni saqlash uchun katta resurslarni talab qiladi. Ushbu muammoni hal qilish uchun OpenTelemetry standartlari signallarni tanlashni o'z ichiga oladi - izlar va jurnallarning faqat bir qismini eksport qilish imkoniyati. Misol uchun, so'rovlar foizidan, uzoq davom etgan so'rovlardan yoki xato so'rovlaridan batafsil signallarni eksport qilishingiz mumkin. Ushbu yondashuv muhim resurslarni tejash bilan birga statistik ma'lumotlarni yaratish uchun etarli miqdorda namuna olish imkonini beradi.
Biroq, agar har bir tizim mustaqil ravishda qaysi so'rovlarni batafsil nazorat qilishni hal qilsa, biz har bir so'rovning bo'lak ko'rinishiga ega bo'lamiz. Ba'zi tizimlar batafsil ma'lumotlarni eksport qilishi mumkin, boshqalari esa qisman eksport qilishi yoki umuman eksport qilmasligi mumkin.
Ushbu muammoni hal qilish uchun OpenTelemetry kontekstni tarqatish mexanizmlari `trace_id`/`span_id` bilan birga namuna olish bayrog`ini uzatadi. Bu, agar foydalanuvchi so'rovini qabul qiladigan dastlabki xizmat so'rovni batafsil nazorat qilish kerak deb qaror qilsa, boshqa barcha tizimlar ham shunga mos kelishini ta'minlaydi. Aks holda, resurslarni tejash uchun barcha tizimlar signallarni qisman yoki eksport qilmasligi kerak. Ushbu yondashuv "Bosh namuna olish" deb ataladi - so'rovni qayta ishlash boshida tasodifiy yoki ba'zi kiritilgan atributlarga asoslangan qaror.
Bundan tashqari, OpenTelemetry "Tail Sampling" ni qo'llab-quvvatlaydi, bu erda barcha ilovalar har doim barcha signallarni batafsil eksport qiladi, ammo oraliq bufer mavjud. Barcha ma'lumotlarni to'plagandan so'ng, bu bufer to'liq ma'lumotlarni saqlash yoki faqat qisman namunani saqlash haqida qaror qabul qiladi. Bu usul har bir soʻrov toifasi (muvaffaqiyatli/uzoq/xato) boʻyicha koʻproq vakillik namunasini olish imkonini beradi, lekin qoʻshimcha infratuzilmani sozlashni talab qiladi.
Bagaj mexanizmi trace_id
/ span_id
bilan ixtiyoriy kalit-qiymat juftlarini uzatishga imkon beradi, so'rovni qayta ishlash jarayonida avtomatik ravishda barcha mikroservislar o'rtasida o'tadi. Bu so'rov yo'li bo'ylab zarur bo'lgan qo'shimcha ma'lumotlarni uzatish uchun foydalidir, masalan, foydalanuvchi ma'lumotlari yoki ish vaqti muhiti sozlamalari.
W3C standarti bo'yicha bagajni jo'natish uchun sarlavhaga misol: tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE,userId=1c30032v5
Mana, Bagajdan foydalanishga misollar:
userId
, productId
yoki deviceId
kabi biznes konteksti maʼlumotlarini uzatish barcha mikroservislar orqali oʻtkazilishi mumkin. Ilovalar ushbu ma'lumotni avtomatik ravishda qayd etishi mumkin, bu esa asl so'rov uchun foydalanuvchi konteksti bo'yicha jurnalni qidirish imkonini beradi.
SDK yoki infratuzilma uchun maxsus konfiguratsiya parametrlari sozlamalari.
Marshrutlash bayroqlari Yuk balanslovchilariga marshrutlash qarorlarini qabul qilishda yordam beruvchi bayroqlar. Sinov paytida, ba'zi so'rovlar soxta backendlarga yo'naltirilishi kerak bo'lishi mumkin. Bagaj barcha xizmatlar orqali avtomatik ravishda uzatilganligi sababli, qo'shimcha protokollar yaratishning hojati yo'q - faqat yuk balanslagichida qoida o'rnating.
E'tibor bering, Bagajning ishlashga ta'siri minimal bo'lsa-da, ortiqcha foydalanish tarmoq va xizmat yukini sezilarli darajada oshirishi mumkin. Ishlash bilan bog'liq muammolarga yo'l qo'ymaslik uchun Bagaj orqali qaysi ma'lumotlarni o'tkazish kerakligini diqqat bilan tanlang.
OpenTelemetry-ni infratuzilma darajasida amalga oshirish OpenTelemetry-ni dastur arxitekturasiga integratsiyalash va ma'lumotlarni yig'ish uchun infratuzilmani sozlashni o'z ichiga oladi.
Jarayon to'rt bosqichdan iborat:
Ilovalarni integratsiyalashuvi Birinchi bosqichda OpenTelemetry SDK’lari ko‘rsatkichlar, jurnallar va izlarni to‘plash uchun to‘g‘ridan-to‘g‘ri ilovalarga birlashtirilib, har bir tizim komponentining ishlashi haqida doimiy ma’lumotlar oqimini ta’minlaydi.
Eksportchilarni sozlash To'plangan ma'lumotlar sizning ehtiyojlaringizga qarab, ilovalardan eksportchilar orqali tashqi tizimlarga, masalan, jurnalga yozish, monitoring, kuzatish yoki tahliliy tizimlar kabi keyingi ishlov berish uchun yo'naltiriladi.
Birlashtirish va saqlash Ushbu bosqich ma'lumotlarni normallashtirish, uni qo'shimcha ma'lumotlar bilan boyitish va tizim holatining yagona ko'rinishini yaratish uchun turli manbalardan olingan ma'lumotlarni birlashtirishni o'z ichiga olishi mumkin.
Ma'lumotlarni vizuallashtirish Nihoyat, qayta ishlangan ma'lumotlar Grafana (metrikalar va izlar uchun) yoki Kibana (jurnallar uchun) kabi tizimlarda asboblar paneli sifatida taqdim etiladi. Bu jamoalarga tizimning sog‘lig‘ini tezkor baholash, muammolar va tendentsiyalarni aniqlash hamda yaratilgan signallar asosida ogohlantirishlarni o‘rnatish imkonini beradi.
Ilova bilan integratsiya qilish uchun siz foydalanilayotgan dasturlash tili uchun tegishli OpenTelemetry SDK ni ulashingiz yoki OpenTelemetry-ni bevosita qo'llab-quvvatlaydigan kutubxonalar va ramkalardan foydalanishingiz kerak. OpenTelemetry ko'pincha ma'lum kutubxonalardan keng qo'llaniladigan interfeyslarni qo'llaydi, bu esa o'zgarishlarni almashtirish imkonini beradi. Misol uchun, Micrometer kutubxonasi odatda Java ekotizimida o'lchovlarni yig'ish uchun ishlatiladi. OpenTelemetry SDK asosiy dastur kodini o'zgartirmasdan metrik eksport qilish imkonini beruvchi Micrometer interfeyslarini amalga oshirishni ta'minlaydi. Bundan tashqari, OpenTelemetry eski OpenTracing va OpenCensus interfeyslarini amalga oshirishni taklif etadi, bu esa OpenTelemetry-ga silliq o'tishni osonlashtiradi.
IT tizimlarida OpenTelemetry ishonchli va samarali backends kelajagining kalitiga aylanishi mumkin. Ushbu vosita disk raskadrovka va monitoringni soddalashtiradi, shuningdek, dastur ishlashi va optimallashtirishni yangi darajada chuqur tushunish uchun imkoniyatlar ochadi. OpenTelemetry hamjamiyatiga qoʻshiling, bu yerda backend ishlab chiqish osonroq va samaraliroq boʻlgan kelajakni shakllantirishga yordam bering!