Как настроить чтение журнала регистрации 1С сторонним процессом без блокировок и падения производительности?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При организации мониторинга информационной безопасности на предприятии специалисты по ИБ часто запрашивают прямой доступ к логам ИТ-систем. В случае с платформой 1С «Предприятие» это выливается в задачу подключить внешнее ПО (например, агенты SIEM-систем) напрямую к файлу журнала регистрации. Если ваша информационная база настроена на использование нового формата журнала регистрации SQLite (.lgd), такое прямое подключение на чтение может обернуться серьезными техническими проблемами для работающих пользователей.

В этой статье мы подробно разберем, почему одновременная запись сервером 1С и чтение сторонним процессом файла .lgd гарантированно приводят к коллизиям. Мы проанализируем архитектурные ограничения СУБД SQLite в контексте 1С и рассмотрим несколько надежных, проверенных на практике сценариев безопасной передачи логов сотрудникам ИБ.

В чем кроется опасность совместного доступа к файлу .lgd?

Формат журнала регистрации на базе SQLite (файлы с расширением .lgd) появился в платформе 1С начиная с версии 8.3.5. Идея заключалась в том, чтобы предоставить разработчикам быстрый поиск по логам с использованием стандартных SQL-запросов. Однако на практике такое решение повлекло за собой существенные проблемы совместного доступа.

Проанализируем ключевые причины, почему нельзя давать стороннему ПО прямой доступ к активному файлу лога:

  1. Транзакционные блокировки (Database is Locked): СУБД SQLite по своей природе является встраиваемой и ориентирована на локальную работу. Когда сервер 1С (процесс rphost) записывает событие в журнал, он накладывает блокировку на файл. Если в этот же момент сторонний софт (например, агент сбора логов) выполняет тяжелый запрос на чтение, он накладывает общую блокировку (SHARED lock). В результате процесс 1С не может повысить уровень своей блокировки до монопольной для совершения записи. Пользователи в этот момент увидят «песочные часы», а в логах сервера зафиксируются ошибки таймаута блокировок.
  2. Зависание сеансов пользователей: Запись в журнал регистрации во многих конфигурациях происходит внутри транзакций (например, при записи и проведении документов, авторизации пользователей, фиксации ошибок). Если процесс 1С «залипает» на попытке записать строку в заблокированный файл .lgd, транзакция в СУБД (MS SQL, PostgreSQL) остается открытой. Это лавинообразно вызывает блокировки на уровне всей СУБД, парализуя работу сотен пользователей.
  3. Риск повреждения структуры файла лога: SQLite весьма чувствителен к некорректному завершению работы при наличии активных конкурирующих подключений. Если в момент интенсивного чтения сторонней утилитой произойдет перезапуск службы сервера 1С или аварийное завершение процесса, файл .lgd с высокой долей вероятности повредится (ошибка database disk image is malformed). Восстановление многогигабайтного файла лога — трудоемкая процедура, которая далеко не всегда заканчивается успехом, что грозит полной потерей истории аудита за несколько лет.
  4. Официальный отказ 1С от SQLite по умолчанию: Важно отметить, что сама фирма 1С признала эксперимент с SQLite-форматом журнала регистрации не самым удачным для высоконагруженных систем. Начиная с версии платформы 8.3.12, значение по умолчанию для новых баз было возвращено к классическому последовательному (текстовому) формату.

---

Решение 1. Перевод журнала регистрации в последовательный текстовый формат (.lgp)

Это самый простой, надежный и рекомендуемый самой фирмой 1С способ решить проблему блокировок. Текстовый формат журнала регистрации (файлы с расширением .lgp) работает по принципу простого последовательного дописывания новых строк в конец файла. Операционная система позволяет другим процессам открывать такие файлы на чтение в режиме совместного доступа без накладывания жестких эксклюзивных блокировок на запись.

Для того чтобы перевести журнал регистрации в текстовый формат и настроить его правильную ротацию, выполним следующие шаги:

  1. Откроем информационную базу в режиме Конфигуратор с административными правами.
  2. В главном меню перейдем в раздел Администрирование — Настройка журнала регистрации.
  3. В появившемся окне изменим формат журнала на последовательный (в зависимости от версии платформы формулировка может отличаться, но суть остается прежней — отказ от формата SQLite).
  4. Важный шаг: настроим разделение хранения журнала по периодам. Рекомендуется установить значение «День» или «Неделя». В этом случае система будет создавать под каждый период отдельный физический файл лога.

После применения настроек платформа создаст структуру каталогов, где каждый день (или неделю) будет формироваться новый файл с расширением .lgp. Это открывает отличную возможность для интеграции с ИБ:

---

Решение 2. Использование легковесных агентов-сборщиков логов (Log Shippers)

Если ИБ-специалистам требуется мониторинг именно в реальном времени (Real-Time Monitoring) для оперативного реагирования в SIEM, лучшим архитектурным подходом будет связка «Текстовый формат ЖР + Log Shipper».

Разберем, как работает эта схема:

  1. Мы переводим журнал регистрации 1С в последовательный текстовый формат (как описано в Решении 1).
  2. На сервере 1С устанавливается специализированный легковесный агент сбора логов (например, Fluentbit, Logstash, Filebeat или специализированный коннектор вашей SIEM-системы).
  3. Агент настраивается на мониторинг директории с файлами журнала регистрации 1С (обычно это папка 1Cv8Log внутри каталога описания базы данных).
  4. Сборщик логов в режиме реального времени считывает новые строки, появляющиеся в активном файле .lgp, осуществляет их парсинг, при необходимости структурирует в формат JSON и отправляет по сети в централизованное хранилище логов (например, Elasticsearch, OpenSearch, ClickHouse).
  5. SIEM-система работает уже непосредственно с централизованным хранилищем логов, вообще никак не затрагивая работающий сервер 1С. При такой схеме влияние на производительность платформы стремится к нулю.

---

Решение 3. Регламентный экспорт данных средствами самой платформы 1С

Если перевод журнала регистрации в текстовый формат по каким-то причинам невозможен или ИБ-служба категорически требует передавать данные в структурированном виде из формата SQLite, мы можем организовать экспорт данных силами самой 1С. Для этого напишем регламентное задание, которое будет периодически выгружать новые записи во внешнюю базу данных (например, на MS SQL Server или ClickHouse).

Рассмотрим пример кода, который можно использовать в модуле регламентного задания. Мы будем использовать встроенный метод СкопироватьЖурналРегистрации(), который умеет эффективно отбирать записи за определенный период без риска нарушить целостность файлов лога:


Процедура ВыполнитьЭкспортЖурналаРегистрации() Экспорт

    // Определяем период выгрузки (например, за последние 5 минут)
    КонецПериода = ТекущаяДата();
    НачалоПериода = КонецПериода - 300; // 5 минут в секундах
    
    // Создаем структуру отбора для получения новых записей
    ФильтрОтбора = Новый Структура;
    ФильтрОтбора.Вставить("ДатаНачала", НачалоПериода);
    ФильтрОтбора.Вставить("ДатаОкончания", КонецПериода);
    
    // Определяем временную таблицу для выгрузки данных
    ТаблицаЛогов = Новый ТаблицаЗначений;
    
    // Копируем записи журнала во временную таблицу значений
    СкопироватьЖурналРегистрации(ТаблицаЛогов, ФильтрОтбора);
    
    Если ТаблицаЛогов.Количество() > 0 Тогда
        // Вызываем процедуру записи полученных строк во внешнюю базу ИБ
        ЗаписатьЛогиВоВнешнийИсточник(ТаблицаЛогов);
    КонецЕсли;

КонецПроцедуры

В процедуре ЗаписатьЛогиВоВнешнийИсточник() разработчик может реализовать запись данных через ADO-соединение во внешнюю СУБД или отправку пакетов данных через REST API / HTTP-сервисы, развернутые на стороне службы информационной безопасности. Этот метод полностью безопасен, так как чтение лога выполняет сам рабочий процесс 1С, корректно управляя внутренними блокировками платформы.

---

Решение 4. Использование теневого копирования (VSS) для создания копий журнала

Если требования к оперативности получения логов не жесткие (допускается задержка обновления данных раз в несколько часов или раз в сутки), оптимальным решением станет периодическое копирование активного файла лога. Однако просто скопировать файл .lgd средствами операционной системы в момент работы пользователей нельзя — файл будет заблокирован процессом 1С.

Для создания консистентной копии файла без остановки сервера 1С проанализируем следующий алгоритм:

  1. На сервере Windows настраивается скрипт, использующий службу теневого копирования томов VSS (Volume Shadow Copy Service). На серверах Linux аналогичный результат достигается использованием LVM-снапшотов.
  2. Скрипт создает мгновенный «снимок» диска, на котором расположен каталог с журналом регистрации.
  3. Из полученного теневого снимка копируется файл .lgd во временную «песочницу», выделенную для ИБ-специалистов.
  4. Сторонний софт ИБ производит анализ скопированного файла.

При таком подходе ИБ-специалисты работают с точной, физически целостной копией базы SQLite, а рабочие процессы 1С не испытывают абсолютно никаких проблем с производительностью и блокировками.

Резюме и рекомендации

Подводя итоги, дадим четкие рекомендации для администраторов 1С, к которым пришел менеджер по безопасности с требованием «подключиться к логам»:

← На главную