ОтелПроцессорСобытийВСобытияСпана
Процессор записей лога, переносящий события в события спана (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 — без ограничения) |
Возвращает: ОтелРезультатЗакрытия — успех
Пример
Провайдер, собранный вручную: событие попадает в спан, а запись — в экспорт логов.
Провайдер = Новый ОтелПостроительПровайдераЛогирования()
.УстановитьРесурс(Ресурс)
.ДобавитьПроцессор(Новый ОтелПроцессорСобытийВСобытияСпана())
.ДобавитьПроцессор(ПакетныйПроцессор)
.Построить();
Логгер = Провайдер.ПолучитьЛоггер("мой-сервис");
Спан = Трассировщик.НачатьСпан("ОформитьЗаказ");
Попытка
ОформитьЗаказ();
Исключение
Инфо = ИнформацияОбОшибке();
Спан.УстановитьСтатус(ОтелКодСтатуса.Ошибка(), Инфо.Описание);
Запись = Логгер.СоздатьЗаписьЛога()
.УстановитьИмяСобытия("exception")
.УстановитьСерьезность(ОтелСтепеньСерьезности.Error())
.УстановитьИсключение(Инфо);
Логгер.Записать(Запись, ОтелКонтекст.КонтекстСоСпаном(ОтелКонтекст.Текущий(), Спан));
КонецПопытки;
Спан.Завершить();Файловая конфигурация:
logger_provider:
processors:
- event_to_span_event_bridge/development:
- batch:
exporter:
otlp_http:
endpoint: http://localhost:4318/v1/logs