Журнал аудита¶
Журнал аудита отвечает на один вопрос: кто это сделал. Каждое изменение, сделанное через панель или API — заведённый стрим, снятое направление доставки, правка настроек машины, заведение администратора, — оставляет в нём запись с временем, автором и названием изменённой вещи. Туда же попадают входы в панель, удачные и неудачные.
Это не логи и не мониторинг. Логи отвечают на вопрос «что происходило внутри процесса», журнал — на вопрос «что сделал человек». Поэтому записей в нём немного, они читаются глазами, и удалить их из панели нельзя.
Кто видит журнал¶
Раздел Журнал аудита виден двум ролям:
- security — роль надзора: журнал аудита и собственная учётная запись (вход, смена своего пароля, выход). Настройки, стримы и наблюдаемое состояние ей закрыты целиком, включая чтение.
- superadmin — как и всё остальное в панели.
Ролям admin и viewer журнал закрыт: надзор над операторами не принадлежит самим операторам, а смотрителю журнал раскрыл бы логины администраторов и адреса, с которых они заходят. Запрет держит сервер, а не оформление меню: у роли без доступа запрос отклоняется и по прямой ссылке.
Роль выдаётся в разделе Аккаунты. Человеку, который следит за действиями операторов, заводят отдельную учётную запись с ролью security, а не выдают ему суперадмина.

Что попадает в журнал¶
Запись оставляет состоявшееся изменение и вход в панель:
- правка настроек — стрима, машины, шаблона, источника расписания, доступа, самой управляющей установки;
- работа с машинами кластера — регистрация, отзыв, удаление, открытие и закрытие окна присоединения;
- работа с учётными записями — заведение, правка, удаление, смена пароля;
- перенос настроек из Flussonic v3 — и построение плана, и его применение;
- ручной запуск размещения;
- вход администратора и неудачная попытка входа;
- работа с реестром клиентов — заведение, правка и удаление клиента, привязка и отвязка аккаунта.
Массовая операция даёт запись на каждый затронутый объект, а не одну на вызов: перенос трёхсот стримов виден тремястами записями, и поиск по имени найдёт любой из них.
Отдельно стоит раскрытие действующего токена присоединения: это чтение, но раскрытие секрета равносильно его выдаче, поэтому запись остаётся. Само значение токена в неё не попадает.
Чего в журнале нет¶
Журнал молчит о том, что не является действием человека:
- Неуспешные попытки. Отказ по правам, отказ проверки, конфликт версий документа — это не изменение. Такие попытки видны в логах и счётчиках. Исключение одно: неудачный вход записывается, потому что подбор пароля — предмет надзора.
- Повтор без изменения. Сохранение документа, который дословно совпадает с уже сохранённым, записи не оставляет.
- Собственные решения машины. Плановое размещение стримов, чистки по сроку хранения, смена держателя мандата — предмет логов и журнала решений размещения, а не аудита. Ручной запуск размещения при этом записывается: его сделал человек.
- Продление и завершение сессии. Записываются вход и неудачная попытка входа; обновление сессии и выход — нет.
Секретов в записях не бывает: ни паролей, ни ключей, ни токенов, ни полных документов настроек. Про правку записывается, какие поля менялись, а не что в них было записано.
Лента и её колонки¶
Записи идут от новых к старым. Кнопка Показать ещё дочитывает следующую страницу — лента не обрывается на первых пятидесяти записях.

В таблице пять колонок:
- Время — момент действия.
- Актор — кто действовал. Это либо логин администратора, либо один из служебных видов: статический ключ (вход аварийными учётными данными из
/etc/mcaster/secrets.env— общими на всех, поэтому имени за ними нет) и нода (регистрация машины кластера, где актор — её идентификатор). - Действие — что сделано, машинным именем вида
<ресурс>.<глагол>:stream_config.put,node_config.patch,admin.create,auth.login. Имена стабильны, по ним удобно искать и фильтровать. - Ресурс — над чем: тип и имя, например
stream/program-a. - Исход — успех у состоявшегося действия и отказ у неудачного входа.
Стрелка слева от строки разворачивает подробности записи: адрес, с которого пришёл запрос, роль администратора, версия документа после правки, список изменённых полей и — если запрос пришёл с заголовком трассировки — её идентификатор, по которому запись сопоставляется с логами.

Поиск по журналу¶
Над лентой пять полей, и работают они вместе:
- Тип ресурса и Имя ресурса — «всё, что делали с этим стримом».
- Актор — «всё, что сделал этот человек».
- С и По — окно времени в формате RFC 3339, например
2026-08-14T14:00:00Z.
Кнопка Применить перечитывает ленту с начала. Пустое поле означает «не фильтровать».

Разбор происшествия обычно идёт двумя запросами: сначала по ресурсу — что случилось с этим стримом, потом по актору из найденной записи — что этот же человек делал в тот день ещё.
Хранение и защита¶
Журнал живёт в той же базе, что и остальное состояние машины, и переживает перезапуск процесса. Файлов на диске он не заводит.
Записи только добавляются: правки и удаления отдельной записи не существует ни в панели, ни в API. Срок хранения — семь суток по умолчанию — задаётся настройкой процесса audit_log_ttl_secs в /etc/mcaster/, и поменять его через панель нельзя. Это сделано намеренно: тот, кто хочет спрятать своё действие, не должен иметь возможности сократить срок хранения тем же доступом, которым он это действие совершил. Нулевое значение означает «хранить всё», а не «стереть всё».
Защиты от того, у кого есть доступ к самой базе данных, журнал не даёт и не обещает.
Выгрузка в SIEM¶
Наружу журнал отдаётся единственным способом — чтением. Файлов, сокетов и исходящих подключений к приёмнику Mcaster не заводит.
Внешний сборщик читает GET /central/api-v4/audit-log той же операторской авторизацией, что и остальное управляющее API, и дочитывает журнал курсором: в ответе есть поле next, которое подставляется параметром cursor в следующий запрос. Порядок стабилен — от новых к старым, — а у каждого события есть глобальный идентификатор, выведенный из идентичности установки и номера записи. Поэтому перечитанная после обрыва страница даёт те же идентификаторы, и приёмник отбросит дубли сам; события двух разных установок при этом не столкнутся.
Фильтры те же, что и в панели: resource_type, resource_name, actor, from, to, limit (до 1000 записей на страницу).
Журнал и лицензия¶
Журнал аудита — отдельная лицензионная опция. Когда она не выдана, записи не ведутся вовсе, и раздел говорит об этом прямо: лента пуста, а над ней стоит сообщение о том, что журнал не входит в лицензию. Пустая лента без объяснения была бы неотличима от «в журнале ничего нет», и сломанный надзор выглядел бы работающим.
Опция читается на каждый запрос, поэтому после её выдачи журнал начинает работать без перезапуска: новые действия пишутся, лента открывается. Того, что происходило, пока опция не была выдана, в журнале не появится — эти записи не создавались.