Нередко системные администраторы и специалисты 1С сталкиваются с критической аномалией аудита: в базу заходит пользователь Иванов, успешно проводит документы, в реквизитах созданных объектов правильно указывается Иванов, однако в журнале регистрации во всех строках фигурирует Петров либо значение <Неопределено>. При этом в событии аутентификации поле «Данные» содержит реальное имя («Имя: Иванов»), а в колонке «Пользователь» подставлен совершенно другой человек.
Разберем внутренние механизмы платформы, которые приводят к такому поведению, и детально проанализируем шаги по восстановлению корректной работы журнала.
В классическом последовательном текстовом формате журнала регистрации данные разделены на две сущности:
1Cv8.lgf): хранит соответствие внутренних числовых идентификаторов платформы реальным объектам — именам пользователей, их UUID, компьютерам, приложениям и типам событий.*.lgp): содержат хронологические записи, в которые вместо длинных строковых имен записываются только короткие числовые коды из словаря.Когда в системе происходит аппаратная авария (внезапная перезагрузка сервера, сбой дисковой подсистемы или аварийная остановка служб кластера), процесс записи в файл 1Cv8.lgf может быть прерван. В результате нарушается синтаксическая структура строк словаря либо появляются нечитаемые символы сдвига. Платформа 1С при чтении поврежденного словаря сбивает внутренний счетчик свободных идентификаторов и начинает присваивать новым сеансам уже существующие коды старых пользователей. Из-за этого числовой код Иванова начинает совпадать с кодом Петрова, и журнал регистрации подменяет автора действий.
Рассмотрим порядок детальной диагностики и восстановления словаря, если необходимо сохранить накопленную историю журнала регистрации.
1C:Enterprise (в файловом режиме — закрываем все клиентские сеансы).1Cv8Log. Для клиент-серверной базы она расположена внутри каталога данных кластера srvinfo/reg_xxxx/<GUID_базы>/1Cv8Log/, а для файловой — непосредственно в папке информационной базы.1Cv8.lgf в текстовом редакторе, поддерживающем работу с крупными файлами и кодировкой UTF-8. Ищем поврежденные строки в блоках описания пользователей. Корректная запись имеет строгую структуру:
{13,80,152},
При наличии аппаратного сбоя внутри структуры могут появиться лишние пробелы, нулевые байты или разорванные конструкции вида:
{13,80,152} ,
*.lgp: если ошибочные сеансы уже попали в файлы логов, с помощью внешних обработок анализа журнала сопоставляем дату, номер сеанса и имя из поля «Данные» события аутентификации, после чего пакетно заменяем неверный код пользователя на восстановленный правильный идентификатор.Если детальное восстановление поврежденного файла словаря не требуется или занимает слишком много времени, применим стандартные эксплуатационные методы восстановления.
*.lgp располагаются индексные файлы с расширением *.lgx. Останавливаем службу кластера 1С, удаляем все файлы *.lgx в каталоге 1Cv8Log и запускаем службу заново. Платформа выполнит фоновую переиндексацию журнала.1Cv8.lgf поврежден безвозвратно, останавливаем службу сервера и переименовываем папку 1Cv8Log в 1Cv8Log_backup. При старте следующего сеанса 1С создаст чистый каталог с новым, корректно инициализированным словарем описаний.Для регулярного обслуживания и контроля объема журналов в типовых сценариях автоматизации применяются встроенные процедуры и функции платформы.
Рассмотрим пример очистки устаревших записей с помощью встроенного языка:
ГраницаОчистки = НачалоДня(ТекущаяДата() - 60 * 86400); // 60 дней назад
УдалитьУстаревшиеЗаписиЖурналаРегистрации(ГраницаОчистки);
Если требуется скопировать диапазон записей в отдельный файл для резервного хранения перед очисткой, используем метод СкопироватьЖурналРегистрации():
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ДатаОкончания", ГраницаОчистки);
ИмяФайлаАрхива = "C:\Backups\LogArchive_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd") + ".lgp";
СкопироватьЖурналРегистрации(ИмяФайлаАрхива, ПараметрыОтбора);
Проанализируем меры, исключающие возникновение подобных коллизий в дальнейшем:
1Cv8.lgd). В нем транзакционная целостность защищена встроенным механизмом СУБД, что предотвращает рассинхронизацию словаря и записей даже при аварийном обесточивании сервера.*.lgp не затрагивает другие временные интервалы.1Cv8Log на надежный диск: с помощью символических ссылок операционной системы папку журнала регистрации рекомендуется выносить на отдельный отказоустойчивый накопитель, защищенный источником бесперебойного питания.