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)