Аудитный лог
Аудитный лог — это поток записей, фиксирующих работу кластера YDB. В отличие от технических логов, которые помогают в обнаружении сбоев и устранении неполадок, аудитный лог предоставляет данные значимые для безопасности. Он служит источником информации, отвечая на вопросы: кто что сделал, когда и откуда.
Одна запись в аудитном логе может выглядеть так:
{"@timestamp":"2025-11-03T18:07:39.056211Z","@log_type":"audit","operation":"ExecuteQueryRequest","database":"/my_dir/db1","status":"SUCCESS","subject":"serviceaccount@as","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]"}
Примеры типичных событий аудитного лога:
- доступ к данным через DML-запросы;
- операции управления схемой или конфигурацией;
- изменения прав или настроек контроля доступа;
- административные действия пользователей.
Секция audit_config в конфигурации кластера определяет, какие аудит-логи собираются, как они сериализуются и куда доставляются. Подробнее см. в разделе Конфигурация аудитного лога.
Ключевые понятия
Аудитные события
Аудитное событие — это запись в аудитном логе, которая фиксирует одно действие, важное для безопасности. Каждое событие содержит атрибуты, описывающие разные аспекты события. Общие атрибуты перечислены в разделе Общие атрибуты.
Источники аудитных событий
Источник аудитных событий — это служба или подсистема YDB, которая может генерировать аудитные события. Каждый источник имеет уникальный идентификатор (UID) и может предоставлять дополнительные атрибуты, характерные для этого источника. Некоторые источники требуют дополнительной настройки, например включения функциональных флагов, чтобы начать генерировать события. Подробнее см. Обзор источников аудитных событий.
Классы логирования
Аудитные события группируются в классы логирования, которые отражают основные категории операций. Вы можете включать или отключать запись для каждого класса в конфигурации и при необходимости настраивать каждый класс отдельно. Доступные классы логирования:
|
Класс логирования |
Описание |
|
|
Запросы на администрирование кластера. |
|
|
Запросы на администрирование баз данных. |
|
|
Запросы на вход. |
|
|
Регистрация нод. |
|
|
DDL-запросы. |
|
|
DML-запросы. |
|
|
Асинхронные операции RPC, для отслеживания результата которых требуется опрос. |
|
|
Операции экспорта и импорта данных. |
|
|
Операции с ACL (списками контроля доступа). |
|
|
Синтетические heartbeat-сообщения, подтверждающие работу аудитного логирования. |
|
|
Настройки по умолчанию для любого компонента без собственной секции конфигурации. |
На данный момент не все источники аудитных событий группируют события по классам. Чаще всего для их записи будет достаточно базовой конфигурации. Подробности см. в разделе Обзор источников аудитных событий.
Фазы логирования
Некоторые источники аудитных событий разделяют обработку запроса на этапы. Фазы логирования указывают те этапы, на которых создаются события аудитного лога. Указание фаз логирования полезно, когда требуется детальная видимость выполнения запроса и нужно фиксировать события до и после критических этапов обработки. Доступные фазы логирования:
|
Фаза логирования |
Описание |
|
|
Запрос получен, выполнены начальные проверки и аутентификация. Атрибут |
|
|
Запрос полностью завершён. Атрибут |
Направления аудитного лога
Направление аудитного лога — получатель потока аудитного лога.
На данный момент вы можете настроить следующие направления для аудитного лога:
- файл на каждой ноде кластера YDB;
- агент, который доставляет метрики Unified Agent;
- стандартный поток ошибок
stderr.
Вы можете использовать любое из перечисленных направлений или их комбинации. Подробнее см. в разделе Конфигурация аудитного лога.
Если поток перенаправлен в файл, доступ к аудитному логу определяется правами файловой системы. Сохранение аудитного лога в файл рекомендуется для продуктивных инсталляций.
Для тестовых инсталляций направляйте аудитный лог в стандартный поток ошибок (stderr). Дальнейшая обработка потока зависит от настроек логирования кластера YDB.
Обзор источников аудитных событий
В таблице ниже приведены встроенные источники аудитных событий. Используйте её, чтобы определить, какой источник генерирует нужные события и как их включить.
|
Источник / UID |
Что фиксирует |
Требования к настройке |
|
Schemeshard |
Операции со схемой, изменения ACL и действия по управлению пользователями. |
Входит в базовую конфигурацию аудита. |
|
gRPC-сервисы |
Внешние gRPC-запросы YDB. |
Включите соответствующие классы логирования и при необходимости фазы логирования. |
|
gRPC-соединение |
События подключения и отключения клиентов. |
Включите функциональный флаг |
|
gRPC-аутентификация |
Попытки аутентификации в gRPC. |
Включите класс |
|
Сервис мониторинга |
HTTP-запросы, обрабатываемые эндпоинтом мониторинга. |
Включите класс |
|
Heartbeat |
Синтетические heartbeat-события, подтверждающие работоспособность аудитного логирования. |
Включите класс |
|
Изменения конфигурации BlobStorage Controller из консоли. |
Входит в базовую конфигурацию аудита. |
|
|
Distconf |
Обновления распределённой конфигурации. |
Входит в базовую конфигурацию аудита. |
|
Web login |
Взаимодействия с виджетом аутентификации веб-консоли. |
Входит в базовую конфигурацию аудита. |
|
Console |
Операции жизненного цикла баз данных и изменения динамической конфигурации. |
Входит в базовую конфигурацию аудита. |
Атрибуты аудитных событий
Атрибуты делятся на две группы:
- общие атрибуты. Присутствуют в большинстве источников аудитных событий. Они всегда несут одинаковый смысл;
- атрибуты, специфичные для источника аудитных событий.
В этом разделе представлен справочник по атрибутам событий аудитного лога: как общим, так и специфичных для источников. Для каждого источника также указаны его UID, регистрируемые операции и требования к настройке.
Общие атрибуты
В таблице ниже перечислены общие атрибуты.
|
Атрибут |
Описание |
|
|
SID источника события, если обязательная аутентификация включена, иначе |
|
|
Частично маскированный токен аутентификации, использованный для выполнения запроса. Позволяет связывать события и при этом скрывать исходные учётные данные. Если аутентификация не выполнялась, значение будет |
|
|
Название операции (например, |
|
|
Уникальный идентификатор источника аудитных событий. |
|
|
Статус завершения операции.
|
|
|
Сообщение об ошибке. |
|
|
Уникальный идентификатор запроса, вызвавшего операцию. По |
|
|
IP-адрес клиента, отправившего запрос. |
|
|
Статус, который передаёт источник аудитных событий YDB. |
|
|
Путь базы данных (например, |
|
|
Идентификатор облака базы данных YDB. |
|
|
Идентификатор каталога кластера или базы данных YDB. |
|
|
Идентификатор ресурса базы данных YDB. |
Schemeshard
UID: schemeshard.
Регистрируемые операции: операции со схемой, инициированные DDL-запросами, изменения ACL и действия управления пользователями.
Как включить: требуется только базовая конфигурация аудита.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника Schemeshard.
|
Атрибут |
Описание |
|
Общие атрибуты Schemeshard |
> |
|
|
Уникальный идентификатор транзакции. Этот идентификатор помогает различать события разных операций.Обязательный. |
|
|
Список путей в базе данных, которые изменяет операция (например, |
|
Атрибуты владения и прав доступа |
> |
|
|
SID нового владельца объекта при передаче владения. |
|
|
Список добавленных разрешений в краткой записи (например, |
|
|
Список отозванных разрешений в краткой записи (например, |
|
Пользовательские атрибуты |
> |
|
|
Список пользовательских атрибутов, добавленных при создании объектов или обновлении атрибутов (например, |
|
|
Список пользовательских атрибутов, удалённых при создании объектов или обновлении атрибутов (например, |
|
Атрибуты входа/аутентификации |
> |
|
|
Имя пользователя, зафиксированное при операциях входа. |
|
|
Имя группы, зафиксированное при операциях входа. |
|
|
Изменения членства. |
|
|
Изменения, применённые к настройкам пользователя. |
|
|
Уровень привилегий пользователя, записанный в событиях аудита. Это поле принимает значение |
|
Атрибуты операций импорта/экспорта |
> |
|
|
Уникальный идентификатор операции экспорта или импорта. |
|
|
Заданная пользователем метка операции. |
|
|
Время начала операции в формате ISO 8601. |
|
|
Время завершения операции в формате ISO 8601. |
|
|
Время последнего успешного входа пользователя в формате ISO 8601. |
|
Атрибуты экспорта |
> |
|
|
Направление экспорта. Возможные значения: |
|
|
Количество экспортированных элементов. |
|
|
Префикс пути для экспорта в YT. |
|
|
Имя S3-бакета, используемого для экспорта. |
|
|
Префикс пути для экспорта в S3. |
|
Атрибуты импорта |
> |
|
|
Тип источника импорта. Всегда |
|
|
Количество импортированных элементов. |
|
|
Имя S3-бакета, используемого для импорта. |
|
|
Префикс источника в S3. |
gRPC-сервисы
UID: grpc-proxy.
Регистрируемые операции: все внешние (не внутренние) gRPC-запросы.
Как включить: требуется указать классы логирования в конфигурации аудита.
Классы логирования: зависят от типа RPC-запроса: Ddl, Dml, Operations, ClusterAdmin, DatabaseAdmin и другие классы.
Фазы логирования: Received, Completed.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника gRPC services.
|
Атрибут |
Описание |
|
Общие gRPC-атрибуты |
> |
|
|
Имя RPC-метода.Необязательный. |
|
|
Санитизированное представление входящего запроса.Необязательный. |
|
|
Время начала операции в формате ISO 8601.Обязательный. |
|
|
Время завершения операции в формате ISO 8601.Необязательный. |
|
Атрибуты транзакций |
> |
|
|
Идентификатор транзакции. |
|
|
Флаг со значением |
|
|
Показывает, завершается ли транзакция этим запросом. Возможные значения: |
|
Поля запроса |
> |
|
|
Санитизированный текст YQL-запроса. |
|
|
Идентификатор подготовленного запроса. |
|
|
MiniKQL-программа, отправленная с запросом. |
|
|
Описание изменений схемы, запрошенных в операции. |
|
|
Полный путь таблицы. |
|
|
Количество строк, обработанных пакетной вставкой данных. |
|
|
Идентификатор таблетки. |
gRPC-соединение
UID: grpc-conn.
Регистрируемые операции: изменения состояния соединения (подключение и отключение).
Как включить: активируйте функциональный флаг enable_grpc_audit.
Этот источник использует только общие атрибуты.
gRPC-аутентификация
UID: grpc-login.
Регистрируемые операции: аутентификация в gRPC.
Как включить: требуется указать классы логирования в конфигурации аудита.
Классы логирования: Login.
Фазы логирования: Completed.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника gRPC authentication.
|
Атрибут |
Описание |
|
|
Имя пользователя. Обязательный. |
|
|
Уровень привилегий пользователя, записанный в событиях аудита. Это поле принимает значение |
Сервис мониторинга
UID: monitoring.
Регистрируемые операции: HTTP-запросы, обрабатываемые сервисом мониторинга.
Как включить: требуется указать классы логирования в конфигурации аудита.
Классы логирования: ClusterAdmin.
Фазы логирования: Received, Completed.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника Monitoring service.
|
Атрибут |
Описание |
|
|
HTTP-метод запроса, например |
|
|
Путь запроса без параметров строки запроса.Обязательный. |
|
|
Параметры строки запроса в исходном виде.Необязательный. |
|
|
Тело запроса (усечено до 2 МБ с добавлением суффикса |
Heartbeat
UID: audit.
Регистрируемые операции: периодические heartbeat-сообщения аудита.
Как включить: укажите классы логирования в конфигурации аудита.
Классы логирования: AuditHeartbeat.
Фазы логирования: Completed.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника Heartbeat.
|
Атрибут |
Описание |
|
|
Идентификатор ноды, на которой произошло событие. Обязательный. |
BlobStorage Controller
UID: bsc.
Регистрируемые операции: запросы замены конфигурации (TEvControllerReplaceConfigRequest), отправляемые консолью.
Как включить: требуется только базовая конфигурация аудита.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника BlobStorage Controller.
|
Атрибут |
Описание |
|
|
Снапшот предыдущей конфигурации BlobStorage Controller в формате YAML. Необязательный. |
|
|
Снапшот конфигурации, которая заменила предыдущую. Необязательный. |
Distconf
UID: distconf.
Регистрируемые операции: изменения распределённой конфигурации.
Как включить: требуется только базовая конфигурация аудита.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника Distconf.
|
Атрибут |
Описание |
|
|
Снапшот конфигурации, которая была активна до принятия распределённого обновления. Distconf сериализует его в YAML. Обязательный. |
|
|
Снапшот конфигурации, который Distconf зафиксировал после изменения. Обязательный. |
Web login
UID: web-login.
Регистрируемые операции: отслеживает взаимодействия с виджетом аутентификации веб-консоли YDB.
Как включить: требуется только базовая конфигурация аудита.
Этот источник использует только общие атрибуты.
Console
UID: console.
Регистрируемые операции: операции жизненного цикла баз данных и изменения динамической конфигурации.
Как включить: требуется только базовая конфигурация аудита.
Таблица ниже перечисляет дополнительные атрибуты, специфичные для источника Console.
|
Атрибут |
Описание |
|
|
Снапшот конфигурации, которая действовала до применения запроса из консоли. Необязательный. |
|
|
Снапшот конфигурации, применённой консолью. Необязательный. |
Конфигурация аудитного лога
Включение аудитного лога
Аудитное логирование работает на уровне всего кластера. Для базовой конфигурации добавьте раздел audit_config в конфигурацию кластера и укажите одно или несколько направлений потока (file_backend, unified_agent_backend, stderr_backend):
audit_config:
file_backend:
format: audit_log_format
file_path: "path_to_log_file"
unified_agent_backend:
format: audit_log_format
log_name: session_meta_log_name
stderr_backend:
format: audit_log_format
Параметры audit_config
Все поля являются необязательными.
|
Ключ |
Описание |
|
|
Перенаправляет аудитный лог в стандартный поток ошибок ( |
|
|
Записывает аудитный лог в файл на каждой ноде кластера. Если поток перенаправлен в файл, доступ к аудитному логу определяется правами файловой системы. Сохранение аудитного лога в файл рекомендуется для продуктовых инсталляций. См. структуру настроек backend. |
|
|
Отправляет аудитный лог в Unified Agent. Дополнительно необходимо задать секцию |
|
|
Массив правил аудита для разных классов логирования. См. конфигурацию классов логирования. |
|
|
Необязательная конфигурация heartbeat. См. настройки heartbeat. |
Конфигурация направлений
Каждое направление поддерживает следующие поля:
|
Поле |
Описание |
|
|
Формат аудитного лога. Значение по умолчанию — |
|
|
Путь к файлу, в который будет записываться аудитный лог. Если путь или файл отсутствуют, они будут созданы на каждой ноде при запуске кластера. Если файл существует, данные будут дозаписываться. Только для |
|
|
Метаданные сессии, передаваемые вместе с сообщением. По ним можно перенаправлять поток логов в один или несколько дочерних каналов с условием |
|
|
Шаблон JSON, который оборачивает каждую запись лога. Шаблон должен содержать плейсхолдер |
Формат логов
Поле format определяет формат сериализации аудитных событий. Поддерживаются следующие форматы:
|
Формат |
Описание |
|
|
Каждое аудитное событие сериализуется в однострочный JSON-объект с префиксом из временной метки в формате ISO 8601.Пример: |
|
|
Каждое аудитное событие сериализуется в однострочную строку |
|
|
Каждое аудитное событие сериализуется в однострочный JSON-объект, совместимый с целями, совместно используемыми с отладочными логами. Объект содержит поле |
Формат конверта
Backend может оборачивать аудитные события пользовательским конвертом перед отправкой, если указать поле log_json_envelope. Шаблон должен содержать плейсхолдер %message%, который заменяется сериализованной аудитной записью в выбранном формате.
Например, следующая конфигурация выводит аудитные события в stderr в формате JSON, обёрнутые пользовательским конвертом:
audit_config:
stderr_backend:
format: JSON
log_json_envelope: '{"audit": %message%, "source": "ydb-audit-log"}'
Подробнее о выводе см. в разделе Пример с JSON-конвертом.
Настройка классов логирования
Каждый элемент log_class_config поддерживает следующие поля:
|
Поле |
Описание |
|
|
Имя настраиваемого класса. Использует значения из списка классов логирования. В списке |
|
|
Включает генерацию аудитных событий для выбранного класса. По умолчанию отключено. |
|
|
Массив типов аккаунтов ( |
|
|
Массив фаз обработки запроса, которые нужно логировать. См. раздел Фазы логирования. |
Настройки heartbeat
Heartbeat-события помогают контролировать состояние подсистемы аудитного логирования. Они позволяют настраивать оповещения об отсутствии аудитных событий без ложных срабатываний в периоды без активности.
Параметр heartbeat.interval_seconds задаёт частоту записи heartbeat-событий. Значение 0 отключает сообщения heartbeat.
Примеры конфигураций
Простая конфигурация. Ниже приведена простая конфигурация, сохраняющая аудитный лог в текстовом виде в файле с форматом TXT.
audit_config:
file_backend:
format: TXT
file_path: "/var/log/ydb-audit.log"
Расширенная конфигурация. Ниже приведён расширенный пример конфигурации аудитного лога:
- YDB отправляет аудитные логи в Unified Agent в формате
TXTс меткойaudit, а также выводит его вstderrв форматеJSON; - настройки
Defaultвключают логирование всех классов в фазеCompleted; - дополнительно
ClusterAdminнастроен для логирования фазыReceived, аDatabaseAdmin— для исключения событий от анонимных пользователей.
audit_config:
unified_agent_backend:
format: TXT
log_name: audit
stderr_backend:
format: JSON
log_class_config:
- log_class: ClusterAdmin
enable_logging: true
log_phase: [Received, Completed]
- log_class: DatabaseAdmin
enable_logging: true
log_phase: [Completed]
exclude_account_type: [Anonymous]
- log_class: Default
enable_logging: true
heartbeat:
interval_seconds: 60
Примеры
Следующие вкладки демонстрируют одно и то же событие аудитного лога, записанное с разной конфигурацией направления.
Формат JSON создаёт записи следующего вида:
2023-03-14T10:41:36.485788Z: {"paths":"[/my_dir/db1/some_dir]","tx_id":"281474976775658","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","sanitized_token":"{none}","detailed_status":"StatusAccepted","operation":"MODIFY ACL","component":"schemeshard","acl_add":"[+(ConnDB):subject:-]"}
2023-03-13T20:07:30.927210Z: {"reason":"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)","paths":"[/my_dir/db1/some_dir]","tx_id":"844424930216970","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","sanitized_token":"{none}","detailed_status":"StatusAlreadyExists","operation":"CREATE DIRECTORY","component":"schemeshard"}
2025-11-03T18:07:39.056211Z: {"@log_type":"audit","begin_tx":1,"commit_tx":1,"component":"grpc-proxy","database":"/my_dir/db1","detailed_status":"SUCCESS","end_time":"2025-11-03T18:07:39.056204Z","grpc_method":"Ydb.Query.V1.QueryService/ExecuteQuery","operation":"ExecuteQueryRequest","query_text":"SELECT * FROM `my_row_table`;","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","sanitized_token":"xxxxxxxx.**","start_time":"2025-11-03T18:07:39.054863Z","status":"SUCCESS","subject":"serviceaccount@as"}
2025-11-03T17:41:44.203214Z: {"component":"monitoring","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","operation":"HTTP REQUEST","method":"POST","url":"/viewer/query","params":"base64=false&schema=multipart","body":"{\"query\":\"SELECT * FROM `my_row_table`;\",\"database\":\"/local\",\"action\":\"execute-query\",\"syntax\":\"yql_v1\"}","status":"IN-PROCESS","reason":"Execute"}
Формат TXT создаёт записи следующего вида:
2023-03-14T10:41:36.485788Z: component=schemeshard, tx_id=281474976775658, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject={none}, database=/my_dir/db1, operation=MODIFY ACL, paths=[/my_dir/db1/some_dir], status=SUCCESS, detailed_status=StatusSuccess, acl_add=[+(ConnDB):subject:-]
2023-03-13T20:07:30.927210Z: component=schemeshard, tx_id=281474976775657, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject={none}, database=/my_dir/db1, operation=CREATE DIRECTORY, paths=[/my_dir/db1/some_dir], status=SUCCESS, detailed_status=StatusAlreadyExists, reason=Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)
2025-11-03T18:07:39.056211Z: component=grpc-proxy, tx_id=281474976775656, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx, subject=serviceaccount@as, database=/my_dir/db1, operation=ExecuteQueryRequest, query_text=SELECT * FROM `my_row_table`; status=SUCCESS, detailed_status=StatusSuccess, begin_tx=1, commit_tx=1, end_time=2025-11-03T18:07:39.056204Z, grpc_method=Ydb.Query.V1.QueryService/ExecuteQuery, sanitized_token=xxxxxxxx.**, start_time=2025-11-03T18:07:39.054863Z
2025-11-03T17:41:44.203214Z: component=monitoring, remote_address=ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx], operation=HTTP REQUEST, method=POST, url=/viewer/query, params=base64=false&schema=multipart, body={"query":"SELECT * FROM `my_row_table`;","database":"/local","action":"execute-query","syntax":"yql_v1"}, status=IN-PROCESS, reason=Execute
Формат JSON_LOG_COMPATIBLE создаёт записи следующего вида:
{"@timestamp":"2023-03-14T10:41:36.485788Z","@log_type":"audit","paths":"[/my_dir/db1/some_dir]","tx_id":"281474976775658","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","detailed_status":"StatusAccepted","operation":"MODIFY ACL","component":"schemeshard","acl_add":"[+(ConnDB):subject:-]"}
{"@timestamp":"2023-03-13T20:07:30.927210Z","@log_type":"audit","reason":"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)","paths":"[/my_dir/db1/some_dir]","tx_id":"844424930216970","database":"/my_dir/db1","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx","status":"SUCCESS","subject":"{none}","detailed_status":"StatusAlreadyExists","operation":"CREATE DIRECTORY","component":"schemeshard"}
{"@timestamp":"2025-11-03T18:07:39.056211Z","@log_type":"audit","begin_tx":1,"commit_tx":1,"component":"grpc-proxy","database":"/my_dir/db1","detailed_status":"SUCCESS","end_time":"2025-11-03T18:07:39.056204Z","grpc_method":"Ydb.Query.V1.QueryService/ExecuteQuery","operation":"ExecuteQueryRequest","query_text":"SELECT * FROM `my_row_table`;","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","start_time":"2025-11-03T18:07:39.054863Z","status":"SUCCESS","subject":"serviceaccount@as","sanitized_token":"xxxxxxxx.**"}
{"@timestamp":"2025-11-03T17:41:44.203214Z","@log_type":"audit","component":"monitoring","remote_address":"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]","operation":"HTTP REQUEST","method":"POST","url":"/viewer/query","params":"base64=false&schema=multipart","body":"{\"query\":\"SELECT * FROM `my_row_table`;\",\"database\":\"/local\",\"action\":\"execute-query\",\"syntax\":\"yql_v1\"}","status":"IN-PROCESS","reason":"Execute"}
Шаблон JSON-конверта {"audit": %message%, "source": "ydb-audit-log"} создаёт записи следующего вида:
{"audit":"2023-03-14T10:41:36.485788Z: {\"paths\":\"[/my_dir/db1/some_dir]\",\"tx_id\":\"281474976775658\",\"database\":\"/my_dir/db1\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx\",\"status\":\"SUCCESS\",\"subject\":\"{none}\",\"detailed_status\":\"StatusAccepted\",\"operation\":\"MODIFY ACL\",\"component\":\"schemeshard\",\"acl_add\":\"[+(ConnDB):subject:-]\"}\n","source":"ydb-audit-log"}
{"audit":"2023-03-13T20:07:30.927210Z: {\"reason\":\"Check failed: path: '/my_dir/db1/some_dir', error: path exist, request accepts it (id: [OwnerId: 72075186224037889, LocalPathId: 3], type: EPathTypeDir, state: EPathStateNoChanges)\",\"paths\":\"[/my_dir/db1/some_dir]\",\"tx_id\":\"844424930216970\",\"database\":\"/my_dir/db1\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx\",\"status\":\"SUCCESS\",\"subject\":\"{none}\",\"detailed_status\":\"StatusAlreadyExists\",\"operation\":\"CREATE DIRECTORY\",\"component\":\"schemeshard\"}\n","source":"ydb-audit-log"}
{"audit":"2025-11-03T18:07:39.056211Z: {\"@log_type\":\"audit\",\"begin_tx\":1,\"commit_tx\":1,\"component\":\"grpc-proxy\",\"database\":\"/my_dir/db1\",\"detailed_status\":\"SUCCESS\",\"end_time\":\"2025-11-03T18:07:39.056204Z\",\"grpc_method\":\"Ydb.Query.V1.QueryService/ExecuteQuery\",\"operation\":\"ExecuteQueryRequest\",\"query_text\":\"SELECT * FROM `my_row_table`;\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]\",\"sanitized_token\":\"xxxxxxxx.**\",\"start_time\":\"2025-11-03T18:07:39.054863Z\",\"status\":\"SUCCESS\",\"subject\":\"serviceaccount@as\"}\n","source":"ydb-audit-log"}
{"audit":"2025-11-03T17:41:44.203214Z: {\"component\":\"monitoring\",\"remote_address\":\"ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]\",\"operation\":\"HTTP REQUEST\",\"method\":\"POST\",\"url\":\"/viewer/query\",\"params\":\"base64=false&schema=multipart\",\"body\":\"{\\\"query\\\":\\\"SELECT * FROM `my_row_table`;\\\",\\\"database\\\":\\\"/local\\\",\\\"action\\\":\\\"execute-query\\\",\\\"syntax\\\":\\\"yql_v1\\\"}\",\"status\":\"IN-PROCESS\",\"reason\":\"Execute\"}\n","source":"ydb-audit-log"}
Та же запись аудитного лога, представленная для удобства чтения:
{
"paths": "[/my_dir/db1/some_dir]",
"tx_id": "281474976775658",
"database": "/my_dir/db1",
"remote_address": "ipv6:[xxxx:xxx:xxx:xxx:x:xxxx:xxx:xxxx]:xxxxx",
"status": "SUCCESS",
"subject": "{none}",
"detailed_status": "StatusAccepted",
"operation": "MODIFY ACL",
"component": "schemeshard",
"acl_add": "[+(ConnDB):subject:-]"
}