Documentation for automated readers
A curated documentation index is available at: https://grafana.com/llms.txt
A complete documentation index is available at: https://grafana.com/llms-full.txt
These indexes can help with page discovery before fetching individual documents.
This page is also available in Markdown, which may be easier for automated readers
and AI tools to parse than HTML. The Markdown version is available at
https://grafana.com/ru/docs/grafana/latest/setup-grafana/configure-security/audit-grafana.md, or by sending
Accept: text/markdown to https://grafana.com/ru/docs/grafana/latest/setup-grafana/configure-security/audit-grafana/. For broader
documentation discovery, the curated index is available at https://grafana.com/llms.txt
and the complete index is available at https://grafana.com/llms-full.txt.
Аудит позволяет отслеживать важные изменения в вашем экземпляре Grafana. В зависимости от вашего развёртывания вы можете отправлять журналы аудита в файл, на совместимую с Loki конечную точку или в стандартный логгер Grafana.
Журнал аудита создаётся только для запросов к API или действий в интерфейсе, которые вызывают запрос к API.
Grafana Enterprise поддерживает все три экспортёра: file, Loki и console.
Grafana Cloud использует экспортёр Loki. Чтобы включить журналы аудита для вашего экземпляра Grafana Cloud, создайте обращение в службу поддержки. Применяются стандартные тарифы на приём и хранение.
Как устроены журналы аудита
Журналы аудита — это объекты JSON, представляющие действия пользователей, например:
Изменения ресурсов, таких как дашборды и источники данных.
Неудачная попытка пользователя войти в систему.
Формат журнала аудита
Журналы аудита содержат следующие поля. Поля, помеченные *, присутствуют всегда, остальные зависят от типа записанного действия.
Имя поля
Тип
Описание
timestamp*
string
Дата и время выполнения запроса в формате всемирного координированного времени (UTC) согласно RFC3339.
user*
object
Информация о пользователе, выполнившем запрос. Если isAnonymous=false, содержимое есть в одном из полей UserID или ApiKeyID.
user.userId
number
ID пользователя Grafana, выполнившего запрос.
user.orgId*
number
Текущая организация пользователя, выполнившего запрос.
user.orgRole
string
Текущая роль пользователя, выполнившего запрос.
user.name
string
Имя пользователя Grafana, выполнившего запрос.
user.authTokenId
number
ID токена аутентификации пользователя.
user.apiKeyId
number
ID ключа API Grafana, использованного для выполнения запроса.
user.isAnonymous*
boolean
true, если запрос выполнил анонимный пользователь. В противном случае false.
action*
string
Действие запроса. Например, create, update или manage-permissions.
request*
object
Информация об HTTP-запросе.
request.params
object
Параметры пути запроса.
request.query
object
Параметры строки запроса.
request.body
string
Тело запроса. Заполняется значением <non-marshalable format>, если это не корректный JSON.
result*
object
Информация об HTTP-ответе.
result.statusType
string
success, если действие запроса выполнено успешно. В противном случае failure.
result.statusCode
number
HTTP-статус запроса.
result.failureMessage
string
Сообщение об ошибке HTTP.
result.body
string
Тело ответа. Заполняется значением <non-marshalable format>, если это не корректный JSON.
resources
array
Информация о ресурсах, которых коснулось действие запроса. Это поле может быть null для действий, не связанных с ресурсами, таких как login или logout.
resources[x].id
number
ID ресурса, если доступен.
resources[x].type*
string
Тип записанного ресурса: alert, alert-notification, annotation, api-key, auth-token, dashboard, datasource, folder, org, panel, playlist, report, team, user или version.
resources[x].uid
string
UID ресурса, если доступен.
resources[x].name
string
Имя ресурса, если доступно. Сейчас Grafana заполняет это поле для ресурсов user.
requestUri*
string
URI запроса.
ipAddress*
string
IP-адрес, с которого выполнен запрос.
userAgent*
string
Агент, с помощью которого выполнен запрос.
grafanaVersion*
string
Текущая версия Grafana на момент создания этой записи журнала.
additionalData
object
Дополнительная информация, которая может быть предоставлена о запросе.
Поле additionalData может содержать следующую информацию:
Имя поля
Действие
Описание
loginUsername
login
Логин, использованный в форме аутентификации Grafana.
extUserInfo
login
Информация о пользователе, предоставленная внешней системой, использованной для входа.
authTokenCount
login
Количество активных токенов аутентификации у вошедшего пользователя.
terminationReason
logout
Причина выхода пользователя, например ручной выход или истечение срока действия токена.
billing_role
billing-information
Роль для выставления счетов, связанная с отправляемой информацией о выставлении счетов.
Определение записанных действий
Журналы аудита включают записи о следующих категориях действий. Каждое действие
различается по полям action и resources[...].type в записи JSON.
Например, создание ключа API порождает такой журнал аудита:
Некоторые действия можно различить только по их полям requestUri. Для таких действий
приводится соответствующий шаблон поля requestUri.
Почти все записанные действия соответствуют запросам к API или действиям в интерфейсе, которые вызывают запрос к API. Например, действие {"action": "email", "resources": [{"type": "report"}]} соответствует инициированному пользователем предпросмотру отчёта по электронной почте, а не отправке по расписанию.
Журналы аудита можно сохранять в файлы, отправлять на совместимую с Loki конечную точку или в стандартный логгер Grafana. Какой экспортёр использовать, выбирается в
файле конфигурации.
Доступные варианты — file, loki и logger. Несколько режимов разделяются пробелами, например file loki.
Не все экспортёры доступны во всех вариантах развёртывания:
Экспортёр
Grafana Enterprise
Grafana Cloud
File
Да (по умолчанию)
Нет
Loki
Да
Да (по умолчанию)
Console
Да
Нет
По умолчанию содержимое дашбордов не попадает в журналы аудита, поскольку это может значительно увеличить размер журнала. Чтобы включить содержимое дашбордов, включите параметр log_dashboard_content.
Тела запросов и ответов при запросах к источникам данных также по умолчанию исключаются. Включение log_datasource_query_request_body или log_datasource_query_response_body значительно увеличивает объём журналов и может раскрыть конфиденциальные данные, такие как параметры запросов, учётные данные или персональные данные.
Прежде чем Grafana обработает DELETE /api/admin/users/{id}, она пытается зафиксировать отображаемое имя пользователя, а если отображаемое имя пусто — логин, чтобы журнал аудита мог сохранить его после успешного удаления. Параметр snapshot_timeout задаёт кооперативный контекстный срок для этого поиска. Хранилище пользователей должно учитывать отмену контекста, поэтому эта настройка не является жёсткой верхней границей задержки запроса. Если поиск завершается неудачей или обнаруживает истёкший срок, Grafana продолжает обработку запроса. Если удаление прошло успешно, журнал аудита не содержит resources[x].name.
ini
[auditing]
# Enable the auditing feature
enabled = false
# List of enabled loggers
loggers = file
# Keep dashboard content in the logs (request or response fields); this can significantly increase the size of your logs.
log_dashboard_content = false
# Whether to record data source queries' request body. This can significantly increase the size of your logs. Disabled by default.
log_datasource_query_request_body = false
# Whether to record data source queries' response body. This can significantly increase the size of your logs. Disabled by default.
log_datasource_query_response_body = false
# Keep requests and responses body; this can significantly increase the size of your logs.
verbose = false
# Write an audit log for every status code.
# By default it only logs the following ones: 2XX, 3XX, 401, 403 and 500.
log_all_status_codes = false
# Maximum response body (in bytes) to be audited; 500KiB by default.
# May help reducing the memory footprint caused by auditing.
max_response_size_bytes = 512000
# Timeout for resolving resource names before Grafana serves a request that
# may delete resources. Uses duration format, for example, 500ms or 2s.
# The default is 500ms.
snapshot_timeout = 500ms
У каждого экспортёра есть собственные поля конфигурации.
Экспортёр File
Note
Экспортёр File доступен только в Grafana Enterprise.
Журналы аудита сохраняются в файлы. Вы можете настроить папку, в которой будут сохраняться эти файлы. Журналы ротируются при превышении размера файла и в начале нового дня.
ini
[auditing.logs.file]
# Path to logs folder
path = data/log
# Maximum log files to keep
max_files = 5
# Max size in megabytes per log file
max_file_size_mb = 256
Экспортёр Loki
Журналы аудита отправляются на совместимую с Loki конечную точку по HTTP или gRPC. Этот экспортёр можно использовать для отправки журналов в Grafana Cloud Logs, в самостоятельно развёрнутый экземпляр Loki или в любой другой сервис, принимающий push API Loki.
Note
Вариант HTTP для экспортёра Loki доступен только в Grafana Enterprise версии 7.4 и более поздних.
ini
[auditing.logs.loki]
# Set the communication protocol to use with Loki (can be grpc or http)
type = grpc
# Set the address for writing logs to Loki
url = localhost:9095
# Defaults to true. If true, it establishes a secure connection to Loki
tls = true
# Set the tenant ID for Loki communication, which is disabled by default.
# The tenant ID is required to interact with Loki running in multi-tenant mode.
tenant_id =
# Only available for the HTTP client. Disabled by default.
# How long to wait before sending a request to Loki with the batch of events. Uses duration format, for example, 5s, 1m
# Whichever threshold is hit first between `batch_wait_duration` and `batch_size_bytes` triggers the batch to be sent to Loki.
# If the wait duration is very long and the `batch_size_bytes` is very high, events might take a long time to be sent.
# To enable batching, you must also set the `batch_size_bytes` configuration option.
batch_wait_duration =
# Only available for the HTTP client. Disabled by default.
# How many events, in bytes, to accumulate in a single batch before sending it to Loki.
# Whichever threshold is hit first between `batch_wait_duration` and `batch_size_bytes` triggers the batch to be sent to Loki.
# If you want to always wait for the `batch_wait_duration`, set `batch_size_bytes` to a very high number.
# To enable batching, you must also set the `batch_wait_duration` configuration option.
batch_size_bytes =
Если несколько экземпляров Grafana отправляют журналы в один и тот же сервис Loki или если вы используете Loki для журналов, не относящихся к аудиту, журналы аудита сопровождаются дополнительными метками, помогающими их опознать:
Метка
Значение
host
Имя хоста ОС, на котором запущен экземпляр Grafana
grafana_instance
URL приложения
kind
auditing
Если ваш экземпляр Loki требует basic-аутентификацию, укажите учётные данные в поле URL. Например:
ini
# Set the communication protocol to use with Loki (can be grpc or http)
type = http
# Set the address for writing logs to Loki
url = user:password@localhost:3000
Экспортёр Console
Note
Экспортёр Console доступен только в Grafana Enterprise.
Журналы аудита отправляются в стандартный логгер Grafana. Эти журналы используют логгер auditing.console и записываются на уровне debug. Как включить журналирование уровня debug, см. в разделе
конфигурация журнала. Получение журналов аудита таким способом не рекомендуется для промышленной эксплуатации.