ОтелКонфигурационнаяФабрика
Модуль создания 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 | ОтелТипКомпонентаКонфигурации.Пропагатор() |
| Генератор ID | random | ОтелТипКомпонентаКонфигурации.ГенераторИд() |
Встроенный компонент создаётся без провайдера, даже если провайдер с тем же именем зарегистрирован. Провайдер 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 не читаются: при файловой конфигурации их значения попадают в ресурс только через подстановку ${...} в файле. Поверх основы применяются:
attributes_list— строка в форматеOTEL_RESOURCE_ATTRIBUTES(key1=value1,key2=value2, percent-encoding). Строка, которую не удалось разобрать (элемент не в форматеключ=значение, пустой ключ, некорректный percent-encoding), — исключение: у переменной окружения такое значение отбрасывается с записью в лог, а для конфигурации Configuration SDK требует ошибку;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 (класс МойПровайдерЭкспортера):
// Свойства - ОтелСвойстваКонфигурации - свойства my_exporter из файла
Функция СоздатьКомпонент(Свойства) Экспорт
// Нет ключа - Неопределено, endpoint: без значения - Null
Адрес = Свойства.ПолучитьСтроку("endpoint");
Если Адрес = Неопределено Или Адрес = Null Тогда
ВызватьИсключение "my_exporter: не задано обязательное свойство endpoint";
КонецЕсли;
Возврат Новый МойЭкспортерСпанов(Адрес, Свойства.ПолучитьЦелое("timeout", 10000));
КонецФункцииОтелКонфигурационнаяФабрика.ЗарегистрироватьПровайдерКомпонента(
Новый МойПровайдерЭкспортера(), ОтелТипКомпонентаКонфигурации.ЭкспортерСпанов(), "my_exporter");
Сдк = ОтелКонфигурационнаяФабрика.Создать(ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml"));tracer_provider:
processors:
- batch:
exporter:
my_exporter:
endpoint: http://collector:9000
timeout: 5000Опишите в документации провайдера схему конфигурации компонента и приведите пример, как выше: свойства, их типы, обязательные свойства и значения по умолчанию (Configuration SDK, Create Component). Для my_exporter:
| Свойство | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
endpoint | string | да | — | Адрес приёмника спанов |
timeout | integer | нет | 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: при ошибке выбрасывает исключение.
Пример
#Использовать opentelemetry
Модель = ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml");
// SDK по всему файлу. Фабрика не регистрирует SDK глобально
Сдк = ОтелКонфигурационнаяФабрика.Создать(Модель);
ОтелГлобальный.Установить(Сдк);
Трассировщик = ОтелГлобальный.ПолучитьТрассировщик("мой-сервис");
// ...
// При завершении работы закрываются провайдеры, процессоры, экспортеры и их транспорты
Сдк.Закрыть();// Другой вариант: только провайдер трассировки по секциям resource, tracer_provider
// и attribute_limits
Модель = ОтелФайловаяКонфигурация.Разобрать("/etc/otel/config.yaml");
Если Модель.ПровайдерТрассировки <> Неопределено Тогда
Ресурс = ОтелКонфигурационнаяФабрика.СоздатьРесурс(Модель.Ресурс);
Провайдер = ОтелКонфигурационнаяФабрика.СоздатьПровайдерТрассировки(
Ресурс, Модель.ПровайдерТрассировки, Модель.ЛимитыАтрибутов);
ОтелГлобальный.УстановитьПровайдерТрассировки(Провайдер);
// ...
Провайдер.Закрыть();
КонецЕсли;