Skip to content

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

Провайдер метрик (MeterProvider) — центральная точка управления метрами и читателями метрик.

Описание ​

ОтелПровайдерМетрик реализует спецификацию OpenTelemetry MeterProvider. Хранит кэш объектов ОтелМетр по идентичности области (имя библиотеки, версия, адрес схемы и атрибуты scope), управляет представлениями (Views) и читателями метрик. Поддерживает несколько читателей.

У каждого читателя свои потоки метрик: агрегацию и лимит мощности по умолчанию для вида инструмента, а также временную агрегацию задаёт читатель, поэтому сбор одним читателем не сбрасывает и не искажает данные другого. Каждый совпавший с инструментом View даёт отдельный поток. Изменения конфигурации (Views, агрегация гистограмм по умолчанию) применяются и к ранее выданным метрам.

Все публичные методы потокобезопасны.

Рекомендуется создавать через ОтелПостроительПровайдераМетрик.

Методы ​

ПостроительМетра ​

Создаёт построитель метра (MeterBuilder). Аналог Java SDK: MeterProvider.meterBuilder("name").

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

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


ПолучитьМетр ​

Создаёт или возвращает из кэша метр для указанной библиотеки. После Закрыть() и у no-op провайдера, который действует, пока SDK не настроен, возвращает no-op метр: он не проверяет параметры и не пишет в лог, его инструменты выключены и не хранят измерений.

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

Возвращает: ОтелМетр


Ресурс ​

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

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


ЧитательМетрик ​

Возвращает первый зарегистрированный читатель метрик (для обратной совместимости).

Возвращает: ОтелПериодическийЧитательМетрик, Неопределено


ЧитателиМетрик ​

Возвращает массив всех зарегистрированных читателей метрик.

Возвращает: Массив


ФильтрЭкземпляров ​

Возвращает фильтр exemplars провайдера.

Возвращает: Число — константа ОтелФильтрЭкземпляров: ВсегдаВключен(), ВсегдаВыключен() или ПоТрассировке()


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

Принудительно экспортирует все накопленные метрики через все читатели. У каждого читателя вызывается его собственный ForceFlush — ПринудительноВыгрузитьСРезультатом (сбор, экспорт и сброс буфера экспортера), а у читателя без этого метода (например, pull-читателя) — СброситьБуфер. Сброс вызывается у каждого читателя, даже если предыдущий бросил исключение; все читатели укладываются в общий срок — каждому передаётся оставшееся время.

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

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


Закрыть ​

Завершает работу провайдера: отключает синхронные инструменты метров, в том числе те, что метры создадут после закрытия (наблюдаемые инструменты и мульти-callback-и, созданные после закрытия, — no-op и не хранят callback-и), и закрывает читателей в пределах общего срока — каждого, даже после исключения в предыдущем и после истечения срока (тогда читатель получает 1 мс и завершается без ожидания). Идемпотентен: повторный вызов возвращает успех. После закрытия ПолучитьМетр() возвращает no-op метр.

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

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


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

Принудительно выгружает все накопленные метрики через читателей так же, как СброситьБуфер. После Закрыть() возвращает ошибку.

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

Возвращает: ОтелРезультатЗакрытия


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

Асинхронно сбрасывает буфер.

Возвращает: Обещание


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

Асинхронно завершает работу провайдера.

Возвращает: Обещание


ЗарегистрироватьПредставление ​

Регистрирует представление (View) с селектором инструментов. View применяется и к инструментам ранее выданных метров: их потоки разрешаются заново, измерения после регистрации попадают в потоки с новой конфигурацией. Потоки, конфигурация которых не изменилась, сохраняют накопленные данные.

ПараметрТипПо умолчаниюОписание
СелекторОтелСелекторИнструментов—Селектор инструментов
ПредставлениеОтелПредставление—Представление

ПолучитьПредставления ​

Возвращает зарегистрированные представления.

Возвращает: Массив из Соответствие — пары с ключами Селектор и Представление


УстановитьАгрегациюГистограммПоУмолчанию ​

Устанавливает агрегацию гистограмм по умолчанию для метров провайдера без читателей (у читателей своя агрегация по умолчанию для вида инструмента). Применяется и к ранее выданным метрам. Соответствует OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION.

ПараметрТипПо умолчаниюОписание
ЗначениеСтрока—explicit_bucket_histogram или base2_exponential_bucket_histogram

УстановитьТаймаутОбратныхВызововМс ​

Задаёт таймаут callback-ов асинхронных инструментов и мульти-callback-ов метров провайдера (по умолчанию 30000 мс). Применяется и к ранее выданным метрам. См. ОтелМетр.УстановитьТаймаутОбратныхВызововМс.

ПараметрТипПо умолчаниюОписание
ЗначениеЧисло—Таймаут в миллисекундах; 0 — callback-и выполняются в потоке сбора без таймаута

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

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

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

Пример ​

bsl
Провайдер = Новый ОтелПостроительПровайдераМетрик()
    .УстановитьРесурс(Ресурс)
    .ЗарегистрироватьЧитатель(Читатель)
    .Построить();

Метр = Провайдер.ПолучитьМетр("мой-сервис", "1.0.0");
Счетчик = Метр.СоздатьСчетчик("запросы");
Счетчик.Добавить(1);

// Завершение работы
Провайдер.Закрыть();