You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Позволяет собирать и отправлять телеметрию (трассировку, логи, метрики) в формате OTLP в любой совместимый коллектор — Grafana LGTM, OpenTelemetry Collector и другие. Поддерживает два транспорта: HTTP JSON и gRPC.
Возможности
Трассировка — создание спанов, вложенных спанов, установка атрибутов, событий, линков и статусов
Логирование — запись логов с уровнями серьезности и корреляцией с трассировкой
Интеграция с logos — аппендер для библиотеки logos, перенаправляющий логи в OpenTelemetry
Метрики — счетчики, реверсивные счетчики, датчики и гистограммы для измерения показателей
W3C Trace Context — внедрение и извлечение traceparent/tracestate HTTP-заголовков
Экспорт по OTLP/HTTP — отправка данных в формате JSON на стандартные эндпоинты /v1/traces, /v1/logs, /v1/metrics
Экспорт по OTLP/gRPC — отправка данных через gRPC с помощью библиотеки oint (OPI_GRPC)
Установка
opm install opentelemetry
Быстрый старт
Трассировка
#Использовать opentelemetry
// Создание ресурсаРесурс=Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name","my-service");// Создание транспорта и экспортераТранспорт=Новый ОтелHttpТранспорт("http://localhost:4318");Экспортер=Новый ОтелЭкспортерСпанов(Транспорт);Процессор=Новый ОтелПростойПроцессорСпанов(Экспортер);// Создание провайдера и трассировщикаПровайдер=Новый ОтелПровайдерТрассировки(Ресурс, Процессор);Трассировщик= Провайдер.ПолучитьТрассировщик("my-library","1.0.0");// Создание спана (SpanKind задаётся при создании — immutable)Спан= Трассировщик.НачатьСпан("обработка-запроса", ОтелВидСпана.Сервер());
Спан.СделатьТекущим();// спан становится текущим в контексте
Спан.УстановитьАтрибут("http.method","GET");
Спан.УстановитьАтрибут("http.url","/api/data");// Дочерний спан — НачатьСпан автоматически берёт родителя из контекстаДочернийСпан= Трассировщик.НачатьСпан("запрос-к-бд", ОтелВидСпана.Клиент());// ... выполнение работы ...
ДочернийСпан.УстановитьСтатус(ОтелКодСтатуса.Ок());
ДочернийСпан.Завершить();
Спан.УстановитьСтатус(ОтелКодСтатуса.Ок());
Спан.Завершить();// автоматически восстанавливает предыдущий контекст
Провайдер.Закрыть();
#Использовать opentelemetry
// Внедрение контекста в исходящий HTTP-запросСпан= Трассировщик.НачатьСпан("http-запрос", ОтелВидСпана.Клиент());Заголовки=Новый Соответствие();
ОтелW3CПропагатор.Внедрить(Спан.Контекст(), Заголовки);// Заголовки теперь содержат "traceparent" и опционально "tracestate"// Извлечение контекста из входящего запросаКонтекстСпана= ОтелW3CПропагатор.Извлечь(ВходящиеЗаголовки);Если КонтекстСпана <>НеопределеноТогдаСпан= Трассировщик.НачатьДочернийСпан("обработка", КонтекстСпана, ОтелВидСпана.Сервер());КонецЕсли;
Использование gRPC-транспорта
Все существующие экспортеры (спаны, логи, метрики) работают с обоими транспортами.
Достаточно заменить ОтелHttpТранспорт на ОтелGrpcТранспорт:
#Использовать opentelemetry
// gRPC-транспорт — порт 4317 (стандартный OTLP gRPC)Транспорт=Новый ОтелGrpcТранспорт("http://localhost:4317");// Все экспортеры принимают любой транспортЭкспортер=Новый ОтелЭкспортерСпанов(Транспорт);Процессор=Новый ОтелПростойПроцессорСпанов(Экспортер);Ресурс=Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name","my-service");Провайдер=Новый ОтелПровайдерТрассировки(Ресурс, Процессор);Трассировщик= Провайдер.ПолучитьТрассировщик("my-library","1.0.0");Спан= Трассировщик.НачатьСпан("операция", ОтелВидСпана.Сервер());// ... работа ...
Спан.Завершить();// Важно: закрывает gRPC-соединение
Транспорт.Закрыть();
Интеграция с logos
#Использовать opentelemetry
#Использовать logos
Ресурс=Новый ОтелРесурс();
Ресурс.Атрибуты().Установить("service.name","my-service");Транспорт=Новый ОтелHttpТранспорт("http://localhost:4318");Экспортер=Новый ОтелЭкспортерЛогов(Транспорт);Процессор=Новый ОтелПростойПроцессорЛогов(Экспортер);Провайдер=Новый ОтелПровайдерЛогирования(Ресурс, Процессор);ОтелЛоггер= Провайдер.ПолучитьЛоггер("my-library","1.0.0");// Создание аппендера и подключение к logosАппендер=Новый ОтелАппендерLogos(ОтелЛоггер);Лог= Логирование.ПолучитьЛог("oscript.app.myapp");
Лог.ДобавитьСпособВывода(Аппендер);// Теперь все сообщения logos автоматически отправляются в OpenTelemetry
Лог.Информация("Приложение запущено");
Лог.Ошибка("Произошла ошибка: файл не найден");