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. Знання цих термінів допоможе вам створити більш спостережувані системи і зробити значний внесок у обговорення надійності.