Skip to content

ОтелПроцессорСобытийВСобытияСпана ​

Процессор записей лога, переносящий события в события спана (EventToSpanEventBridge, спецификация Logs SDK, статус Development).

Описание ​

Событие в OpenTelemetry — запись лога с именем события (ОтелЗаписьЛога.УстановитьИмяСобытия). Семантические соглашения записывают исключения событиями: исключение операции — событием с именем вида db.client.operation.exception, исключение вне конкретной операции — событием exception. Процессор переносит такую запись в событие текущего спана, чтобы её было видно в представлениях, ориентированных на трассы, например в событиях спана в Grafana Tempo.

Запись переносится, только если выполнены все условия:

  • у записи непустое имя события;
  • у записи валидные идентификаторы трассировки и спана;
  • в разрешённом контексте записи есть текущий спан, который записывается (ЗаписьАктивна());
  • идентификаторы записи совпадают с идентификаторами этого спана.

Иначе процессор ничего не делает. Событие спана получает имя события записи, время записи (если оно не задано — время наблюдения) и все атрибуты записи, в том числе exception.*, которые логгер заполняет из УстановитьИсключение. Лимиты событий и их атрибутов — лимиты спана.

Запись после переноса продолжает путь по конвейеру: следующие процессоры, например процессор экспорта, получают её как обычно. Поэтому процессор ставят перед процессором экспорта. Если запись нужна только в спане, процессор экспорта логов не добавляют.

Автоконфигурация (ОтелАвтоконфигурация) ставит процессор первым, если ключ otel.oscript.event.to.span.event.bridge.enabled (OTEL_OSCRIPT_EVENT_TO_SPAN_EVENT_BRIDGE_ENABLED) равен true или не задан; другое значение процессор выключает. В файловой конфигурации процессор задают элементом event_to_span_event_bridge/development списка logger_provider.processors.

Реализует ИнтерфейсПроцессорЛогов. Настраиваемых параметров нет.

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

Без параметров.

Методы ​

ПриПоявлении ​

Переносит событие в событие текущего спана по условиям выше. После Закрыть() записи не переносятся. Ошибки переноса логируются в oscript.lib.opentelemetry.eventtospaneventbridge и не пробрасываются наверх.

ПараметрТипПо умолчаниюОписание
ЗаписьЛогаОтелЗаписьЛога—Запись лога
КонтекстСоответствие, ФиксированноеСоответствие, НеопределеноНеопределеноРазрешённый контекст; Неопределено — текущий контекст потока

Включен ​

Возвращает Истина, если в контексте есть записываемый текущий спан и процессор не закрыт: без спана процессору нечего делать. Пустое имя события означает, что оно не известно, и процессор не отключает. Реализация не мутирует переданные объекты.

ПараметрТипПо умолчаниюОписание
КонтекстСоответствие, ФиксированноеСоответствие, НеопределеноНеопределеноЯвный контекст; Неопределено — текущий контекст потока
ОбластьИнструментированияОтелОбластьИнструментированияНеопределеноScope логгера
СтепеньСерьезностиЧисло0Номер серьезности
ИмяСобытияСтрока""Имя события

Возвращает: Булево


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

Буфера у процессора нет.

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

Возвращает: ОтелРезультатЭкспорта — успех


Закрыть ​

Завершает работу процессора: следующие записи он не переносит.

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

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

Пример ​

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

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

Логгер = Провайдер.ПолучитьЛоггер("мой-сервис");
Спан = Трассировщик.НачатьСпан("ОформитьЗаказ");
Попытка
    ОформитьЗаказ();
Исключение
    Инфо = ИнформацияОбОшибке();
    Спан.УстановитьСтатус(ОтелКодСтатуса.Ошибка(), Инфо.Описание);
    Запись = Логгер.СоздатьЗаписьЛога()
        .УстановитьИмяСобытия("exception")
        .УстановитьСерьезность(ОтелСтепеньСерьезности.Error())
        .УстановитьИсключение(Инфо);
    Логгер.Записать(Запись, ОтелКонтекст.КонтекстСоСпаном(ОтелКонтекст.Текущий(), Спан));
КонецПопытки;
Спан.Завершить();

Файловая конфигурация:

yaml
logger_provider:
  processors:
    - event_to_span_event_bridge/development:
    - batch:
        exporter:
          otlp_http:
            endpoint: http://localhost:4318/v1/logs

См. также ​