Skip to content

ОтелПровайдерТрассировки ​

Провайдер трассировки SDK (SdkTracerProvider).

Описание ​

Потокобезопасный объект. Создаёт и кэширует трассировщики (ОтелТрассировщик) по идентичности области: имени и версии библиотеки, адресу схемы и атрибутам. Управляет цепочкой процессоров спанов, ресурсом и сэмплером.

Аналог Java SDK: SdkTracerProvider.

Экземпляр создаётся через ОтелПостроительПровайдераТрассировки.

Методы ​

ПостроительТрассировщика ​

Создает построитель трассировщика (TracerBuilder).

ПараметрТипПо умолчаниюОписание
ИмяБиблиотекиСтрока—Имя инструментирующей библиотеки

Возвращает: ОтелПостроительТрассировщика


ПолучитьТрассировщик ​

Создает или возвращает трассировщик для указанной библиотеки. Повторный вызов с теми же именем, версией, атрибутами и адресом схемы возвращает тот же трассировщик; если отличается хотя бы один параметр — другой.

ПараметрТипПо умолчаниюОписание
ИмяБиблиотекиСтрока—Имя инструментирующей библиотеки
ВерсияБиблиотекиСтрока""Версия библиотеки
АтрибутыОбластиОтелАтрибутыНеопределеноАтрибуты InstrumentationScope
АдресСхемыСтрока""URL схемы телеметрии

Возвращает: ОтелТрассировщик


ДобавитьПроцессор ​

Добавляет процессор спанов в цепочку.

ПараметрТипПо умолчаниюОписание
ПроцессорПроцессор спанов—Встроенный (простой, пакетный, композитный) или свой процессор, см. ИнтерфейсПроцессорСпанов

Сэмплер ​

Возвращает сэмплер провайдера: заданный УстановитьСэмплер построителя или сэмплер по умолчанию ParentBased(root=AlwaysOn). Трассировщики провайдера запрашивают у него решение при создании каждого спана.

Возвращает: ИнтерфейсСэмплер — встроенный сэмплер из ОтелСэмплер или свой; описание сэмплера возвращает его метод Описание()


Ресурс ​

Возвращает ресурс провайдера.

Возвращает: ОтелРесурс


СброситьБуфер ​

Принудительно отправляет все накопленные данные через процессоры. СброситьБуфер вызывается у каждого процессора, даже если предыдущий бросил исключение; все процессоры укладываются в общий срок — каждому передаётся оставшееся время.

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло0Таймаут в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЭкспорта — ошибка, если хотя бы один процессор сообщил о сбое или бросил исключение; иначе таймаут, если истёк срок или процессор сообщил о таймауте; иначе успех


ПринудительноВыгрузитьСРезультатом ​

Принудительно отправляет накопленные данные через процессоры так же, как СброситьБуфер, но возвращает ОтелРезультатЗакрытия с описаниями ошибок, а срок по умолчанию — 30 секунд. После Закрыть процессоры не вызываются: возвращается ошибка «Провайдер трассировки закрыт».

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло30000Таймаут операции в миллисекундах (0 — без ограничения)

Возвращает: ОтелРезультатЗакрытия — ошибка, если провайдер закрыт или хотя бы один процессор сообщил о сбое или бросил исключение (описания ошибок перечислены через ; ); иначе таймаут, если истёк срок или процессор сообщил о таймауте; иначе успех


СброситьБуферАсинхронно ​

Запускает СброситьБуфер() — без ограничения срока — в фоновом задании и сразу возвращает обещание библиотеки async.

Возвращает: Обещание — Получить(Таймаут) обещания ждёт окончания выгрузки и возвращает ОтелРезультатЭкспорта; если выгрузка не закончилась за Таймаут миллисекунд, Получить выбрасывает исключение


Закрыть ​

Завершает работу провайдера. Закрыть вызывается у каждого процессора в пределах общего срока — даже после исключения в предыдущем и после истечения срока (тогда процессор получает 1 мс и завершается без ожидания). Повторный вызов ничего не делает и возвращает успех.

После закрытия ПолучитьТрассировщик возвращает отключённый трассировщик — его Включен() возвращает Ложь, спаны он создаёт незаписывающие, — а ПринудительноВыгрузитьСРезультатом возвращает ошибку.

ПараметрТипПо умолчаниюОписание
ТаймаутМсЧисло30000Таймаут операции в миллисекундах

Возвращает: ОтелРезультатЗакрытия — ошибка, если хотя бы один процессор вернул ошибку или бросил исключение (описания ошибок перечислены через ; ); иначе таймаут, если истёк срок или процессор сообщил о таймауте; иначе успех


ЗакрытьАсинхронно ​

Запускает Закрыть() — с таймаутом по умолчанию 30000 мс — в фоновом задании и сразу возвращает обещание библиотеки async.

Возвращает: Обещание — Получить(Таймаут) обещания ждёт закрытия и возвращает ОтелРезультатЗакрытия; если закрытие не закончилось за Таймаут миллисекунд, Получить выбрасывает исключение

Внутренние методы ​

Экспортированы только для вызова из других модулей SDK (в OneScript нет внутренней видимости), приложению вызывать их не нужно:

  • Процессор — внутренний композитный процессор с цепочкой процессоров: трассировщик передаёт его спанам и проверяет по нему, есть ли процессоры;
  • ЛимитыСпана — лимиты, которые трассировщик передаёт создаваемым спанам;
  • Включен — признак SDK-режима провайдера, его читает трассировщик. Ложь — у no-op провайдера, который ОтелГлобальный.ПолучитьПровайдерТрассировки() возвращает, пока не задан глобальный провайдер и нет SDK с провайдером трассировки: трассировщики такого провайдера создают незаписывающие спаны, генератор идентификаторов не вызывается. Закрытие признак не меняет;
  • УстановитьВключен — переключает SDK-режим: ОтелГлобальный выключает им no-op провайдер;
  • Закрыт — Истина с начала первого вызова Закрыть; SDK его не вызывает, его используют тесты;
  • СгенерироватьИдТрассировки, СгенерироватьИдСпана — идентификаторы нового спана от генератора из УстановитьГенераторИд построителя или от генератора по умолчанию; некорректный идентификатор генератора пишется в лог ошибкой и заменяется идентификатором генератора по умолчанию.

Пример ​

bsl
Провайдер = Новый ОтелПостроительПровайдераТрассировки()
    .УстановитьРесурс(Ресурс)
    .ДобавитьПроцессор(Процессор)
    .УстановитьСэмплер(ОтелСэмплер.НаОсновеРодителя(ОтелСэмплер.ПоДолеТрассировок(0.25)))
    .Построить();

Трассировщик = Провайдер.ПолучитьТрассировщик("мой-сервис");

См. также ​