Система аудита действий пользователей: реализация и внедрение

Представьте: клиент сообщает, что кто-то изменил цены на сайте, а кто и когда — неизвестно. Без системы аудита вы тратите часы на копание в логах сервера, но не находите виновного. Или хуже — регулятор запрашивает журнал изменений за два года, а его просто нет. Мы сталкивались с этим не раз. Поэтому

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Система аудита действий пользователей: реализация и внедрение
Средний
~2-3 дня

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Представьте: клиент сообщает, что кто-то изменил цены на сайте, а кто и когда — неизвестно. Без системы аудита вы тратите часы на копание в логах сервера, но не находите виновного. Или хуже — регулятор запрашивает журнал изменений за два года, а его просто нет. Мы сталкивались с этим не раз. Поэтому внедряем систему аудита действий пользователей, которая фиксирует каждое значимое событие: кто, что, когда и с какого IP.

Без такой системы восстановление цепочки событий превращается в археологию, а каждый запрос регулятора грозит штрафом до 4% годового оборота. Наша система не только фиксирует события, но и позволяет быстро фильтровать журнал по десятку параметров, экономя часы работы администратора. Например, у крупного e-commerce проекта ежедневно генерируется до 50 000 записей аудита, и без автофильтрации поиск инцидента занимал бы дни.

Какие проблемы решает аудит пользователей?

Система аудита действий пользователей решает проблему отсутствия прозрачности: без журнала невозможно понять, кто изменил важные данные или удалил запись. Аудит даёт полную картину.

  • Регуляторные риски. 152-ФЗ и GDPR требуют отслеживать доступ к персональным данным. Нарушение — штрафы до 4% оборота.
  • Производительность. Синхронная запись в каждый запрос убивает БД. Мы используем очереди и пакетную вставку — это снижает нагрузку на 80%.
  • Долгий поиск инцидентов. Без фильтрации по пользователю, событию и дате найти нужную запись — иголка в стоге сена.

Что и как логировать

Обязательные события

Событие Обязательность Рекомендованный метод
Вход/выход Обязательно Laravel Events
Неудачные попытки входа Обязательно Laravel Events
Изменение пароля, email Обязательно Observer модели User
Изменение прав доступа, ролей Обязательно Observer или пакет
CRUD критических сущностей Обязательно Пакет Auditing
Платёжные операции Обязательно Observer или событие
Экспорт данных Обязательно Middleware
Просмотр чужих данных Опционально Middleware
API-запросы к админке Опционально Middleware

Структура таблицы аудита

CREATE TABLE audit_logs ( id BIGSERIAL PRIMARY KEY, user_id BIGINT REFERENCES users(id) ON DELETE SET NULL, event VARCHAR(100) NOT NULL, -- 'user.password_changed' subject_type VARCHAR(100), -- 'App\\Models\\User' subject_id BIGINT, -- ID изменённой сущности old_values JSONB, -- состояние до new_values JSONB, -- состояние после ip_address INET, user_agent TEXT, session_id VARCHAR(100), created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); CREATE INDEX idx_audit_user ON audit_logs(user_id); CREATE INDEX idx_audit_event ON audit_logs(event); CREATE INDEX idx_audit_subject ON audit_logs(subject_type, subject_id); CREATE INDEX idx_audit_created ON audit_logs(created_at DESC); 

Поскольку таблица аудита может расти до сотен гигабайт, важно правильно индексировать поля. Мы используем индексы на user_id, event, subject_type+subject_id и created_at DESC — это ускоряет типовые запросы в 20 раз.

Как быстро найти нужное событие в журнале?

С правильно настроенными индексами и фильтрацией поиск записи занимает секунды. Добавьте интерфейс с выбором дат, пользователя и типа события — и администратор перестанет тратить часы на ручной просмотр логов. Мы реализуем такую панель за пару дней.

Как реализовать систему аудита

Использование готового пакета

Пакет owen-it/laravel-auditing — наиболее распространённый выбор. Подходит для 80% проектов. Настройка занимает час.

// composer require owen-it/laravel-auditing // В модели use OwenIt\\Auditing\\Contracts\\Auditable; class User extends Model implements Auditable { use \\OwenIt\\Auditing\\Auditable; // Исключить из аудита чувствительные поля protected $auditExclude = ['password', 'remember_token']; // Только при определённых событиях protected $auditEvents = ['created', 'updated', 'deleted']; } 

Пакет ускоряет внедрение в 4 раза по сравнению с кастомной реализацией. Однако для нестандартных сценариев (логирование неудачных входов, API-запросов) лучше подходит Observer.

Кастомный Observer

// app/Observers/AuditObserver.php class AuditObserver { public function updated(Model $model): void { if (!$model->wasChanged()) return; AuditLog::create([ 'user_id' => auth()->id(), 'event' => strtolower(class_basename($model)) . '.updated', 'subject_type' => get_class($model), 'subject_id' => $model->getKey(), 'old_values' => $model->getOriginal(), 'new_values' => $model->getChanges(), 'ip_address' => request()->ip(), 'user_agent' => request()->userAgent(), ]); } } // Регистрация в AppServiceProvider User::observe(AuditObserver::class); Order::observe(AuditObserver::class); 

Middleware и события аутентификации

Пример middleware для HTTP-запросов
// app/Http/Middleware/AuditRequests.php class AuditRequests { private array $auditedRoutes = [ 'admin.*', 'api.users.*', 'api.settings.*', ]; public function handle(Request $request, Closure $next): Response { $response = $next($request); if ($this->shouldAudit($request)) { AuditLog::create([ 'user_id' => auth()->id(), 'event' => 'http.' . strtolower($request->method()), 'new_values' => [ 'url' => $request->url(), 'method' => $request->method(), 'status' => $response->status(), ], 'ip_address' => $request->ip(), ]); } return $response; } } 

Почему асинхронная запись аудита критична?

Синхронная запись в каждом запросе — нагрузка на БД. Решения:

  • Асинхронная запись через очереди — отправка задачи WriteAuditLog на очередь audit.
  • Пакетная вставка — накапливать записи в Redis, сбрасывать раз в минуту.
  • Отдельная БД для аудита — изолирует нагрузку.
// Асинхронная запись через очереди dispatch(new WriteAuditLog($data))->onQueue('audit'); // Пакетная вставка — накапливать в Redis, сбрасывать раз в минуту Redis::rpush('audit_queue', json_encode($data)); // Отдельная БД для аудита // config/database.php 'audit' => [ 'driver' => 'pgsql', 'database' => 'audit_db', // ... ] 

Сравнение подходов: пакет vs кастом

Критерий owen-it/laravel-auditing Кастомный Observer
Время внедрения 1 час 4-8 часов
Гибкость Ограниченная Полная
Документация Отличная Нет
Обновления Активные Сами
Производительность Хорошая (есть конфиги) Зависит от реализации

Для типового проекта выбираем пакет. Если нужна нестандартная логика — свяжитесь с нами для консультации.

Процесс и сроки внедрения

Что входит в работу

  • Проектирование схемы аудита под ваши сущности
  • Реализация логирования (пакет или кастом)
  • Настройка асинхронной записи через очереди
  • Интерфейс просмотра с фильтрацией по пользователю, событию, временному диапазону, сущности
  • Ротация логов (Artisan-команда)
  • Документация и миграции
  • Обучение администраторов
  • Гарантия 6 месяцев

Сроки реализации

  • Базовая модель + Observer для ключевых сущностей — от 2 до 3 дней
  • Полноценная система с очередями, ротацией и UI — от 5 до 7 дней

Точный срок зависит от количества моделей и сложности бизнес-логики. Мы оценим ваш проект бесплатно — просто свяжитесь с нами. Опыт работы с Laravel более 5 лет, реализовали аудит для 20+ проектов. Гарантируем соответствие требованиям 152-ФЗ и GDPR.

Свяжитесь с нами для бесплатной оценки вашего проекта. Закажите внедрение системы аудита уже сегодня.