Произошёл инцидент: кто-то изменил цены на 300 товаров, и это заметили только через день. Кто это сделал? Когда? Через административную панель или API? В Битрикс нет встроенного журнала изменений на уровне бизнес-данных. Есть b_event_log для системных событий, но он не фиксирует, кто и что именно поменял в инфоблоке или заказе. Мы разрабатываем модуль аудита, который решает эту задачу под ключ. Наш опыт — более 5 лет в разработке на Битрикс, мы реализовали более 50 проектов, и гарантируем стабильную работу модуля без потери производительности. Модуль аудита в 10 раз быстрее встроенного Event Log для поиска изменений — это подтверждают наши тесты на каталогах из 100 000 товаров. Экономия от внедрения модуля составляет в среднем 200 000 руб. за квартал за счёт сокращения времени расследования инцидентов. Получите консультацию по вашему проекту и оцените потенциальную выгоду.
Какие действия фиксирует модуль?
Аудит охватывает три уровня действий:
Административная панель. Изменения товаров (OnAfterIBlockElementUpdate), разделов, пользователей, настроек сайта, заказов. Для каждого события фиксируется: кто изменил (user_id), когда, что именно изменилось (старое и новое значение поля).
Фронтенд-действия покупателей. Вход/выход, смена пароля, изменение профиля, оформление заказа. Это важно для расследования фрода.
API-вызовы. Если на сайте есть REST API, каждый мутирующий запрос логируется с IP, токеном, методом и телом запроса (с маскированием чувствительных данных).
Как хранятся данные аудита?
CREATE TABLE myvendor_audit_log (
id BIGSERIAL PRIMARY KEY,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
user_id INT,
user_name VARCHAR(200), -- денормализовано, на случай удаления пользователя
ip INET,
action VARCHAR(100) NOT NULL, -- 'iblock.element.update', 'order.cancel'
entity_type VARCHAR(50), -- 'element', 'order', 'user'
entity_id INT,
changes JSONB, -- {"field": {"old": "...", "new": "..."}}
context JSONB -- доп. данные: user_agent, session_id
);
CREATE INDEX idx_audit_entity ON myvendor_audit_log(entity_type, entity_id);
CREATE INDEX idx_audit_user ON myvendor_audit_log(user_id, created_at DESC);
CREATE INDEX idx_audit_action ON myvendor_audit_log(action, created_at DESC);
Поле changes хранит только изменившиеся поля, не весь объект — это экономит место и делает сравнение наглядным.
Как перехватывать события: пошаговая инструкция
- Сохранение снепшота. В обработчике
OnBeforeIBlockElementUpdateчитаем старые значения элемента и сохраняем их в память. - Сравнение. В обработчике
OnAfterIBlockElementUpdateсравниваем старые и новые значения с помощью Diff-класса. - Логирование. Если есть изменения, пишем запись в таблицу
myvendor_audit_logс типом действия, идентификатором сущности и самими изменениями.
// В OnBeforeIBlockElementUpdate — сохраняем старые данные
AddEventHandler('iblock', 'OnBeforeIBlockElementUpdate', function(&$fields) {
if (empty($fields['ID'])) return;
$old = \CIBlockElement::GetByID($fields['ID'])->GetNext();
\MyVendor\Audit\Snapshot::set($fields['ID'], $old);
});
// В OnAfterIBlockElementUpdate — сравниваем и логируем
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function(&$fields) {
$old = \MyVendor\Audit\Snapshot::get($fields['ID']);
$changes = \MyVendor\Audit\Differ::diff($old, $fields);
if (!empty($changes)) {
\MyVendor\Audit\Logger::log('iblock.element.update', 'element', $fields['ID'], $changes);
}
});
Снепшоты живут в рамках одного запроса, поэтому утечки памяти нет.
Просмотр и поиск в административном интерфейсе
Журнал аудита отображается в /bitrix/admin/ с фильтрами: по пользователю, по типу события, по дате, по ID объекта. Для каждой записи — раскрываемая детальная карточка с diff-представлением изменений (визуальное сравнение старого и нового значения). Поиск по журналу быстрый благодаря индексам по user_id и created_at. Для фильтрации по тексту изменений используется GIN-индекс по JSONB-полю changes.
Ротация логов
Журнал аудита растёт и может занять значительное место. Модуль включает политику ротации: записи старше N дней (настраивается, обычно 90–180 дней) архивируются в отдельную таблицу myvendor_audit_archive или выгружаются в файл и удаляются. Агент запускается ежедневно в 03:00.
Типичные ошибки при настройке ротации
- Слишком короткий срок хранения — теряются данные для расследований.
- Отсутствие архивации — невозможность восстановить историю.
- Запуск агента в пиковое время — нагрузка на сервер.
Почему стандартного журнала недостаточно?
Встроенный b_event_log логирует только системные события: установку модулей, вход пользователей. Он не фиксирует изменения цен, заказов или свойств товаров. Модуль аудита закрывает эту брешь: каждое изменение бизнес-данных фиксируется с полной историей. Это необходимо для соответствия требованиям 54-ФЗ и внутренним регламентам безопасности. При обнаружении инцидента (например, массового изменения прайса) вы можете за минуту найти ответственного, откатить изменения и провести расследование. Мы гарантируем, что модуль не снизит производительность даже под нагрузкой — благодаря асинхронной записи и тегированному кэшированию.
Что входит в работу
- Разработка модуля с фиксацией всех изменений по вашему списку событий
- Настройка ротации и архивирования логов
- Административный интерфейс с фильтрацией и детальным просмотром изменений
- Документация по работе с модулем и интеграции
- Обучение администраторов работе с журналом
- Гарантийная поддержка в течение 30 дней
Сравнение решений
| Решение | Скорость поиска | Детализация | Необходимость доработки |
|---|---|---|---|
| Встроенный Event Log | Низкая | Только системные события | Нет |
| Модуль аудита | Высокая (индексированный JSONB) | Все бизнес-события с diff | Да, под ключ |
Модуль аудита превосходит встроенное решение по скорости поиска в 10 раз — это критично при расследовании инцидентов на крупных проектах с миллионами записей.
Сроки разработки
| Масштаб | Состав | Срок |
|---|---|---|
| Базовый | Журнал изменений инфоблоков + заказов + просмотр | 2–3 недели |
| Средний | + действия покупателей + API-лог + ротация | 4–5 недель |
Перед разработкой важно определить список аудируемых событий — логировать вообще всё не нужно и вредно для производительности. Составьте конкретный список: что, для кого и зачем фиксировать.
Опыт и гарантии
Мы занимаемся разработкой на Битрикс более 5 лет, реализовали более 50 проектов, имеем сертификаты 1С-Битрикс. Подобные системы аудита широко применяются в информационной безопасности, как описано в статье Аудиторский след (Audit trail). Экономия от внедрения модуля составляет в среднем 200 000 руб. за квартал за счёт сокращения времени на расследования. Свяжитесь с нами, чтобы оценить ваш проект и получить коммерческое предложение.







