Skip to content

Публичный интерфейс библиотеки autumn-opentelemetry ​

Аннотации ​

Классы ​


АтрибутСпана ​

Аннотация для добавления значения параметра метода в span как атрибут.

Синтаксис ​

bsl
&АтрибутСпана[(Значение)]

Параметры ​

Значение ​

Тип: Строка (опционально)

Ключ атрибута span'а (например, "order.id"). Если не указано, используется имя параметра.

Описание ​

Аннотация &АтрибутСпана применяется к параметрам методов, помеченных &Наблюдаемый. При вызове метода значение параметра автоматически записывается как атрибут текущего span'а с указанным ключом.

Пример ​

bsl
&Наблюдаемый
Функция ОбработатьЗаказ(&АтрибутСпана("order.id") ИдЗаказа, Данные) Экспорт
    // span получит атрибут order.id = значение ИдЗаказа
    Возврат СформироватьОтвет(ИдЗаказа);
КонецФункции

Без явного ключа — используется имя параметра:

bsl
&Наблюдаемый
Функция Обработать(&АтрибутСпана ИдЗаказа) Экспорт
    // атрибут span'а: ИдЗаказа = значение ИдЗаказа
КонецФункции

См. также ​


Замеряемый ​

Аннотация для автоматического замера длительности выполнения методов (аналог @Timed из Spring Boot).

Синтаксис ​

bsl
&Замеряемый[(Значение)]
Функция ИмяМетода(...) Экспорт
    ...
КонецФункции

Параметры ​

Значение ​

Тип: Строка (опционально)

Имя метрики. Должно соответствовать формату OTel (ASCII, точки как разделители). Если не указано, используется "ИмяЖелудя.ИмяМетода.duration" с автоматической транслитерацией кириллицы.

Описание ​

Аннотация &Замеряемый оборачивает метод в декоратор, который:

  1. Фиксирует время начала вызова
  2. После завершения метода записывает длительность (в секундах, единица s) в гистограмму OTel
  3. При исключении записывает длительность с атрибутом error.type

Атрибуты гистограммы: code.function.name (полное имя метода ИмяЖелудя.ИмяМетода), error.type (при ошибке).

error.type — значение ОтелУтилиты.ТипОшибки: код ошибки библиотеки errors, код нативной ошибки OneScript или _OTHER. У успешных вызовов атрибута нет.

При размещении на конструкторе (вместе с &Желудь) инструментируются все экспортные методы желудя, в том числе те, которых нет в его модуле: напильник рефлексирует по самому экземпляру, а не по типу. К моменту обработки желудь обычно уже обёрнут декоратором — хранилищем сущностей autumn-data, построителем наследника из extends, декоратором предыдущего напильника, — и методов у экземпляра больше, чем объявлено в модуле типа.

Аннотации на методах читаются оттуда же, поэтому &Замеряемый на методе, пришедшем с декоратором, задаёт имя метрики так же, как на методе самого желудя. Такой метод замеряется и тогда, когда на конструкторе аннотации нет вовсе.

Примеры ​

Инструментация одного метода ​

bsl
&Замеряемый("payments.process.duration")
Функция ОбработатьПлатёж(Данные) Экспорт
    Возврат ПровестиПлатёж(Данные);
КонецФункции

Инструментация всех методов класса ​

bsl
&Желудь
&Замеряемый
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Комбинирование с другими аннотациями ​

bsl
&Наблюдаемый("orders.process")
&Замеряемый("orders.duration")
Функция ОбработатьЗаказ(ИдЗаказа) Экспорт
    Возврат СформироватьОтвет(ИдЗаказа);
КонецФункции

См. также ​


Наблюдаемый ​

Аннотация для автоматического создания span'ов OpenTelemetry вокруг вызовов методов.

Синтаксис ​

bsl
&Наблюдаемый[(Значение [, ВидСпана])]
Функция ИмяМетода(...) Экспорт
    ...
КонецФункции

Параметры ​

Значение ​

Тип: Строка (опционально)

Имя span'а. Если не указано, используется "ИмяЖелудя.ИмяМетода".

ВидСпана ​

Тип: Строка (опционально)

Вид span'а. Допустимые значения: internal (по умолчанию), server, client, producer, consumer.

Описание ​

Аннотация &Наблюдаемый оборачивает метод в декоратор, который:

  1. Создаёт span с заданным именем и видом
  2. Устанавливает атрибут code.function.name — полное имя метода ИмяЖелудя.ИмяМетода
  3. Делает span текущим в контексте OTel
  4. Завершает span после выхода из метода (в том числе при исключении)
  5. При исключении записывает его записью лога с событием exception в контексте span'а и устанавливает span'у статус Error с текстом исключения и атрибут error.type

Запись исключения пишется логгером ОтелЛоггер (область autumn-observed) по семантическим соглашениям exceptions-logs:

  • атрибуты exception.* ядро заполняет из исключения, к ним добавляется code.function.name, как у span'а;
  • серьёзность ERROR у span'ов вида server и consumer, WARN у остальных;
  • запись пишется до завершения span'а, поэтому процессор событий ядра, включённый в автоконфигурации по умолчанию, переносит её в событие span'а, и исключение видно в трассе.

error.type — значение ОтелУтилиты.ТипОшибки: код ошибки библиотеки errors, код нативной ошибки OneScript или _OTHER.

При размещении на конструкторе (вместе с &Желудь) инструментируются все экспортные методы желудя, в том числе те, которых нет в его модуле: напильник рефлексирует по самому экземпляру, а не по типу. К моменту обработки желудь обычно уже обёрнут декоратором — хранилищем сущностей autumn-data, построителем наследника из extends, декоратором предыдущего напильника, — и методов у экземпляра больше, чем объявлено в модуле типа.

Аннотации на методах читаются оттуда же, поэтому &Наблюдаемый на методе, пришедшем с декоратором, работает так же, как на методе самого желудя: задаёт имя и вид спана, а &АтрибутСпана на его параметрах - атрибуты. Такой метод инструментируется и тогда, когда на конструкторе аннотации нет вовсе.

Примеры ​

Инструментация одного метода ​

bsl
&Наблюдаемый("orders.process")
Функция ОбработатьЗаказ(ИдЗаказа) Экспорт
    Возврат СформироватьОтвет(ИдЗаказа);
КонецФункции

Инструментация всех методов класса ​

bsl
&Желудь
&Наблюдаемый
Процедура ПриСозданииОбъекта()
КонецПроцедуры

С явным видом спана ​

bsl
&Желудь
&Наблюдаемый(ВидСпана = "server")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

С атрибутами параметров ​

bsl
&Наблюдаемый
Функция ОбработатьЗаказ(&АтрибутСпана("order.id") ИдЗаказа) Экспорт
    // span получит атрибут order.id = значение ИдЗаказа
    Возврат СформироватьОтвет(ИдЗаказа);
КонецФункции

См. также ​


Подсчитываемый ​

Аннотация для автоматического подсчёта вызовов методов (аналог @Counted из Spring Boot).

Синтаксис ​

bsl
&Подсчитываемый[(Значение)]
Функция ИмяМетода(...) Экспорт
    ...
КонецФункции

Параметры ​

Значение ​

Тип: Строка (опционально)

Имя метрики. Должно соответствовать формату OTel (ASCII, точки как разделители). Если не указано, используется "ИмяЖелудя.ИмяМетода.counted" с автоматической транслитерацией кириллицы.

Описание ​

Аннотация &Подсчитываемый оборачивает метод в декоратор, который:

  1. Инкрементирует счётчик OTel при каждом вызове метода
  2. При исключении добавляет атрибут error.type

Атрибуты счётчика: code.function.name (полное имя метода ИмяЖелудя.ИмяМетода), error.type (при ошибке).

error.type — значение ОтелУтилиты.ТипОшибки: код ошибки библиотеки errors, код нативной ошибки OneScript или _OTHER. Успешные вызовы — точки без error.type.

При размещении на конструкторе (вместе с &Желудь) инструментируются все экспортные методы желудя, в том числе те, которых нет в его модуле: напильник рефлексирует по самому экземпляру, а не по типу. К моменту обработки желудь обычно уже обёрнут декоратором — хранилищем сущностей autumn-data, построителем наследника из extends, декоратором предыдущего напильника, — и методов у экземпляра больше, чем объявлено в модуле типа.

Аннотации на методах читаются оттуда же, поэтому &Подсчитываемый на методе, пришедшем с декоратором, задаёт имя метрики так же, как на методе самого желудя. Такой метод считается и тогда, когда на конструкторе аннотации нет вовсе.

Примеры ​

Инструментация одного метода ​

bsl
&Подсчитываемый("api.requests")
Функция ОбработатьЗапрос(Запрос) Экспорт
    Возврат СформироватьОтвет(Запрос);
КонецФункции

Инструментация всех методов класса ​

bsl
&Желудь
&Подсчитываемый
Процедура ПриСозданииОбъекта()
КонецПроцедуры

Комбинирование с другими аннотациями ​

bsl
&Наблюдаемый("orders.process")
&Подсчитываемый("orders.count")
&Замеряемый("orders.duration")
Функция ОбработатьЗаказ(ИдЗаказа) Экспорт
    Возврат СформироватьОтвет(ИдЗаказа);
КонецФункции

См. также ​


НапильникОтелХранилищеСущностей ​

Напильник слоя хранилищ сущностей: находит в контейнере хранилища и отдает их инструментированию из opentelemetry-instrumentation-entity, которое замеряет вызовы методов гистограммой.

Описание ​

Применяется к желудям с прозвищем ХранилищеСущностей. Такое прозвище получают и хранилища, которые autumn-data регистрирует для каждой сущности, и пользовательские хранилища с аннотацией &ХранилищеСущностей.

Обертку строит ОтелИнструментированиеХранилищаСущностей — там же описано, какие методы оборачиваются и какие сигналы пишутся. Если оборачивать нечего, желудь остается нетронутым.

Спанов напильник не создает: вызов метода хранилища виден в метрике, а трейс строят операции entity и запросы к СУБД, которые метод выполнил. Спан на самом методе хранилища вешается аннотацией &Наблюдаемый — на конструкторе желудя или на отдельном методе.

Порядок: &Порядок(503) - после напильников аннотаций.

Конструктор ​

bsl
&Напильник
&Порядок(503)
Процедура ПриСозданииОбъекта(&Табакерка &Пластилин("ОтелМетр") ОтелМетр,
		&Деталька(Значение = "otel.enabled", ЗначениеПоУмолчанию = Ложь) ОтелВключен,
		&Деталька(Значение = "otel.entity.repository.enabled", ЗначениеПоУмолчанию = "") СлойВключен)

Напильник включен, когда включен otel.enabled и не выключен otel.entity.repository.enabled. Метр достается из табакерки при первом обернутом желуде, поэтому SDK не поднимается, если хранилищ в приложении нет.

Конфигурация ​

Подробнее - в разделе Инструментирование entity.


ОтелДетекторРесурсаДистрибутива ​

Детектор ресурса дистрибутива: сообщает, что SDK собран библиотекой autumn-opentelemetry.

Описание ​

Реализует ИнтерфейсДетекторРесурса ядра opentelemetry. Желудь с прозвищем ДетекторРесурса: ОтелSdk сливает его ресурс с остальными детекторами.

Атрибуты ресурса ​

АтрибутЗначение
telemetry.distro.nameautumn-opentelemetry
telemetry.distro.versionверсия установленного пакета autumn-opentelemetry

Адрес схемы ресурса — https://opentelemetry.io/schemas/1.44.0.

Методы ​

Обнаружить ​

bsl
Функция Обнаружить() Экспорт

Возвращает: ОтелРесурс — ресурс с атрибутами telemetry.distro.name и telemetry.distro.version.


ОтелДуб ​

Конфигурационный модуль (дуб) Autumn, регистрирующий желуди OpenTelemetry в контейнере приложения.

Описание ​

ОтелДуб автоматически подключается при добавлении #Использовать autumn-opentelemetry в приложение Autumn. Явно создавать или настраивать его не нужно.

При инициализации регистрирует следующие желуди:

ЖёлудьТипОписание
МенеджерПараметровМенеджерПараметровМенеджер параметров приложения
ОтелSdkОтелSdkИнициализированный SDK OpenTelemetry. В ресурс попадают атрибуты детекторов — желудей с прозвищем ДетекторРесурса
ОтелТрассировщикОтелТрассировщикТрассировщик для области autumn-observed
ОтелЛоггерОтелЛоггерЛоггер для области autumn-observed: записи исключений методов &Наблюдаемый
ОтелМетрОтелМетрМетр для области autumn-metrics
ОтелНаблюдательИсточникаДанныхОтелНаблюдательИсточникаДанныхНаблюдатель entity с прозвищем НаблюдательИсточникаДанных: спаны и метрики источников данных autumn-data. При выключенном otel.entity.enabled завязь возвращает Неопределено

Ленивая инициализация ​

SDK инициализируется лениво — только при первом желуде, требующем инструментирования. Если otel.enabled = false или в приложении нет желудей с аннотациями &Наблюдаемый / &Замеряемый / &Подсчитываемый, хранилищ сущностей и менеджеров autumn-data, SDK не запускается и экспортёры не стартуют.

Использование желудей напрямую ​

Желуди ОтелТрассировщик и ОтелМетр можно внедрять в свои классы через &Пластилин:

bsl
&Желудь
Процедура ПриСозданииОбъекта(&Пластилин Трассировщик)
    // Трассировщик — экземпляр ОтелТрассировщик
КонецПроцедуры

Конфигурация ​

Поведение ОтелДуб управляется параметрами приложения. Подробнее — в разделе Конфигурация.