[Документация Yandex Cloud](../../index.md) > [Yandex Object Storage](../index.md) > [Концепции](index.md) > Механизм логирования действий с бакетом

# Механизм логирования действий с бакетом

{% note warning %}

Функциональность доступна только в [регионе Россия](../../overview/concepts/region.md).

{% endnote %}

В Object Storage есть _механизм логирования_ всех действий с [бакетом](bucket.md). Вы можете записывать логи, например, для проведения внутреннего аудита безопасности или для уточнения информации по операциям с бакетом.

{% note info %}

Действия, которые выполняются с объектами в рамках [жизненного цикла](lifecycles.md), не логируются.

{% endnote %}

По умолчанию механизм логирования отключен. После его включения, Object Storage будет записывать информацию о действиях с бакетом в виде [объекта](object.md) раз в час.

Чтобы записывать логи, необходимо:
* определить _исходный_ бакет, действия с которым необходимо логировать;
* создать _целевой_ бакет, куда будут записываться логи;
* [включить механизм логирования](../operations/buckets/enable-logging.md#enable) с помощью [консоли управления](https://kz.console.yandex.cloud), [AWS CLI](../tools/aws-cli.md), [Terraform](../../tutorials/infrastructure-management/terraform-quickstart.md) или API;
* (опционально) выбрать префикс [ключа](object.md#key) объекта.

## Требования {#requirements}

* Исходный и целевой бакеты должны различаться.

* Исходный и целевой бакеты должны находиться в одном [облаке](../../resource-manager/concepts/resources-hierarchy.md#cloud).


* На целевом бакете не должно быть включено [шифрование](../operations/buckets/encrypt.md).


{% note info %}

Чтобы записывать логи в целевой бакет, для которого настроена [политика доступа](policy.md), [добавьте](../operations/buckets/policy.md#apply-policy) в нее правило, разрешающее всем учетным записям выполнять действие `PutObject`, а в качестве ресурса укажите имя бакета с [префиксом ключа](server-logs.md#key-prefix) для объектов с логами, например `<имя_бакета>/logs/*`.

{% endnote %}

## Формат ключа объекта с логами {#key-format}

Object Storage использует следующий формат ключа объекта с логами:

```text
<префикс>/ГГГГ-ММ-ДД-ЧЧ-ММ-СС-<идентификатор>
```

Где:

* `<префикс>` — [префикс ключа](#key-prefix) объекта с логами. Вы можете самостоятельно указать префикс при включении механизма логирования.
* `ГГГГ-ММ-ДД-ЧЧ-ММ-СС` — дата и время сохранения объекта с логами в целевом бакете, в формате UTC.
* `<идентификатор>` — уникальный идентификатор записи, который предотвращает перезапись объекта.

### Префикс ключа {#key-prefix}

Префикс ключа позволяет различать:
* Данные из разных бакетов, если логи для нескольких исходных бакетов сохраняются в один целевой.
* Действия по логированию от остальных действий с бакетом, если логи сохраняются в исходном бакете. Так как в этом случае сама операция логирования тоже будет учтена как действие с бакетом.
* Объекты с логами и другие объекты, чтобы периодически удалять логи. Вы можете настроить [жизненный цикл](lifecycles.md) целевого бакета так, чтобы объекты с определенным префиксом ключа удалялись автоматически.

## Формат объекта с логами {#object-format}

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

Полный список сохраняемых параметров представлен в [справочнике логов](../logs-ref.md).

Пример записи в файле с логами:

```json
{
  "bucket": "my-bucket-example",
  "bytes_received": 749,
  "bytes_send": 1251,
  "handler": "REST.GET.OBJECT",
  "http_referer": "https://example.com/page",
  "ip": "84.201.121.46",
  "method": "GET",
  "object_key": "path/logs/2020-11-10-14-42-11-123f57b5-1853-4120-8d7a-5bcc1e9e9b4f",
  "protocol": "HTTP/1.1",
  "range": "-",
  "requester": "-",
  "request_args": "X-Amz-Algorithm=AWS4-HMAC-SHA256\u0026X-Amz-Date=20201030T072100Z\u0026X-Amz-SignedHeaders=host\u0026X-Amz-Expires=43200\u0026X-Amz-Credential=ZGB4EY1...\u0026X-Amz-Signature=12f350...",
  "request_id": "1235efda********",
  "request_path": "/my-bucket-example/path/logs/2020-11-10-14-42-11-123f57b5-1853-4120-8d7a-5bcc1e9e9b4f?X-Amz-...",
  "request_time":88,
  "scheme": "https",
  "ssl_protocol": "TLSv1.2",
  "status": 200,
  "storage_class": "STANDARD",
  "timestamp": "2020-11-10T13:21:18Z",
  "user_agent": "docker/19.03.9 go/go1.13.10 git-commit/1d238398e7 kernel/4.4.0-142-generic os/linux arch/amd64 UpstreamClient(Go-http-client/1.1)",
  "version_id": "",
  "vhost": "storage.yandexcloud.kz"
}
```

## Особенности механизма логирования {#features}

У механизма логирования действий с бакетом в Object Storage есть несколько особенностей.

### Негарантированная доставка логов {#best-effort}

Большинство запросов к бакету, который был корректно настроен для логирования, сохраняются в файле с логами. Большинство записей сохраняются в течение нескольких часов после фактической обработки запроса.

Однако Object Storage не гарантирует полноту и своевременность записи логов. Запись о действии с бакетом может быть сохранена в файле с логами спустя несколько часов. В некоторых случаях запись в файле может не появиться.

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

### Отсутствие логирования действий жизненного цикла {#lifecycle}

В бакетах с настроенными правилами [жизненного цикла](lifecycles.md) действия, которые выполняются с объектами в рамках жизненного цикла, не логируются.

### Длительное включение механизма {#long-engagement}

Включение механизма логирования и изменение настроек занимает около часа. Первый объект с логами сохранится в бакет через пару часов после включения механизма, но иногда поставка логов может занимать больше времени.

При изменении целевого бакета некоторые логи будут доставляться в предыдущий целевой бакет, другие — в новый.

Все изменения настроек вступят в силу без дополнительных действий со стороны пользователя.


## Тарификация {#billing}

Для механизма логирования действуют стандартные [правила тарификации](../pricing.md) Object Storage.

## Примеры использования {#examples}

* [Анализ логов Object Storage при помощи DataLens](../tutorials/storage-logs-analysis.md)