Skip to content

Содержимое Data журнала регистрации ​

Содержимое поля Data передается в атрибуте v8.eventlog.data: для известных полей — структурированный объект OTLP (kvlistValue), для неизвестной формы — компактная строка JSON, для скаляров — прежнее текстовое значение. Пустой объект также сохраняется строкой JSON, чтобы приемник не потерял его при разворачивании. Известные поля не дублируются отдельной JSON-строкой. v8.eventlog.data.presentation, текст тела лога, ресурсы и метрики сохраняются. Включать настройку не требуется.

Правила разбора разработаны в форке OneSTools.EventLog и проверены на искусственных примерах, сопоставленных с выгрузкой платформы 8.3.27.2325. Имена из синтакс-помощника используются после подтверждения реального расположения полей: порядок перечисления в справке не совпадает с порядком значений LGP. Наличие события в таблице ниже не означает распознавание всех его вариантов. Проверяются код события, маска, количество и типы элементов. Именованные пары распознаются в русском и английском вариантах: Имя / Name, Данные / Data, Ссылка / Reference. На тестовой платформе 8.3.27.2325 язык этих ключей определялся вариантом встроенного языка конфигурации (Russian / English); переключение интерфейса и региональных настроек базы их не меняло.

События описаны декларативным OneScript-кодом в ПоляДанныхСобытийЖурналаРегистрации. Один блок объединяет поля, их типы, формы входной записи и преобразования JSON. Декодер читает готовые описания без ветвлений по кодам событий и именам полей. ИменаПолей, Биты, Способ выводятся из поддерживаемых форм; нераспознаваемые варианты в реестр не включаются. Для совместимости JSON использует AuthenticationMethod и Vendor у ConfigUpdate, как в проверенной выгрузке 8.3.27.

Добавление события ​

Пример битовой формы аутентификации:

bsl
Формы = Новый КонструкторыДанныхЖурналаРегистрации;

Реестр.Событие("_$Session$_.Authentication")
    .Аналоги("_$Session$_.AuthenticationError")
    .Поле("Name").ТипПоля("Строка").Бит(1)
    .Поле("CurrentOSUser").ТипПоля("Строка").Бит(2)
    .Поле("AuthenticationMethod").ТипПоля("Число").Бит(9)
    .Поле("OSUser").ТипПоля("Строка").Бит(0)
    .Форма(Формы.ПоМаске("P", "518"))
    .Форма(Формы.ПоМаске("P", "514"))
    .Форма(Формы.ПоМаске("P", "513"))
    .Зарегистрировать();

Поля битовой формы читаются по возрастанию номеров битов. Распознаются только перечисленные маски; новая комбинация сохраняется исходным деревом.

ТипПоля(...) принимает Строка, Число, Булево, Дата, Ссылка, МассивСсылок, МассивСтрок, Незаданное, Таблица. Имя Тип() занято встроенной функцией OneScript. Способ вывода настраивается отдельно:

bsl
.Поле("Roles").ТипПоля("МассивСсылок").Пропустить()
.Поле("Roles").ТипПоля("МассивСсылок").Как("UserRoles")
.Поле("Roles").ТипПоля("МассивСсылок").Как("RolesCount", Агрегаты.Количество())
.Поле("Roles").ТипПоля("МассивСсылок").Как("UniqueRolesCount", Агрегаты.КоличествоУникальных())

Это четыре альтернативы: исключить из JSON, переименовать с сохранением массива, заменить массив количеством всех или только различных элементов. Агрегаты — экземпляр КонструкторыДанныхЖурналаРегистрации. Пропущенное поле все равно читается и проверяется. .Значение("0", "false").Значение("3", "true") задает карту допустимых значений; неизвестный код приводит к сохранению исходного дерева.

КоличествоУникальных() применяется к массивам строк и ссылок. Строки различаются регистром и пробелами; пустая строка тоже считается значением. Ссылки сравниваются по паре UUID типа и объекта, без учета регистра UUID. Для пустого массива результат "0"; количество передается строкой, как и у Количество(). Счетчик массива и все элементы проверяются до возврата результата. Поврежденное значение сохраняется исходным деревом. Множество уникальных ключей создается только для этого агрегата; обычный подсчет обходится без хранения элементов.

Позиционные формы задаются через Формы.Позиционная("P", "65534"). Второй аргумент — необязательный точный маркер, который не обязательно является битовой маской. Состав и порядок задаются одним из способов:

  • .ВсеПоля() — порядок объявления полей события.
  • .ВсеПоляКроме("DefaultInterface") — поле физически отсутствует во входе; позиции следующих полей сдвигаются. Для нескольких имен допустим CSV или массив.
  • .Поля("Name,OSUser") — явный порядок; также принимает массив имен.
  • .Поле("Name").Поле("OSUser") — тот же явный порядок цепочкой вызовов.

Для вложенной записи используется Формы.Структура("P") с точным .Размер(...), условиями .РазмерУзла(...), .Литерал(...) и .ПолеПоПути(...). Путь "1.1" означает второй элемент второго списка тела; индексы начинаются с нуля. При регистрации проверяются типы, ссылки на поля, биты, повторные коды событий и выходные ключи JSON. Ошибочное описание не добавляется в реестр.

Подтвержденные формы ​

События (суффиксы после системной группы)Содержимое
User.AuthenticationLock, AuthenticationUnlock, AuthenticationUnlockError; Session.PasswordRequirementsViolationOnAuthenticationName, включая пустую строку
Session.Authentication, AuthenticationErrorформы 513, 514, 518: OSUser / Name, CurrentOSUser, AuthenticationMethod
User.New, Update, NewError, UpdateErrorформы 65535 и 65534: свойства пользователя, ссылки на язык/интерфейс, RolesCount, настройки второго фактора и политики паролей
User.Delete, DeleteError; Session.ConfigExtensionApplyErrorName
InfoBase.UserPasswordPolicyNew, UserPasswordPolicyNewError, UserPasswordPolicyUpdateформа 255: девять свойств политики, включая проверку компрометации и действие при нарушении требований
InfoBase.UserPasswordPolicyDelete, UserPasswordPolicyDeleteErrorName
InfoBase.ParametersUpdate, ParametersUpdateErrorподтвержденные маски параметров базы: пароли, блокировка аутентификации, ожидание блокировки и завершение неактивных сеансов
InfoBase.AdditionalAuthenticationSettingsUpdate45 отдельных масок параметров и форма 2564; методы восстановления и отправки кодов, SMTP, интервалы и проверки компрометации
InfoBase.ConfigUpdate, DBConfigUpdate, ConfigUpdateError, DBConfigUpdateErrorVendor, Version
InfoBase.ExclusiveModeChange, ExclusiveModeChangeErrorExclusiveMode
Access.Access, AccessDeniedтаблица Data, либо Right, либо Action и незаданные Data
InfoBase.SecondAuthenticationFactorTemplateNew, SecondAuthenticationFactorTemplateUpdate, SecondAuthenticationFactorTemplateDeleteName
InfoBase.EventLogSettingsUpdate, EventLogSettingsUpdateErrorLevels либо EventName, EventIsLogged
InfoBase.EventLogReduce, EventLogReduceErrorDate
InfoBase.RegionalSettingsChange11 свойств региональных установок
Session.ExternalDataProcessorConnect, ExternalDataProcessorConnectError, ExternalReportConnect, ExternalReportConnectErrorпуть, имя, безопасный режим, профиль безопасности, защита от опасных действий и язык
Session.AddInAttach, AddInAttachErrorName, Location, незаданные Type, AttachmentType
InfoBase.SessionLockChange, SessionLockChangeErrorUse, Begin, End, Message, KeyCode, Parameter
InfoBase.ConfigExtensionUpdate, DBConfigExtensionInsert, DBConfigExtensionInsertError, DBConfigExtensionDelete, DBConfigExtensionDeleteError, DBConfigExtensionUpdate, DBConfigExtensionUpdateError15 свойств расширения: имя, версия, поставщик, UUID, хэш, синоним, режимы, профиль, назначение, область и роли
Data.DataHistorySettingsUpdate, PredefinedDataInitialization, UpdatePredefinedData; InfoBase.PredefinedDataUpdateтаблица Data в подтвержденной именованной форме

Всего специальные правила охватывают 56 кодов событий. Для остальных возможен общий разбор именованных пар; неподтвержденные формы сохраняются целиком.

Представление значений ​

Числа и булевы значения в разобранных данных представлены строками ("0", "false"), как в исходном декодере. Это сохраняет точность длинных чисел и единый контракт. Даты — локальные значения 1С yyyy-MM-ddTHH:mm:ss, без добавления часового пояса. Пустая дата сохраняется как 0001-01-01T00:00:00. Пустые строки не удаляются. null означает незаданное поле подтвержденной формы; в общем разборе U сохраняется явно как {"$type":"U"}.

Например, блокировка аутентификации: {"Name":"FixtureUser"}.

Для подтвержденных форм User.New, Update, NewError, UpdateError свойства пользователя находятся прямо в корне объекта, без $format, values и nodes. Состав ролей пользователя намеренно не экспортируется; вместо списка UUID сохраняется RolesCount. Точный состав ролей из телеметрии восстановить нельзя. DefaultRoles расширения остается отдельным полем.

Для остальных позиционных форм используется конверт 1c-positional-data-v1: layout, values, unnamedFields, nodes. Для общих именованных пар — 1c-named-data-v1: values, nodes. Ссылки сохраняют идентификаторы, без попытки прочитать объект из информационной базы. Для неизвестных форм расположение ролей не угадывается: сохраняется исходное дерево. Если маска, число или типы полей неизвестны, возвращается {"$format":"1c-brackets-v1","nodes":[...]}. nodes сохраняет дерево и исходный текст листьев, включая удвоенные кавычки. Переход на новую платформу не приводит к угадыванию полей.

Поиск в Loki ​

При штатном приеме OTLP Loki разворачивает поля объекта в structured metadata: v8.eventlog.data.Name становится v8_eventlog_data_Name. Эти поля не добавляются в индексные метки и доступны без разбора JSON в запросе. Например:

logql
{service_name="erp"} | v8_eventlog_data_Name="FixtureUser"

Loki хранит значения metadata строками: незаданные значения (null) в результатах запросов не отображаются, а массив передается JSON-строкой. Сам OTLP-атрибут сохраняет вложенные объекты, массивы, пустые строки и незаданные значения. Другие приемники могут представлять их иначе. При нормализации имен точки и другие неподдерживаемые символы заменяются на _.

Неизвестные формы по-прежнему находятся в v8_eventlog_data как JSON-строка.

Подставьте service.name своего источника и период журнала. Поля Data следует оставлять атрибутами логов, не добавляя их в индексные метки Loki или в разрезы метрик.