Обзор OpenTelemetry (OTLP)
StatusRadar предоставляет встроенную поддержку протокола OpenTelemetry (OTLP) для сбора трейсов, логов и метрик из ваших backend-приложений.
Что такое OpenTelemetry?
OpenTelemetry — это open-source фреймворк для observability, предназначенный для:
- Трейсы: распределённая трассировка запросов между сервисами
- Логи: структурированное логирование приложений
- Метрики: пользовательские метрики приложения и бизнес-метрики
Зачем нужен OTLP?
Вендор-нейтральный стандарт
- Промышленный стандарт протокола (проект CNCF)
- Отсутствие привязки к вендору
- Широкая поддержка языков (Java, Python, Go, Node.js, PHP, Ruby, .NET и др.)
Унифицированная observability
- Единый SDK для трейсов, логов и метрик
- Автоматическая инструментация популярных фреймворков
- Согласованный контекст между сигналами
Богатая экосистема
- Официальные SDK от OpenTelemetry
- Авто-инструментация фреймворков (Express, Django, Gin, Laravel)
- Тысячи интеграций от сообщества
Как это работает
Your App → OTLP SDK → StatusRadar Platform → Dashboard & Alerts
Поток данных:
- Ваше приложение: инструментировано с помощью OpenTelemetry SDK
- OTLP SDK: собирает трейсы, логи и метрики
- Платформа StatusRadar: принимает и обрабатывает телеметрию
- Dashboard: визуализация трейсов, поиск по логам, анализ метрик
Поддерживаемые сигналы
1. Трейсы
Отслеживание запросов между распределёнными сервисами:
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process_payment"):
# Your code here
result = charge_card(amount)
Сценарии использования:
- Визуализация потока запросов
- Поиск узких мест производительности
- Отслеживание ошибок между сервисами
- Построение карты зависимостей
2. Логи
Структурированное логирование приложений:
import { logs } from '@opentelemetry/api-logs';
logger.emit({
severityText: 'INFO',
body: 'Payment processed',
attributes: {
user_id: '12345',
amount: 49.99,
currency: 'USD'
}
});
Сценарии использования:
- Централизованная агрегация логов
- Структурированный поиск и фильтрация
- Корреляция трейсов и логов
- Журналы аудита
3. Метрики
Пользовательские метрики приложения:
import "go.opentelemetry.io/otel/metric"
meter := otel.Meter("my-service")
counter := meter.Int64Counter("requests_total")
counter.Add(ctx, 1, metric.WithAttributes(
attribute.String("method", "POST"),
attribute.String("endpoint", "/api/users"),
))
Сценарии использования:
- Отслеживание бизнес-KPI
- Метрики производительности приложения
- Пользовательские дашборды
- Мониторинг SLO
Эндпоинты
HTTP (рекомендуется)
https://otlp.statusradar.dev/v1/traces
https://otlp.statusradar.dev/v1/logs
https://otlp.statusradar.dev/v1/metrics
Аутентификация
Передавайте API-токен в заголовке:
curl -X POST https://otlp.statusradar.dev/v1/traces \
-H "X-App-Token: your-api-key-here" \
-H "Content-Type: application/json" \
-d @trace.json
Быстрый старт
1. Создайте OTLP-приложение
- Dashboard → Observability → Apps
- Нажмите «Create App»
- Выберите «Backend (OTLP)»
- Скопируйте свой API Token
2. Установите OpenTelemetry SDK
Инструкции по установке для вашего языка смотрите в официальных руководствах OpenTelemetry Language Instrumentation:
3. Настройте SDK для StatusRadar
Node.js
const { NodeSDK } = require('@opentelemetry/sdk-node');
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
const { Resource } = require('@opentelemetry/resources');
const sdk = new NodeSDK({
resource: new Resource({
'service.name': 'my-service',
'app.id': 'your-app-id'
}),
traceExporter: new OTLPTraceExporter({
url: 'https://otlp.statusradar.dev/v1/traces',
headers: {
'X-App-Token': 'your-api-key'
}
})
});
sdk.start();
Python
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
trace.set_tracer_provider(TracerProvider(
resource=Resource.create({
"service.name": "my-service",
"app.id": "your-app-id"
})
))
otlp_exporter = OTLPSpanExporter(
endpoint="https://otlp.statusradar.dev/v1/traces",
headers={"X-App-Token": "your-api-key"}
)
trace.get_tracer_provider().add_span_processor(
BatchSpanProcessor(otlp_exporter)
)
4. Проверьте поступление данных
- Dashboard → Observability → Apps → [Your App]
- Откройте вкладки «Traces», «Logs» или «Metrics»
- Данные должны появиться в течение нескольких секунд
Авто-инструментация
Node.js (Express, Fastify и др.)
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
const sdk = new NodeSDK({
instrumentations: [getNodeAutoInstrumentations()]
});
Автоматически инструментирует:
- HTTP/HTTPS-запросы
- Express, Fastify, Koa
- MongoDB, MySQL, PostgreSQL
- Redis, Memcached
- AWS SDK
- И ещё более 50 библиотек
Python (Django, Flask и др.)
После установки пакетов инструментации OpenTelemetry запустите своё приложение с авто-инструментацией:
opentelemetry-instrument python app.py
Инструкции по установке пакетов смотрите в руководстве по инструментации Python.
Go
import (
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
)
// Wrap HTTP handler
handler = otelhttp.NewHandler(handler, "my-server")
// Wrap gRPC client
conn, _ := grpc.Dial(addr,
grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor()),
)
Возможности
Распространение контекста
Автоматическое распространение контекста трейса между сервисами:
- W3C Trace Context (рекомендуется)
- B3 (Zipkin)
- Jaeger
Сэмплирование
Управление объёмом данных:
- Always on
- На основе вероятности
- На основе родительского спана
- Ограничение частоты
Атрибуты ресурса
Метаданные, прикрепляемые ко всей телеметрии:
- Имя сервиса, версия, окружение
- Информация о хосте, контейнере, поде
- Пользовательский бизнес-контекст
Безопасность
- Очистка PII (номера карт, токены, пароли)
- Редактирование на уровне полей
- Фильтрация чувствительных заголовков
Квоты и тарификация
Каждый план включает месячные квоты:
- Spans: количество спанов трейсов (по умолчанию: 100 000/месяц)
- Logs: объём хранения логов в МБ (по умолчанию: 1 ГБ/месяц)
- Metrics: количество хранимых точек данных (по умолчанию: без ограничения с лимитами по сроку хранения)
При превышении доступны top-up.
Сценарии использования
Микросервисы
- Трассировка запросов через 10+ сервисов
- Поиск медленных вызовов сервисов
- Визуализация зависимостей между сервисами
Мониторинг API
- Отслеживание производительности эндпоинтов
- Мониторинг частоты ошибок
- Оповещения о нарушениях SLO
Производительность базы данных
- Измерение времени выполнения запросов
- Поиск N+1-запросов
- Мониторинг использования пула соединений
Бизнес-метрики
- Отслеживание регистраций пользователей
- Мониторинг метрик выручки
- Оповещения о падении конверсии
Сравнение с RUM
| OTLP (Backend) | RUM (Frontend) | |
|---|---|---|
| Сценарий использования | Серверные приложения | Браузерные приложения |
| Сигналы | Трейсы, логи, метрики | Просмотры страниц, vitals, ошибки |
| Язык | Любой (Python, Go, Java и др.) | JavaScript |
| Протокол | OpenTelemetry | Собственный RUM SDK |
| Авто-инструментация | Да (фреймворки, БД, HTTP) | Да (vitals, ошибки, клики) |
Дальнейшие шаги
- Трейсы — настройка распределённой трассировки
- Логи — структурированное логирование
- Метрики — пользовательские метрики
- SDK — руководства по конкретным языкам
- Устранение неполадок — частые проблемы
Полезные ссылки
- Что такое OpenTelemetry?
- Зачем нужен OTLP?
- Вендор-нейтральный стандарт
- Унифицированная observability
- Богатая экосистема
- Как это работает
- Поддерживаемые сигналы
- 1. Трейсы
- 2. Логи
- 3. Метрики
- Эндпоинты
- HTTP (рекомендуется)
- Аутентификация
- Быстрый старт
- 1. Создайте OTLP-приложение
- 2. Установите OpenTelemetry SDK
- 3. Настройте SDK для StatusRadar
- 4. Проверьте поступление данных
- Авто-инструментация
- Node.js (Express, Fastify и др.)
- Python (Django, Flask и др.)
- Go
- Возможности
- Распространение контекста
- Сэмплирование
- Атрибуты ресурса
- Безопасность
- Квоты и тарификация
- Сценарии использования
- Микросервисы
- Мониторинг API
- Производительность базы данных
- Бизнес-метрики
- Сравнение с RUM
- Дальнейшие шаги
- Полезные ссылки