Skip to content

ОтелКонфигурационнаяФабрика ​

Модуль создания SDK по модели файла конфигурации.

Описание ​

Строит ОтелSdk по модели ОтелКонфигурация, которую возвращает ОтелФайловаяКонфигурация.Разобрать. Аналог Java SDK: OpenTelemetryConfigurationFactory. ОтелАвтоконфигурация.Инициализировать() при заданном в менеджере параметров ключе otel.config.file (переменной OTEL_CONFIG_FILE) создаёт SDK функцией Создать и регистрирует его в ОтелГлобальный; сама фабрика SDK глобально не регистрирует.

Что строит Создать по секциям файла:

  • disabled: true — SDK, который не экспортирует телеметрию, остальные секции не читаются: провайдер трассировки с сэмплером ВсегдаВыключен (спаны не записываются), провайдеры логирования и метрик без процессоров и читателей, ресурс с атрибутами по умолчанию (как СоздатьРесурс() без секции resource). Пропагаторы не задаются: Сдк.Пропагаторы() возвращает ОтелНоопПропагатор;
  • resource — ресурс, общий для всех провайдеров (см. СоздатьРесурс);
  • tracer_provider, logger_provider, meter_provider — провайдеры сигналов (СоздатьПровайдерТрассировки, СоздатьПровайдерЛогирования, СоздатьПровайдерМетрик). Провайдер создаётся, только если секция есть в файле. Без секции SDK получает no-op провайдер этого сигнала (см. ОтелSdk), как требует схема файла;
  • attribute_limits — общие лимиты атрибутов спанов и записей логов; как они сочетаются с limits провайдера, см. СоздатьПровайдерТрассировки и СоздатьПровайдерЛогирования;
  • propagator — пропагаторы SDK (см. СоздатьПропагаторы); без секции — ОтелНоопПропагатор.

log_level (уровень внутреннего логгера SDK) не поддерживается: ключ проходит проверку по схеме, но на SDK не влияет. Внутренние логи SDK пишутся логгерами logos с именами oscript.lib.opentelemetry.*, и их уровень задаётся настройками logos — в logos.cfg рядом со стартовым сценарием или в переменной LOGOS_CONFIG: настройка узла иерархии действует на все логгеры SDK, rootLogger — на все логгеры процесса. Без настроек logos уровень — INFO, как у log_level по умолчанию.

logger.oscript.lib.opentelemetry=DEBUG

Проверка модели. До создания компонентов Создать проверяет модель по схеме файла конфигурации по тем же правилам, по которым Разобрать проверяет файл (см. ОтелФайловаяКонфигурация.ПроверитьМодель): типы значений, обязательные свойства, допустимые значения перечислений и границы чисел. Так проверяется и модель, собранная в коде: спецификация Configuration SDK (Create) требует ошибку на значении, недопустимом по схеме. Ошибка перечисляет все нарушения с путём свойства схемы, например /tracer_provider/processors/0/batch/schedule_delay: Значение -1 меньше минимума 0. Модель проверяется и при disabled: true, как файл при разборе. По схеме у провайдера трассировки и логирования обязателен хотя бы один процессор (processors), у провайдера метрик — хотя бы один читатель (readers): провайдер без них — ошибка.

Значение null. Свойство со значением null получает значение по умолчанию (Configuration SDK, Create). В модели из кода null — Неопределено: фабрика строит SDK по копии модели, в которой такое поле получает значение нового объекта того же класса, например Интервал = Неопределено у читателя — 60000 мс. ЗадержкаОтправки = Неопределено пакетного процессора — 5000 мс у спанов и 1000 мс у записей лога. Модель, переданная фабрике, не меняется.

Экспортеры процессоров и читателей отправляют данные по OTLP или выводят их в консоль:

  • otlp_http — фабрика создаёт ОтелHttpТранспорт с протоколом http/protobuf, при encoding: json — http/json. Адрес endpoint — URL со схемой http или https, используется как есть, включая путь (по умолчанию http://localhost:4318/v1/<сигнал>); compression: gzip включает сжатие;
  • otlp_grpc — фабрика создаёт ОтелGrpcТранспорт. endpoint — адрес коллектора без пути (по умолчанию http://localhost:4317): URL со схемой http или https или адрес без схемы, соединение с которым идёт по TLS; сервис сигнала транспорт выбирает сам. Сжатие клиент OPI_GRPC не поддерживает (OpenIntegrations#112): при compression: gzip фабрика пишет предупреждение в лог, данные отправляются без сжатия. Ответ клиент принимает не больше 4 MiB, другой лимит задать нельзя (OpenIntegrations#113): при max_response_size не 4194304 фабрика пишет предупреждение в лог;
  • console — фабрика создаёт ОтелКонсольныйТранспорт: каждый экспорт выводится в стандартный вывод одной строкой OTLP JSON, срок экспорта — 10000 мс. У экспортера метрик действуют temporality_preference и default_histogram_aggregation.

У обоих экспортеров max_request_size — наибольший размер запроса до сжатия в байтах (по умолчанию 64 MiB, 0 — без ограничения): запрос больше лимита не отправляется; max_response_size у otlp_http — наибольший размер ответа (по умолчанию 4 MiB): экспорт с ответом больше лимита неуспешен.

У обоих экспортеров timeout — срок каждого экспорта в миллисекундах вместе с повторами и таймаут запроса (по умолчанию 10000, 0 — без ограничения); заголовки (у gRPC — метаданные вызова) берутся из headers и headers_list, при совпадении имён действует headers, а заголовок headers со значением null пропускается, как требует схема файла.

Значения по описанию свойств. Схема описывает часть ограничений только текстом (description), а спецификация Configuration SDK (Create) требует ошибку и на значении, недопустимом по такому описанию. Фабрика выбрасывает исключение, если:

  • значение атрибута ресурса не соответствует его type (без type — string): например, число у атрибута без type или дробное число у int; атрибут со значением null пропускается;
  • attributes_list или headers_list не разбирается в формате переменной окружения (OTEL_RESOURCE_ATTRIBUTES, OTEL_EXPORTER_OTLP_HEADERS): элемент не в формате ключ=значение, пустой ключ, некорректный percent-encoding;
  • compression — не gzip и не none: другие алгоритмы SDK не поддерживает;
  • у endpoint схема не http и не https (у otlp_http адрес без схемы — тоже ошибка);
  • в tls задан только один из key_file и cert_file, или ca_file, key_file, cert_file — не абсолютный путь или путь к файлу, которого нет.

tls фабрика передаёт транспорту. HTTP-клиент OneScript файлы сертификатов не применяет и сертификат сервера по HTTPS не проверяет: транспорт пишет об этом предупреждение в лог. gRPC-транспорт проверяет сертификат сервера по ca_file, а insecure: true у адреса без схемы — соединение без TLS; клиентский ключ и сертификат (mTLS) клиент OPI_GRPC не поддерживает (OpenIntegrations#102), транспорт пишет предупреждение в лог.

Транспорт создан фабрикой, поэтому экспортер закрывает его вместе с собой: Сдк.Закрыть() закрывает провайдеры, их процессоры и читатели, экспортеры и транспорты. Пакетные процессоры и периодические читатели запускают фоновый экспорт сразу при создании. Таймаут Сдк.Закрыть() без параметра — 30000 мс.

Компоненты, которых нет в SDK. Экспортер, процессор, pull-экспортер, продюсер метрик, сэмплер, пропагатор или генератор ID, которых нет в SDK, разбор файла сохраняет как ОтелКонфигурацияКомпонента — имя и свойства. Фабрика создаёт такой компонент провайдером компонента (PluginComponentProvider), который приложение зарегистрировало с типом и именем компонента (см. ЗарегистрироватьПровайдерКомпонента). Провайдер получает свойства компонента из файла как ОтелСвойстваКонфигурации и возвращает компонент. Без провайдера фабрика выбрасывает исключение с видом и именем компонента, например Экспортер спанов "my_exporter" не поддерживается. Поддерживаются: otlp_http, otlp_grpc, console. Так требует спецификация Configuration SDK (Create): конфигурация с ошибкой не должна давать работающий SDK, который молча не делает того, что задано в файле. Исключение провайдера фабрика передаёт вызывающему. В SDK есть:

КомпонентВстроенныеТип провайдера компонента
Экспортер спановotlp_http, otlp_grpc, consoleОтелТипКомпонентаКонфигурации.ЭкспортерСпанов()
Экспортер записей логаotlp_http, otlp_grpc, consoleОтелТипКомпонентаКонфигурации.ЭкспортерЗаписейЛога()
Экспортер метрик периодического читателяotlp_http, otlp_grpc, consoleОтелТипКомпонентаКонфигурации.ЭкспортерМетрик()
Процессор спановbatch, simpleОтелТипКомпонентаКонфигурации.ПроцессорСпанов()
Процессор записей логаbatch, simple, event_to_span_event_bridge/developmentОтелТипКомпонентаКонфигурации.ПроцессорЗаписейЛога()
Pull-экспортер (читатель pull)нетОтелТипКомпонентаКонфигурации.ЧитательМетрикPull()
Продюсер метрикнетОтелТипКомпонентаКонфигурации.ПродюсерМетрик()
Сэмплерalways_on, always_off, trace_id_ratio_based, parent_based, always_recordОтелТипКомпонентаКонфигурации.Сэмплер()
Пропагаторtracecontext, baggage, b3, b3multi (пакет opentelemetry-propagator-b3), noneОтелТипКомпонентаКонфигурации.Пропагатор()
Генератор IDrandomОтелТипКомпонентаКонфигурации.ГенераторИд()

Встроенный компонент создаётся без провайдера, даже если провайдер с тем же именем зарегистрирован. Провайдер pull-экспортера возвращает читатель метрик, например ОтелПрометеусЧитательМетрик: фабрика добавляет ему продюсеры секции pull (ДобавитьПродюсер) и, если задан cardinality_limits, лимиты мощности видов инструментов (УстановитьЛимитМощностиДляВида; вид без своего лимита получает default). Пропагатор из строки composite_list провайдер ищется по имени, как оно записано в строке; свойств у него нет.

Процессоры и читатели, которые функция успела создать до ошибки, закрываются вместе с фоновым экспортом и транспортами.

Функции СоздатьРесурс, СоздатьПровайдерТрассировки, СоздатьПровайдерЛогирования, СоздатьПровайдерМетрик и СоздатьПропагаторы строят по одной части SDK из части модели и проверяют эту часть по схеме, как Создать всю модель: путь в ошибке — путь части в модели, например /tracer_provider/.... Признак disabled учитывает только Создать.

Функции ​

Создать ​

Создаёт SDK по модели файла конфигурации (см. «Описание»). Выбрасывает исключение, если:

  • не задан ФорматФайла (file_format) или его версия не 1.x — по тем же правилам, что при разборе файла;
  • модель не соответствует схеме (см. «Проверка модели»), в том числе нет обязательного свойства: экспортера процессора или читателя, root у always_record, процессоров провайдера трассировки или логирования, читателей провайдера метрик (Configuration SDK, Create: обязательное свойство, которого нет в модели, — ошибка);
  • значение недопустимо по описанию свойства (см. «Значения по описанию свойств»);
  • в модели есть компонент, которого нет в SDK, и для него не зарегистрирован провайдер компонента;
  • провайдер компонента выбросил исключение в СоздатьКомпонент — исключение передаётся как есть;
  • в секции propagator значение none указано вместе с другими пропагаторами.

При исключении функция закрывает провайдеры, которые успела создать: их фоновый экспорт и транспорты не остаются работать.

ПараметрТипПо умолчаниюОписание
МодельОтелКонфигурация—Модель файла конфигурации из ОтелФайловаяКонфигурация.Разобрать

Возвращает: ОтелSdk — настроенный SDK; глобально не зарегистрирован


СоздатьРесурс ​

Создаёт ресурс по секции resource. Основа — ресурс с атрибутами по умолчанию (service.name = unknown_service:oscript, telemetry.sdk.*, атрибуты детекторов хоста, процесса и процессора). Переменные OTEL_SERVICE_NAME и OTEL_RESOURCE_ATTRIBUTES не читаются: при файловой конфигурации их значения попадают в ресурс только через подстановку ${...} в файле. Поверх основы применяются:

  1. attributes_list — строка в формате OTEL_RESOURCE_ATTRIBUTES (key1=value1,key2=value2, percent-encoding). Строка, которую не удалось разобрать (элемент не в формате ключ=значение, пустой ключ, некорректный percent-encoding), — исключение: у переменной окружения такое значение отбрасывается с записью в лог, а для конфигурации Configuration SDK требует ошибку;
  2. attributes — список атрибутов; он важнее attributes_list при совпадении ключей. Значение атрибута должно соответствовать его type (без type — string), иначе исключение; атрибут со значением null пропускается.

schema_url задаёт URL схемы ресурса; без него ресурс получает схему детекторов, если она есть.

ПараметрТипПо умолчаниюОписание
КонфигРесурсаОтелКонфигурацияРесурса, НеопределеноНеопределеноСекция resource (Модель.Ресурс); Неопределено — ресурс по умолчанию

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


СоздатьПровайдерТрассировки ​

Создаёт ОтелПровайдерТрассировки по секции tracer_provider:

  • процессоры — для каждого batch с экспортером ОтелПакетныйПроцессорСпанов с параметрами schedule_delay, export_timeout, max_queue_size, max_export_batch_size, для каждого simple — ОтелПростойПроцессорСпанов, который экспортирует спан сразу при завершении; экспортер у процессора обязателен — процессор без него исключение. Несколько процессоров объединяются в ОтелКомпозитныйПроцессорСпанов;
  • сэмплер — always_on, always_off, trace_id_ratio_based (доля ratio), parent_based с корневым сэмплером root и сэмплерами для родителей remote_parent_sampled, remote_parent_not_sampled, local_parent_sampled, local_parent_not_sampled или always_record с обёрнутым сэмплером root, см. ОтелСэмплер. Вложенные сэмплеры создаются так же, как сэмплер провайдера, каждый со своими параметрами (например, своей долей ratio), и сами могут быть parent_based или always_record. Без сэмплера — parent_based с корневым always_on; незаданные вложенные сэмплеры parent_based — значения по умолчанию: root и сэмплеры для сэмплированного родителя — always_on, для несэмплированного — always_off. У always_record сэмплер root обязателен: без него выбрасывается исключение. Сэмплер, которого нет в SDK, в том числе вложенный, — исключение;
  • генератор ID — id_generator: random и секция без генератора — генератор SDK по умолчанию, другой генератор — исключение;
  • лимиты спана — из limits провайдера. Количество атрибутов — из limits, если задано, иначе из attribute_limits, иначе 128; длина значения атрибута — из limits, если задана, иначе из attribute_limits, иначе без ограничения; глубина значения атрибута — так же, иначе 64.
ПараметрТипПо умолчаниюОписание
РесурсОтелРесурс—Ресурс провайдера
КонфигПровайдераОтелКонфигурацияПровайдераТрассировки—Секция tracer_provider (Модель.ПровайдерТрассировки)
КонфигГлобЛимитовОтелКонфигурацияЛимитовАтрибутов, НеопределеноНеопределеноСекция attribute_limits (Модель.ЛимитыАтрибутов)

Возвращает: ОтелПровайдерТрассировки — провайдер трассировки


СоздатьПровайдерЛогирования ​

Создаёт ОтелПровайдерЛогирования по секции logger_provider. Процессоры — для каждого batch с экспортером ОтелПакетныйПроцессорЛогов (параметры те же, что у процессора спанов), для каждого simple — ОтелПростойПроцессорЛогов, который экспортирует запись сразу; экспортер у процессора обязателен — процессор без него исключение. Для event_to_span_event_bridge/development — ОтелПроцессорСобытийВСобытияСпана: в файловой конфигурации он есть, только если задан в списке, и переносит события в спан для процессоров после него. Несколько процессоров объединяются в ОтелКомпозитныйПроцессорЛогов. Лимиты записей лога: количество атрибутов — из limits провайдера, если задано, иначе из attribute_limits, иначе 128; длина значения — из limits, если задана, иначе из attribute_limits, иначе без ограничения; глубина значения — так же, иначе 64.

ПараметрТипПо умолчаниюОписание
РесурсОтелРесурс—Ресурс провайдера
КонфигПровайдераОтелКонфигурацияПровайдераЛогирования—Секция logger_provider (Модель.ПровайдерЛогирования)
КонфигГлобЛимитовОтелКонфигурацияЛимитовАтрибутов, НеопределеноНеопределеноСекция attribute_limits (Модель.ЛимитыАтрибутов)

Возвращает: ОтелПровайдерЛогирования — провайдер логирования


СоздатьПровайдерМетрик ​

Создаёт ОтелПровайдерМетрик по секции meter_provider:

  • читатели — для каждого periodicОтелПериодическийЧитательМетрик с интервалом interval и таймаутом экспорта timeout и экспортером otlp_http или otlp_grpc; экспортер обязателен — читатель без него исключение. Читатель pull и продюсеры producers — исключение: встроенных pull-экспортеров и продюсеров в SDK нет. Временная агрегация — из temporality_preference экспортера: cumulative (по умолчанию), delta или low_memory; агрегацию гистограмм по умолчанию (default_histogram_aggregation: explicit_bucket_histogram по умолчанию или base2_exponential_bucket_histogram) читатель берёт у экспортера. Лимит мощности вида инструмента — из cardinality_limits: лимит вида (counter, histogram, ...), иначе default, иначе 2000;
  • фильтр exemplars — exemplar_filter: trace_based (по умолчанию), always_on или always_off;
  • представления — для каждого элемента viewsОтелСелекторИнструментов по selector и ОтелПредставление по stream, зарегистрированные в провайдере до выдачи метров. Тип инструмента counter, up_down_counter, histogram, gauge, observable_counter, observable_up_down_counter, observable_gauge — вид Counter, UpDownCounter, Histogram, Gauge, ObservableCounter, ObservableUpDownCounter, ObservableGauge. Агрегация — функция ОтелАгрегация: explicit_bucket_histogram — ГистограммаСЯвнымиГраницами(boundaries, record_min_max), base2_exponential_bucket_histogram — ГистограммаЭкспоненциальная(max_size, max_scale, record_min_max), default, drop, sum, last_value — агрегации с этими именами. attribute_keys.included и excluded — разрешённые и исключённые ключи атрибутов, ключ может быть шаблоном с * и ?.

Другое значение перечисления, в том числе в другом регистре, не проходит проверку модели.

ПараметрТипПо умолчаниюОписание
РесурсОтелРесурс—Ресурс провайдера
КонфигПровайдераОтелКонфигурацияПровайдераМетрик—Секция meter_provider (Модель.ПровайдерМетрик)

Возвращает: ОтелПровайдерМетрик — провайдер метрик


СоздатьПропагаторы ​

Создаёт пропагаторы по секции propagator. Имена берутся из списка composite (ключи элементов, регистр учитывается, как в ключах схемы), затем из строки composite_list (через запятую, как в OTEL_PROPAGATORS: регистр и пробелы по краям не учитываются); повторы пропускаются.

  • tracecontext — ОтелW3CПропагатор;
  • baggage — ОтелW3CBaggageПропагатор;
  • b3, b3multi — ОтелB3Пропагатор в формате single header или multi header. Класса нет в SDK: фабрика создаёт его по имени класса (Новый("ОтелB3Пропагатор", ...) с параметром "single" или "multi"), и он доступен, если установлен пакет opentelemetry-propagator-b3 и приложение подключает его (#Использовать opentelemetry-propagator-b3). Без пакета функция выбрасывает исключение с подсказкой, как установить пакет;
  • none — отключает пропагацию: ОтелНоопПропагатор. Вместе с другими пропагаторами none указывать нельзя — функция выбрасывает исключение.

Пропагатор, которого нет в SDK (например, xray), — исключение.

ПараметрТипПо умолчаниюОписание
КонфигПропагатораОтелКонфигурацияПропагатора, НеопределеноНеопределеноСекция propagator (Модель.Пропагатор)

Возвращает: ОтелКомпозитныйПропагатор, ОтелНоопПропагатор — композитный пропагатор; ОтелНоопПропагатор, если секции нет, в ней не задано ни одного пропагатора или задан none

Процедуры ​

ЗарегистрироватьПровайдерКомпонента ​

Регистрирует провайдер компонента (Configuration SDK, Register PluginComponentProvider). Когда в модели встречается компонент, которого нет в SDK, Создать и функции частей ищут провайдер по типу и имени компонента и вызывают его функцию СоздатьКомпонент(Свойства) — Create Component спецификации. Свойства — ОтелСвойстваКонфигурации со свойствами компонента из файла; компонент без свойств (my_exporter:) даёт пустые свойства. Провайдер возвращает компонент типа, под которым зарегистрирован, например экспортер спанов. Если свойства не подходят, СоздатьКомпонент выбрасывает исключение, и фабрика передаёт его из Создать. Значение не того типа геттер ОтелСвойстваКонфигурации отклоняет исключением сам; обязательные свойства проверяет провайдер.

Реестр общий для процесса: регистрируйте провайдеры при запуске приложения, до Создать или ОтелАвтоконфигурация.Инициализировать(). Тип и имя — уникальный ключ: повторная регистрация с теми же типом и именем выбрасывает исключение Провайдер компонента <Тип> "<Имя>" уже зарегистрирован. Одно имя можно зарегистрировать для разных типов.

ПараметрТипПо умолчаниюОписание
ПровайдерПроизвольный—Объект с функцией СоздатьКомпонент(Свойства), которая возвращает компонент
ТипСтрока—Тип компонента — значение ОтелТипКомпонентаКонфигурации
ИмяСтрока—Имя компонента — ключ в файле конфигурации, например "my_exporter"; регистр значим

Пример провайдера экспортера спанов my_exporter (класс МойПровайдерЭкспортера):

bsl
// Свойства - ОтелСвойстваКонфигурации - свойства my_exporter из файла
Функция СоздатьКомпонент(Свойства) Экспорт
    // Нет ключа - Неопределено, endpoint: без значения - Null
    Адрес = Свойства.ПолучитьСтроку("endpoint");
    Если Адрес = Неопределено Или Адрес = Null Тогда
        ВызватьИсключение "my_exporter: не задано обязательное свойство endpoint";
    КонецЕсли;
    Возврат Новый МойЭкспортерСпанов(Адрес, Свойства.ПолучитьЦелое("timeout", 10000));
КонецФункции
bsl
ОтелКонфигурационнаяФабрика.ЗарегистрироватьПровайдерКомпонента(
    Новый МойПровайдерЭкспортера(), ОтелТипКомпонентаКонфигурации.ЭкспортерСпанов(), "my_exporter");
Сдк = ОтелКонфигурационнаяФабрика.Создать(ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml"));
yaml
tracer_provider:
  processors:
    - batch:
        exporter:
          my_exporter:
            endpoint: http://collector:9000
            timeout: 5000

Опишите в документации провайдера схему конфигурации компонента и приведите пример, как выше: свойства, их типы, обязательные свойства и значения по умолчанию (Configuration SDK, Create Component). Для my_exporter:

СвойствоТипОбязательноеПо умолчаниюОписание
endpointstringда—Адрес приёмника спанов
timeoutintegerнет10000Срок экспорта, мс

Внутренние функции ​

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

  • РазрешитьПропагаторПоИмени — создаёт пропагатор по имени tracecontext, baggage, b3 или b3multi для OTEL_PROPAGATORS (ОтелАвтоконфигурация.СоздатьПропагаторы): неизвестное имя и b3 без пакета пропускаются с предупреждением в логе, а не дают исключение, как в файле конфигурации;
  • РазобратьПарыКлючЗначение — разбирает строку key1=value1,key2=value2 (заголовки OTEL_EXPORTER_OTLP_HEADERS): элементы без ключа пропускаются, некорректный percent-encoding остаётся как есть. headers_list файла конфигурации фабрика разбирает строго: ошибка разбора — исключение;
  • РазобратьАтрибутыРесурса — строгий разбор attributes_list и OTEL_RESOURCE_ATTRIBUTES: при ошибке выбрасывает исключение.

Пример ​

bsl
#Использовать opentelemetry

Модель = ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml");

// SDK по всему файлу. Фабрика не регистрирует SDK глобально
Сдк = ОтелКонфигурационнаяФабрика.Создать(Модель);
ОтелГлобальный.Установить(Сдк);

Трассировщик = ОтелГлобальный.ПолучитьТрассировщик("мой-сервис");
// ...

// При завершении работы закрываются провайдеры, процессоры, экспортеры и их транспорты
Сдк.Закрыть();
bsl
// Другой вариант: только провайдер трассировки по секциям resource, tracer_provider
// и attribute_limits
Модель = ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml");
Если Модель.ПровайдерТрассировки <> Неопределено Тогда
    Ресурс = ОтелКонфигурационнаяФабрика.СоздатьРесурс(Модель.Ресурс);
    Провайдер = ОтелКонфигурационнаяФабрика.СоздатьПровайдерТрассировки(
        Ресурс, Модель.ПровайдерТрассировки, Модель.ЛимитыАтрибутов);
    ОтелГлобальный.УстановитьПровайдерТрассировки(Провайдер);
    // ...
    Провайдер.Закрыть();
КонецЕсли;

См. также ​