Skip to content

Аудит

Аудит-лог фиксирует каждое изменение в системе: кто, что, когда и какие именно поля изменил. можно. хранит полную историю изменений флагов, сегментов, API-ключей и настроек.

Что попадает в аудит-лог

ОбъектСобытия
ФлагиСоздание, изменение стратегий, изменение таргетинга, переименование, архивация, восстановление, удаление
СегментыСоздание, изменение правил, переименование, удаление
API-ключиСоздание, перевыпуск, отзыв, удаление
ОкруженияСоздание, переименование, удаление
ПроектИзменение настроек, смена названия
ПользователиПриглашение, смена роли, удаление

Просмотр аудит-лога

В веб-панели

Раздел Аудит доступен из главного меню.

Каждая запись содержит:

ПолеОписаниеПример
Дата и времяКогда произошло изменение (UTC)2026-06-21 13:41:05
ПользовательКто внёс изменениеadmin@example.com
ОбъектЧто было измененоФлаг new-checkout
ДействиеТип измененияИзменение стратегии
ДеталиDiff между старым и новым состояниемpercentage: 25 → 50
graph LR
    A[Пользователь] -->|Изменяет флаг| B[Веб-панель]
    B -->|Сохраняет изменение| C[База данных]
    B -->|Пишет запись| D[Аудит-лог]
    E[Администратор] -->|Просматривает| D
    D -->|Фильтрует| F[По дате, пользователю, объекту]

Diff изменений

Для каждого изменения можно. показывает diff — что именно поменялось.

Пример diff

Флаг: new-checkout
Изменил: dev@example.com
Время: 2026-06-21 13:41:05 UTC

--- До
+++ После
{
  "strategies": [
    {
      "type": "gradual",
-     "percentage": 25
+     "percentage": 50
    }
  ]
}

Форматы представления diff

ФорматОписание
JSON DiffПострочное сравнение JSON-структур (RFC 6902)
InlineИзменения выделены цветом: красный — удалено, зелёный — добавлено
Side-by-sideДва столбца: «До» и «После»

Фильтрация аудит-лога

По времени

ФильтрПример
Произвольный диапазонdateFrom=2026-06-01T00:00:00Z&dateTo=2026-06-21T23:59:59Z

По пользователю

Пользователь: admin@example.com

Показывает все действия конкретного администратора или разработчика.

По объекту

Объект: Флаг new-checkout

Вся история изменений одного флага — от создания до архивации.

По типу действия

ФильтрОписание
СозданиеНовые флаги, сегменты, ключи
ИзменениеОбновление стратегий, правил, настроек
УдалениеУдалённые объекты
АрхивацияАрхивные флаги
АутентификацияВходы в систему, смена паролей

Комбинирование фильтров

Время: последние 7 дней
Пользователь: dev@example.com
Объект: Флаг
Действие: Изменение

Покажет все изменения флагов, сделанные разработчиком за последнюю неделю.

Экспорт аудит-лога

Enterprise-функция: Экспорт аудит-лога в CSV/JSON/PDF доступен в Enterprise-версии можно. через FeatureGateSpi.audit.export. Подробнее — Open Core.

Экспорт через веб-панель

  1. Настройте фильтры для нужного диапазона записей
  2. Если Enterprise-функция активна — нажмите «Экспорт»
  3. Выберите формат
  4. Скачайте файл

Поля в экспортированном CSV

ПолеТипПример
timestampdatetime2026-06-21T13:41:05Z
actor_emailstringadmin@example.com
actor_rolestringADMIN
entity_typestringFLAG
entity_keystringnew-checkout
actionstringSTRATEGY_UPDATED
changes_jsonjson{"percentage": {"from": 25, "to": 50}}
ip_addressstring192.168.1.1

Аудит для compliance

можно. хранит аудит-лог в базе данных PostgreSQL. Записи не удаляются и не модифицируются — аудит-лог является append-only хранилищем.

Соответствие требованиям

ТребованиеКак обеспечивается
SOC 2Полный лог всех изменений конфигурации. Экспорт для аудиторов.
GDPRЗаписи аудита не содержат пользовательских данных приложения — только email администраторов.
PCI DSSАудит доступа к критическим настройкам (API-ключи, окружения).

Хранение аудит-лога

ПараметрЗначение по умолчаниюОписание
AUDIT_RETENTION_DAYS365Срок хранения записей аудита в днях

Для продакшен-сред с большим объёмом изменений рекомендуется настроить периодическую очистку:

sql
-- Удаление записей аудита старше 2 лет (выполнять раз в месяц)
DELETE FROM audit_log WHERE created_at < NOW() - INTERVAL '2 years';

Целостность аудит-лога

  • Записи не редактируются после создания
  • Записи не удаляются через веб-панель (только прямой SQL)
  • Каждая запись имеет уникальный идентификатор и timestamp с точностью до микросекунд

Уведомления об изменениях

можно. отправляет уведомления о важных изменениях:

СобытиеКаналПолучатели
Изменение production-флагаEmailВсе администраторы
Создание/отзыв API-ключаEmailВладелец ключа, администраторы
Удаление флагаEmailАдминистраторы

Настройка уведомлений — в разделе Настройки → Уведомления.

Интеграция с внешними системами

Настройте вебхук на одно из событий (например, flag.updated) для получения оповещений при изменениях.

Пример: еженедельный отчёт аудита

yaml
# .github/workflows/audit-weekly.yml
name: Audit Weekly Report
on:
  schedule:
    - cron: '0 9 * * 1'  # Каждый понедельник в 9:00

jobs:
  report:
    runs-on: ubuntu-latest
    steps:
      - name: Получить аудит за неделю
        run: |
          curl "${{ secrets.MOZHNO_URL }}/api/v1/audit?dateFrom=$(date -d '7 days ago' -u +%Y-%m-%dT00:00:00Z)&dateTo=$(date -u +%Y-%m-%dT23:59:59Z)" \
            -H "Authorization: Bearer ${{ secrets.MOZHNO_TOKEN }}" \
            -o audit.json
        env:
          MOZHNO_URL: ${{ secrets.MOZHNO_URL }}
          MOZHNO_TOKEN: ${{ secrets.MOZHNO_TOKEN }}

Что дальше?

Released under the AGPL v3.0 License.