EMZETT.
Увійти

OpenTelemetry: єдина спостережуваність

Коротко: Відкритий стандарт із бібліотеками для єдиноманітного створення трас, метрик і журналів із застосунків та надсилання їх у будь-який інструмент аналізу.

Докладніше: OpenTelemetry (скорочено OTel) — проєкт Cloud Native Computing Foundation. Раніше у кожного постачальника були власні бібліотеки, і перехід означав переробку коду. OTel визначає спільні API, SDK і формат даних (OTLP), тож застосунки інструментуються один раз, а дані можуть іти в Jaeger, Prometheus, Grafana, Datadog чи інші системи.

Подробиці

Три сигнали

  • Траси (traces): шлях запиту через кілька сервісів, поділений на спани (spans) (окремі робочі кроки з тривалістю та властивостями). Trace ID зв’язує всі спани.
  • Метрики: числові ряди, як-от запити за секунду чи використання пам’яті.
  • Журнали (logs): текстові події, які можна пов’язати з trace ID.

Будівельні блоки

Інструментування створює дані, автоматично (агенти для Java, Node.js, Python та інших перехоплюють HTTP-виклики й звернення до баз даних) або вручну через API. SDK збирає й обробляє їх. Колектор (collector) — окремий сервіс, що приймає, фільтрує, збагачує та пересилає дані. Контекст передається між сервісами через заголовки на кшталт traceparent (W3C Trace Context).

Приклад ручного спана (JavaScript)

import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('shop');
await tracer.startActiveSpan('calculate-shipping', async (span) => {
  span.setAttribute('country', 'DE');
  // ... робота ...
  span.end();
});

Примітки

Траси дорогі, якщо зберігати все: звична вибірка (sampling), тобто лише частина запитів або всі невдалі та повільні. Стежте, щоб не записувати персональні дані чи секрети в атрибути. Проєкт зрілий різною мірою для різних сигналів; траси й метрики вважаються стабільними.

Див. також: Спостережуваність (observability), Prometheus і метрики, Журналювання (logging)