Skip to content

Обзор

В Object Storage вы можете отслеживать и анализировать все действия с бакетом и объектами в нем. Информация об этих действиях записывается в логи.

Логирование помогает:

  • контролировать доступ пользователей к данным, выявлять подозрительные действия и принимать необходимые меры:
  • анализировать взаимодействие сайтов и приложений с Object Storage;
  • собирать статистику использования Object Storage.

Принцип работы

По умолчанию логирование в бакетах отключено. Прежде чем его активировать, нужно:

  1. Создать целевой бакет, в котором будут храниться логи.
  2. Указать префикс для логов в целевом бакете.

Внимание

Если для целевого бакета настроена политика доступа, нужно добавить в нее правило, которое разрешает всем учетным записям выполнять операцию PutObject.

В качестве ресурса нужно указать префикс, используемый для логов.

Когда в бакете включено логирование и пользователь выполняет какую-либо операцию с этим бакетом:

  • Object Storage фиксирует все детали (кто, когда, что и как запрашивал);
  • запись о запросе сохраняется в целевом бакете с указанным префиксом (например, logs/). Имя лога включает дату в формате ГГГГ-ДД-ЧЧ-ММ-СС и идентификатор, например logs/2025-01-15-13-34-34-1f12b0a2-eea3-464c-b655-2dc4d6df2cfb.

Логи сохраняются в формате JSON. Одна запись в логе соответствует одной операции с бакетом.

Сохраненные таким образом логи можно анализировать как вручную, так и с помощью специализированных инструментов (Splunk, Elasticsearch и т.п.).

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

Cтруктура лога

Пример записи
json
{
  "bucket": "bucket",
  "bytes_received": 0,
  "bytes_send": 285,
  "handler": "REST.GET.OBJECT",
  "http_referer": "",
  "ip": "<IP-адрес, с которого был выполнен запрос>",
  "method": "GET",
  "object_key": "logs/2025-01-08-13-04-34-849cace2-11fa-4528-82be-eada4ebc7fd0",
  "protocol": "HTTP/2",
  "range": "",
  "requester": "projects/<имя проекта>serviceAccounts/<имя сервисного аккаунта>",
  "request_args": "x-id=GetObject",
  "request_id": "9bfbacc1-245f-4857-a380-61220c3f5fd6",
  "request_path": "/logs/2025-01-08-13-04-34-849cace2-11fa-4528-82be-eada4ebc7fd0?x-id=GetObject",
  "request_time": 51,
  "scheme": "https",
  "ssl_protocol": "TLSv1.3",
  "status": 200,
  "storage_class": "",
  "timestamp": "2025-01-08T13:15:33Z",
  "user_agent": "aws-sdk-go-v2/1.32.6 ua/2.1 os/linux lang/go#1.23.4 md/GOOS#linux md/GOARCH#amd64 api/s3#1.71.0 m/E",
  "version_id": "",
  "vhost": "bucket.storage.mwsapis.ru"
}
Поля лога
ПараметрТипЗначение
bucketStringИмя бакета, к которому был выполнен запрос
bytes_receivedInt64Объем данных, полученных от клиента в запросе
bytes_sendInt64Объем данных, отправленных клиенту в ответе на запрос
handlerStringHTTP-метод, использованный в запросе (в формате REST.<метод>.<объект операции>)
http_refererStringИсточник запроса - например, URL, с которого был выполнен запрос
ipStringIP-адрес, с которого был выполнен запрос
methodStringHTTP-метод, использованный в запросе (в формате REST.<метод>.<объект операции>)
object_keyStringКлюч запрошенного объекта
protocolStringВерсия HTTP-протокола, использованная в запросе клиента
rangeStringДиапазон байтов, запрошенный клиентом (например, при частичной загрузке объекта)
requesterStringИдентификатор, который указывает, кто именно выполнил запрос. Это может быть сервисный аккаунт, пользователь или приложение
request_idStringУникальный идентификатор запроса
request_argsStringАргументы запроса
request_pathStringПолный путь запроса (включая ключ объекта и параметры строки запроса)
request_timeInt64Время выполнения запроса в миллисекундах
statusInt64Код ответа
storage_classStringКласс хранения запрошенного объекта (значение этого поля будет пустым)
schemeStringТип протокола HTTP (http или https)
ssl_protocolStringВерсия протокола обеспечения безопасности
timestampStringДата и время выполнения операции в формате ISO 8601
user_agentStringКлиентское приложение, выполнившее запрос
version_idStringИдентификатор запрошенной версии объекта
vhostStringВиртуальный хост, использованный в запросе. Как правило, это URL бакета
Методы и операции в запросах к бакету
МетодОбъект операцииОписание
PUTBUCKETСоздание бакета
GETBUCKET_LIST_V2Получение списка объектов в бакете
DELETEBUCKETУдаление бакета
GETBUCKET_VERSIONINGПолучение информации о статусе версионирования в бакете
PUTBUCKET_VERSIONINGВключение или приостановка версионирования в бакете
GETBUCKET_TAGGINGПолучение списка тегов бакета
PUTBUCKET_TAGGINGДобавление тегов бакета
DELETEBUCKET_TAGGINGУдаление тегов бакета
GETBUCKET_POLICYПросмотр текущей политики бакета
PUTBUCKET_POLICYДобавление политики бакета
DELETEBUCKET_POLICYУдаление политики бакета
PUTOBJECTЗагрузка объекта с помощью утилит командной строки, API, SDK
POSTOBJECTЗагрузка объекта через веб-консоль
GETOBJECTСкачивание объекта
DELETEOBJECTУдаление объекта
COPYOBJECTCоздание копии объекта
HEADOBJECTПолучение метаданных объекта
DELETEOBJECT_TAGGINGУдаление тегов объектов
GETOBJECT_TAGGINGПолучение тегов объекта
PUTOBJECT_TAGGINGНазначение тегов объекта
GETMULTIPARTПолучение списка текущих составных загрузок
POSTINIT_MULTIPARTИнициация составной загрузки: получение идентификатора для выполнения всех последующих операций
POSTCOMPLETE_MULTIPARTЗавершение составной загрузки
DELETEABORT_MULTIPARTОстановка составной загрузки
PUTUPLOAD_PARTЗагрузка части объекта при составной загрузке
GETUPLOAD_PARTПолучение списка загруженных во время составной загрузки частей объекта

Особенности и ограничения

  • Информация о запросах к объектам в бакете записывается в логи с задержкой до нескольких часов.
  • Полнота логирования не гарантируется. Не все операции отражаются в логах.
  • Если для бакета настроены правила жизненного цикла, все действия, выполняемые в рамках этих правил, не логируются. Например, если правила предписывают удалять объекты по истечении установленного срока, операция удаления не будет отражены в логах.
  • Для хранения логов можно использовать только бакеты, в которых выключена блокировка объектов. При попытке выбрать бакет с включенной блокировкой выводится сообщение об ошибке.
  • Настройки логирования после изменения вступают в силу не моментально, а через некоторое время (от нескольких минут до нескольких часов). Если вы изменили в настройках логирования целевой бакет, логи в течение некоторого времени будут сохраняться в старом целевом бакете.