Вступ до OpenTelemetry для початківців

Давайте обговоримо OpenTelemetry – уніфікований підхід до збору телеметричних відомостей, що не залежить від конкретного постачальника.

Забезпечення кращої прозорості роботи застосунку є серйозним викликом для будь-якого розробника, оскільки вимагає отримання даних телеметрії застосунку. Кембриджський словник визначає телеметрію як науковий метод або процес збору інформації про об’єкти на відстані, і передачу цієї інформації електронними засобами.

Наприклад, одне натискання на вебсайті або сеанс користувача створюють численні запити та відстеження між мережами, мікросервісами, базами даних тощо.

OpenTelemetry – це платформа для спостереження, набір продуманих компонентів, які можна використовувати як разом, так і окремо. Крім цього, розробники фреймворків та бібліотек, якими ми сьогодні користуємося, тепер мають стандартний спосіб вбудовувати телеметричні дані у ці інструменти, надаючи користувачам готове розуміння того, як ці фреймворки працюють зсередини.

Для розуміння OpenTelemetry, спочатку необхідно ознайомитися з концепцією розподіленого трасування.

Що таке розподілене трасування?

Зі збільшенням складності наших застосунків та зростанням кількості сервісів, залучених до обробки запитів користувачів та виконання транзакцій, стає надзвичайно важливо розуміти, як запити проходять через наші сервіси та як кожен сервіс впливає на загальну затримку. Саме цим займається розподілене трасування. Воно реєструє затримку запитів користувачів та час, який потрібен кожному мікросервісу на шляху для надання відповіді.

Коли надходить запит користувача, ми прагнемо створити трасування – повну інформацію, що описує, як наша система відповідає на цей запит. Трасування складається зі проміжків (span), і кожен проміжок позначає конкретну пару запит-відповідь, що бере участь в обробці запиту користувача. Батьківський проміжок відображає затримку, яку спостерігає кінцевий користувач. Дочірній проміжок використовується для аналізу того, як певний сервіс у розподіленій системі був викликаний і як він відповів, з урахуванням інформації про затримку.

Що таке OpenTelemetry?

OpenTelemetry – це проект з відкритим вихідним кодом, розміщений CNCF, який пропонує стандартизований підхід до генерації телеметричних даних. Він виник шляхом об’єднання OpenTracing, стандарту для створення даних трасування, та OpenCensus, стандарту для створення даних метрик.

OpenTelemetry надає уніфікований набір API, агентів, служб збору даних та бібліотек для фіксації розподілених трасувань та показників з вашого застосунку. OpenTelemetry стандартизує методи збору телеметричних даних та їх відправлення до серверної системи на ваш вибір. Це надає вам незалежний від постачальника підхід до інструментарію, і можливість змінювати серверні системи без необхідності переналаштовувати код.

Таким чином, ви можете налаштувати свої програми, використовуючи незалежного від постачальника агента, і одночасно передавати свої показники та трасування постачальнику SaaS, наприклад Datadog. Якщо згодом ви захочете змінити постачальника (наприклад, з Datadog на Dynatrace), ви зможете зробити це, не вносячи змін до коду програми.

Проект OpenTelemetry має на меті забезпечити єдиний набір бібліотек та API-агентів для збору показників та розподілених трасувань з ваших програм. Це стосується багатьох мов та платформ. Проект OpenTelemetry також включає в себе службу збору даних та має спеціальне сховище для специфікацій. Важливо розуміти, що OpenTelemetry – це не Jaeger або Prometheus, які є спостережуваними бекендами. Але він допомагає експортувати дані до відкритих та комерційних систем.

Нижче наведено можливості, які надає OpenTelemetry:

  • Стандартизація збору телеметричних даних, якої можуть дотримуватися організації, що спрощує перехід між постачальниками.
  • Незалежна від постачальника семантична конвенція з відкритим стандартом для процесу збору даних.
  • Колектор, який можна розгорнути як агент, шлюз, або іншими способами.
  • Підтримка декількох форматів розповсюдження контексту для міграції.
  • Комплексне рішення для створення, передачі, збору, обробки та експорту телеметричних даних.
  • Інструмент для паралельної відправки даних до різних місць призначення з повним контролем над ними.

Компоненти OpenTelemetry

Нижче наведено основні компоненти OpenTelemetry:

  • Proto: цей компонент використовується для визначення колекторів, інструментальних бібліотек та іншого, що є незалежними від мови типами інтерфейсу для OpenTelemetry.
  • Колектор: Колектори використовуються для отримання, обробки та експорту телеметричних даних. Ця реалізація колекторів має бути незалежною від постачальника. За замовчуванням, всі телеметричні дані експортуються бібліотеками приладів у цьому місці.
  • Специфікація: цей компонент описує вимоги та очікування від реалізації різними мовами, що складаються з API, SDK та даних. API генерує телеметричні дані, обробку та можливості експорту для впровадження API, які надаються SDK. Data має семантичні угоди для підтримки всіх видів постачальників без зміни коду.
  • Інструментальні бібліотеки: вони доступні кількома мовами як частина проекту OpenTelemetry. Ці бібліотеки використовуються для забезпечення спостережуваності для інших бібліотек, щоб усі застосунки спостерігалися за допомогою викликів OpenTelemetry API.

Архітектура OpenTelemetry

Зображення з New Relic

На високому рівні OpenTelemetry складається з трьох основних частин:

  • Набір API для інструментальних програм, бібліотек та фреймворків.
  • SDK, який реалізує API.
  • Додатковий колектор, який може отримувати, агрегувати та експортувати телеметричні дані туди, куди вам потрібно.

Мета API – надати інструменти для бібліотек та програмного коду. API має чотири основні розділи: трасування, вимірювачі, спільний контекст та семантичні угоди.

  • API Tracer підтримує створення, анотування та завершення проміжків.
  • API вимірювача складається з кількох метричних інструментів. Прикладами таких інструментів є спостерігачі, реєстратори значень, лічильники.
  • Ви можете відстежувати та виконувати span-контекст, увімкнувши контекстний API, і поширювати цей контекст як усередині вашої системи, так і за її межами.
  • Усі вказівки та правила для основного іменування, наприклад іменування проміжків, атрибутів, міток та метричних інструментів, присутні в семантичних угодах. Ці угоди впроваджуються для забезпечення узгодженості між різними мовними реалізаціями та зовнішніми інструментами.

У спільному контексті реалізація контексту знаходиться між трасувальником та лічильником і дозволяє всім записам показників, які не є спостерігачем, відбуватися в контексті виконання проміжку. Функція, яка дозволяє SDK фіксувати зразки проміжків для значень показників. Ви можете налаштувати контекст за допомогою пропагаторів, які дозволяють поширювати контекст проміжку в систему та з неї, що забезпечує справжнє розподілене трасування.

Колектор є важливою частиною архітектури OpenTelemetry. Це окрема служба, яка може отримувати, обробляти та експортувати дані телеметрії з різних джерел, включаючи OpenCensus, Zipkin, Jaeger та протокол OpenTelemetry. За допомогою колекторів ви можете експортувати проміжки та показники до кількох постачальників та систем телеметрії з відкритим кодом.

Архітектура OpenTelemetry пропонує готове комплексне рішення телеметрії. Ви також можете налаштувати її, використовуючи кілька точок розширення, відповідно до ваших потреб.

Як працює OpenTelemetry?

Встановіть клієнт OpenTelemetry всередині кожної служби у вашому розгортанні. Клієнт — це SDK, а SDK має API. Фреймворки та бібліотеки ваших програм використовують цей API інструментів для опису своєї роботи. Потім SDK експортує зібрані спостереження до служби обробки даних під назвою Collector.

OpenTelemetry має власний протокол даних, OTLP, але збирач може перетворювати OTLP у різні формати, включно з Zipkin, Jaeger та Prometheus. Важливо відзначити, що OpenTelemetry не пропонує власного бекенду або інструменту аналізу; це пов’язано з тим, що основна мета OpenTelemetry – стандартизація. Мета полягає в розробці універсальної мови для опису роботи комп’ютерів у хмарному середовищі. Ціль не полягає у стандартизації методів аналізу цих даних. Натомість, ми сподіваємося, що OpenTelemetry допоможе просунути світ спостережливості вперед, надаючи можливість швидко розпочати роботу з новими інструментами аналізу без необхідності перебудовувати всю екосистему телеметричного програмного забезпечення.

Коли ви передаєте велику кількість даних через систему, потрібно враховувати багато нюансів. На щастя, OpenTelemetry продумав усе і має рішення для кожної з цих ситуацій. OpenTelemetry є гнучким і підтримує різні формати поширення контексту. Це означає, що навіть при наявності стандарту, є певна свобода вибору в його рамках. Отже, якщо ви використовуєте щось на зразок формату контексту трасування w3c або розповсюдження b3, це різні стандарти в рамках стандарту, які дозволяють вашим службам з’єднувати точки.

Висновок

OpenTelemetry збирає різноманітні спостереження, найважливішими з яких є розподілені показники трасування та системні ресурси. Замість того, щоб розглядати їх як окремі сигнали, OpenTelemetry об’єднує їх та надає індексацію та контекст, що дозволяє агрегувати та перехресно індексувати всі ці сигнали на сервері.

Окрім збору даних, OpenTelemetry надає засоби обробки та конвеєрної обробки даних, що дозволяє змінювати формати даних, маніпулювати вашими даними та надає усі необхідні інструменти для створення надійного конвеєра телеметрії в сучасній системі.

Отже, це все про OpenTelemetry, спробуйте цей інструмент.