Экспорт данных
SDK поддерживает три транспорта для отправки телеметрии: HTTP (JSON и Protobuf), gRPC и InMemory (для тестов). Все экспортеры работают с любым транспортом — достаточно передать нужный объект транспорта.
Архитектура
Транспорт → Экспортер → Процессор → Провайдер- Транспорт (
ОтелHttpТранспорт,ОтелGrpcТранспорт,ОтелВПамятьТранспорт) — отвечает за физическую отправку данных. - Экспортер (
ОтелЭкспортерСпанов,ОтелЭкспортерЛогов,ОтелЭкспортерМетрик) — сериализует данные и передаёт транспорту. - Процессор — буферизирует и вызывает экспортер.
HTTP-транспорт
ОтелHttpТранспорт отправляет данные по OTLP/HTTP (порт 4318). Поддерживает два формата: http/protobuf (по умолчанию) и http/json.
// Protobuf — бинарный формат, более компактный
Транспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
// Транспорт.УстановитьПротокол("http/protobuf"); // явно, необязательноТранспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
Транспорт.УстановитьПротокол("http/json");Транспорт = Новый ОтелHttpТранспорт("http://otel-collector:4318");
Транспорт.УстановитьПротокол("http/protobuf");
Транспорт.УстановитьЗаголовок("Authorization", "Bearer my-token");
Транспорт.УстановитьЗаголовок("X-Team", "backend");
Транспорт.УстановитьТаймаут(15000); // 15 секундТранспорт = Новый ОтелHttpТранспорт("http://localhost:4318");
Транспорт.УстановитьСжатие("gzip");Эндпоинты HTTP
Экспортеры автоматически добавляют суффикс пути к базовому URL транспорта:
| Экспортер | Путь |
|---|---|
ОтелЭкспортерСпанов | /v1/traces |
ОтелЭкспортерЛогов | /v1/logs |
ОтелЭкспортерМетрик | /v1/metrics |
gRPC-транспорт
ОтелGrpcТранспорт отправляет данные по OTLP/gRPC (порт 4317) через библиотеку oint (OPI_GRPC).
Для использования gRPC необходимо установить
oint 1.33.0+:opm install oint
#Использовать opentelemetry
// gRPC-транспорт — порт 4317 (стандартный OTLP gRPC)
Транспорт = Новый ОтелGrpcТранспорт("http://localhost:4317");
// Все три экспортера работают с gRPC так же, как с HTTP
ЭкспортерСпанов = Новый ОтелЭкспортерСпанов(Транспорт);
ЭкспортерЛогов = Новый ОтелЭкспортерЛогов(Транспорт);
ЭкспортерМетрик = Новый ОтелЭкспортерМетрик(Транспорт);InMemory-транспорт (для тестов)
ОтелВПамятьТранспорт сохраняет сериализованные данные в памяти. Используется в тестах для проверки экспортируемых данных без реальной сети.
Транспорт = Новый ОтелВПамятьТранспорт();
Экспортер = Новый ОтелЭкспортерСпанов(Транспорт);
Процессор = Новый ОтелПростойПроцессорСпанов(Экспортер);
Провайдер = Новый ОтелПровайдерТрассировки(Ресурс, Процессор);
Трассировщик = Провайдер.ПолучитьТрассировщик("test");
// Работа
Спан = Трассировщик.НачатьСпан("тест", ОтелВидСпана.Внутренний());
Спан.Завершить();
// Проверка экспортированных данных
Записи = Транспорт.ПолучитьЗаписи();
// Записи — массив сериализованных OTLP-пакетовTLS
ОтелНастройкиTls позволяет настроить взаимную TLS-аутентификацию (mTLS):
НастройкиTls = Новый ОтелНастройкиTls();
НастройкиTls.УстановитьПутьКСертификатуCA("/etc/ssl/certs/ca.pem");
НастройкиTls.УстановитьПутьККлиентскомуКлючу("/etc/ssl/private/client.key");
НастройкиTls.УстановитьПутьККлиентскомуСертификату("/etc/ssl/certs/client.pem");
Транспорт = Новый ОтелHttpТранспорт("https://otel-collector:4318");
Транспорт.УстановитьНастройкиTls(НастройкиTls);TLS через переменные окружения:
| Переменная | Описание |
|---|---|
OTEL_EXPORTER_OTLP_CERTIFICATE | Путь к CA-сертификату (PEM) |
OTEL_EXPORTER_OTLP_CLIENT_KEY | Путь к клиентскому ключу (PEM) |
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE | Путь к клиентскому сертификату (PEM) |
OTEL_EXPORTER_OTLP_INSECURE | true — отключить проверку TLS (небезопасно) |
Полные примеры
Трассировка + Логирование + Метрики
#Использовать opentelemetry
Ресурс = Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name", "my-service");
// Один транспорт для всех сигналов
Транспорт = Новый ОтелHttpТранспорт("http://otel-collector:4318");
// Трассировка
ЭкспортерСпанов = Новый ОтелЭкспортерСпанов(Транспорт);
ПроцессорСпанов = Новый ОтелПакетныйПроцессорСпанов(ЭкспортерСпанов);
ПровайдерТрассировки = Новый ОтелПровайдерТрассировки(Ресурс, ПроцессорСпанов);
// Логирование
ЭкспортерЛогов = Новый ОтелЭкспортерЛогов(Транспорт);
ПроцессорЛогов = Новый ОтелПакетныйПроцессорЛогов(ЭкспортерЛогов);
ПровайдерЛогирования = Новый ОтелПровайдерЛогирования(Ресурс, ПроцессорЛогов);
// Метрики
ЭкспортерМетрик = Новый ОтелЭкспортерМетрик(Транспорт);
Читатель = Новый ОтелПериодическийЧитательМетрик(ЭкспортерМетрик, 60000);
Читатель.Запустить();
ПровайдерМетрик = Новый ОтелПровайдерМетрик(Ресурс, Читатель);
// Завершение — сбрасывает все буферы
ПровайдерТрассировки.Закрыть();
ПровайдерЛогирования.Закрыть();
ПровайдерМетрик.Закрыть();gRPC для всех сигналов
#Использовать opentelemetry
Ресурс = Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name", "my-service");
// gRPC-транспорт
Транспорт = Новый ОтелGrpcТранспорт("http://otel-collector:4317");
// Трассировка
ЭкспортерСпанов = Новый ОтелЭкспортерСпанов(Транспорт);
ПроцессорСпанов = Новый ОтелПакетныйПроцессорСпанов(ЭкспортерСпанов);
Провайдер = Новый ОтелПровайдерТрассировки(Ресурс, ПроцессорСпанов);
Трассировщик = Провайдер.ПолучитьТрассировщик("my-library");
Спан = Трассировщик.НачатьСпан("операция", ОтелВидСпана.Сервер());
Область = Спан.СделатьТекущим();
// ... работа ...
Область.Закрыть();
Спан.Завершить();
Провайдер.Закрыть();Смотрите также
- Автоконфигурация — настройка через
OTEL_EXPORTER_OTLP_* - Трассировка — экспортер спанов
- Логирование — экспортер логов
- Метрики — экспортер метрик
- API: ОтелHttpТранспорт
- API: ОтелGrpcТранспорт
