OpenTelemetry & Observability Vocabulary: The Three Pillars Explained (англійською)

Вивчайте словниковий запас спостережливості — сліди, діапазони, метрики, журнали, OpenTelemetry SDK, OTLP, вибірку, SLO, а також три стовпи спостережливості з поясненнями для розробників.

Оскільки системи стають більш розподіленими, розуміння того, що відбувається всередині них, стає все складнішим. Спостережливість є практикою розуміння внутрішнього стану системи з даних, які вона виробляє. OpenTelemetry (OTel) є відкритим стандартом, який об’єднує, як програми випускають ці дані. У цьому довіднику пояснюється словниковий запас, який вам слід знати, щоб брати участь у обговоренні можливості спостереження з вашою командою.


Спостережливість проти моніторингу

Monitoring

** Нагляд ** перевіряє заздалегідь визначені умови — чи працює сервер? Чи використовується більше 80% процесора? Це повідомляє вам, що щось не так, на основі показників, які ви вирішили відстежувати заздалегідь.

Наші попередження про моніторинг були викликані — CPU на серверах API перевищує 90 %

Observability

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

“Мониторинг показал, что есть проблема. Спостережливість допомогла нам зрозуміти * чому * послуга оплати була повільною — ми відстежили її до API платежів вниз по течії»

Три стовпи

Три стовпи спостережливості це сліди, метрики і журнали. Разом вони надають повну картину поведінки системи.


Шляхи і шляхи

Trace

** Trace ** представляє повний шлях одного запиту, коли він проходить через розподілену систему. Трассування складається з декількох ** обсягів **, пов’ язаних між собою за допомогою спільного ідентифікатора трассування.

«Відшукати слід для цього ідентифікатора запитів — він точно покаже, яка служба додає затримку.»

Span

span позначає одну одиницю роботи у межах трасування — наприклад, один запит бази даних, один виклик HTTP або одне виконання функції. Кожен проміжок записує час початку, тривалість і контекстні метадані (атрибути).

«Трак показує, що запит на базу даних займає 800 мс — це наше вузьке місце» «Додати нетиповий проміжок навколо логіки обробки файлів, щоб ми могли побачити, скільки часу це займе у виробництві»

Контекстне поширення

** Контекстне розповсюдження ** — це механізм передачі контексту трасування (ІД трасування, ІД діапазону, прапорці) з однієї служби до іншої — зазвичай за допомогою заголовків HTTP (traceparent, tracestate у форматі W3C). Без неї сліди перетинають межі служб.

“Трасування закінчується на краю сервісу і не продовжується в API нижче. Перевірте, чи налаштовано поширення контексту з обох сторін.”

Baggage

** Багаж ** — це набір визначених користувачем пар ключ- значення, які приєднано до контексту трасування і розповсюджено за межами служб. Він може переносити інформацію, наприклад, userId або tenantId, через всю подорож запиту.

«Ми приєднуємо tenantId до багажу, тому кожен проміжок у трасі має мітку з ним — це робить фільтрування набагато простішим»


Metrics

Metric

** Метрика ** — це числове вимірювання, яке збирається протягом певного часу. Три основних типи метричної інформації у OpenTelemetry:

  • ** Count ** — значення, яке тільки збільшується (наприклад, загальна кількість запитів, загальна кількість помилок).
  • ** Gauge ** — значення, яке може зростати або зменшуватися (наприклад, поточне використання пам’ яті, активні з’ єднання).
  • ** Гістограма ** — записує розподіл значень (наприклад, процентилі затримки запиту).

«Створити лічильник метрики для невдалих спроб входу — ми хочемо попередити, якщо він підвищиться» «Використовуйте гістограму для затримки запиту, щоб ми могли побачити p50, p95 і p99 на панелі управління»

Exemplar

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

“Затримка p99 досягла піку о 2 годині ранку. Натисніть на екземпляр, щоб побачити слід з того самого моменту»


Logs

Журнал кореляції

** Кореляція журналів ** означає додавання ідентифікаторів трасування і ідентифікаторів діапазонів до записів журналів, щоб ви могли переходити між журналами і відповідними трасуваннями. Це з’єднує три стовпи разом.

Додати контекст слідування до ваших журналів — включити traceId і spanId в кожній лінії журналу, щоб ми могли знайти відповідні журнали з слідування


Відкрита архітектура

Офіційний сайт СДПУ(о)

** OpenTelemetry SDK ** — це бібліотека, яка залежить від мови, яку ви додаєте до вашої програми для передачі даних телеметрії (трасування, метрики, журнали). SDK доступні для більшості мов: Java, Python, Go, Node.js,.NET і інших.

«Ми використовуємо OpenTelemetry Node.js SDK для інструментування API-сервісу»

Офіційний веб-сайт

** API OpenTelemetry ** — це інтерфейс, який використовується кодом вашої програми для запису діапазонів і метрик. Він відокремлений від SDK, тому бібліотеки можуть використовувати API, не залежно від будь-якої конкретної реалізації SDK.

Бібліотека використовує API OTel — вона автоматично видає телеметричні дані, якщо SDK налаштований в програмі

Відкритий телеметричний збірник

** OpenTelemetry Collector ** — це автономний компонент, який отримує, обробляє і експортує дані телеметрики. Цей модуль виконує функції конвеєра — отримує дані з ваших програм і пересилає їх до серверів, таких як Jaeger, Prometheus або Datadog.

«Ми маршрутизуємо всю телеметрию через OTel Collector, тому ми можемо змінити бекенд, не торкаючись коду програми»

Протокол OpenTelemetry (OTLP)

** OTLP ** — це стандартний протокол для надсилання даних телеметрики до збірника OpenTelemetry або сумісного сервера. Він працює через gRPC або HTTP.

«Налаштувати SDK для експорту до колекціонера через OTLP на порту 4317»

Instrumentation

** Інструментація ** — це додавання коду спостереження до вашої програми. Існує два типи:

  • ** Автоматично інструментування ** — SDK автоматично інструментує популярні бібліотеки (HTTP- клієнти, драйвери баз даних тощо) без зміни коду.
  • ** Ручне інструментування ** — ви пишете код для створення нетипових діапазонів і запису певних даних.

“Автоматична інструментація обробляє HTTP і базу даних автоматично. Додати ручне інструментування для бізнес-логіки, яка має значення для нас»


Sampling

Головний зразок

** Вибірка за головою ** визначає вибірку на початку трасування (при створенні першого діапазону). Це просте і не вимагає багато часу, але рішення приймається ще до того, як ви дізнаєтеся, чи цікавий слід.

«Ми використовуємо головне вибіркове вимірювання на 10% — ми скидаємо 90% слідів, що добре для нормального руху.»

На основі хвоста вибірка

** Вибірка за хвостом ** робить вибірку на * кінці * трасування, після того, як буде зібрано всі діапазони. Цей параметр надає вам змогу зберегти 100% повільних слідів або слідів помилок під час вибірки звичайних слідів.

«Налаштувати хвостове вибіркове вибіркування в Collector, щоб завжди зберігати сліди з помилками або затримкою понад 1 секунду.»


Слои и тревога

Сло́ва (словен

SLO є внутрішньою метою для надійності послуги - наприклад, “99,9% запитів повинні бути виконані за менше ніж 200 мс.” SLO походять від SLA (Service Level Agreements) і попередження про бюджет помилок.

“Наша SLO - 99,5% доступності. Ми спалюємо наш бюджет на помилки швидше, ніж очікувалося цього тижня» «Попередження, коли рівень помилок достатньо високий, що ми пропустимо наш SLO протягом наступної години»


Як використовувати цю функцію в прикладі

В инциденте:

«Відтягніть слід для невдалих запитів — лінії покажуть нам точно, звідки походить затримка.»

** В архітектурному огляді: **

“Ми повинні додати авто-інструментацію до нової служби, перш ніж вона піде в виробництво. Інакше ми не матимемо видимості, коли щось піде не так»

** В планах: **

«Давайте встановимо вибірку на основі хвоста — зараз нам бракує слідів для рідкісних, але критичних випадків помилок»

В пост-мортном:

“У журналах не было идентификаторов следов, так что мы не могли их соотнести со следами. Давайте виправимо кореляцію журналу перед наступним інцидентом»

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

Поширені запитання

Про що ця стаття "OpenTelemetry & Observability Vocabulary: The Three Pillars Explained (англійською)"?

Вивчайте словниковий запас спостережливості — сліди, діапазони, метрики, журнали, OpenTelemetry SDK, OTLP, вибірку, SLO, а також три стовпи спостережливості з поясненнями для розробників.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "OpenTelemetry & Observability Vocabulary: The Three Pillars Explained (англійською)"?

Приблизно 9 min.