![](https://habrastorage.org/getpro/habr/upload_files/458/82d/33f/45882d33f4f133d249a270cbc4b475e8.png)
Cloud Logging —отличный сервис для просмотра логов. Но у него есть ограничение —время хранения. Сейчас сервис находится в стадии превью, поэтому логи хранятся три дня. После выхода в General Availability это время, скорее всего, увеличится, но ненамного. И это будет небесплатно.
Но что делать, если вам хочется посмотреть историческую информацию или необходимо (например, по юридическим или регуляторным причинам) хранить логи дольше года. А еще бы делать это максимально просто и дешево.
Решение есть! А самое прекрасное, что вам почти не понадобится ничего дополнительно делать, если вы уже настроили поставку логов через Fluentbit, как я рассказывал в двух предыдущих постах про поставку логов из контейнера и systemd.
Чтобы проще всего настроить долгосрочное хранение логов, необходимо поставлять их через Yandex Data Streams при помощи протокола AWS Kinesis Data Streams, а затем складывать их в Yandex Object Storage, используя Yandex Data Transfer.
Теперь давайте разберем этот способ подробнее по шагам.
Шаг 0. Логи
В этот раз я не буду подробно останавливаться на генерации логов. Если вам необходим пример, обратитесь к одному из вышеупомянутых туториалов.
Я буду считать, что необходимый Input для сбора логов у вас уже настроен.
Шаг 1. Настройка секретов
В этот раз нам даже не понадобится плагин. Для поставки воспользуемся одним из стандартных Output’ов Fluentbit — Amazon Kinesis Data Streams.
К сожалению, в отличие от плагина от Yandex мы не сможем воспользоваться авторизацией при помощи IAM-токена, который можно получить привязав сервисный аккаунт к ВМ. Нам придется каким-то образом доставить на ВМ статические ключи авторизации в формате AWS (access и secret key). Например, как я предлагал в туториале про доставку секретов зашифрованных KMS.
Важно: убедитесь заранее, что сервисный аккаунт, от имени которого выписаны ключи, имеет необходимые права на запись в YDS — минимум yds.writer. YDS кэширует ACL, поэтому, если вы сделаете первую неудачную запись и затем назначите права, применение новых ролей для этого сервиса может затянуться.
systemd
Если вы запустили Fluentbit как systemd unit, то вам нужно отредактировать файл с настройками unit’а, добавив в секцию Service строки с переменными окружения:
[Service]
Environment=AWS_CONFIG_FILE=...
Environment=AWS_SHARED_CREDENTIALS_FILE=...
Переменные AWS_CONFIG_FILE и AWS_SHARED_CREDENTIALS_FILE должны содержать пути до файлов .aws/config и .aws/credentials соответственно.
Пример содержимого этих файлов:
.aws/credentials
[default]
aws_access_key_id = 5Yd7F94k-BMWIPWIMpj4
aws_secret_access_key = eRSQ7f0o8Itn1vZXY-Xcu1Zt_UHLNv4vhI6fROPp
.aws/config
[default]
region = ru-central1
Контейнер
Вам нужно замаунтить файл с секретами внутрь контейнера. Добавьте маппинг путей в секцию volumes в docker-compose.yml. Укажите путь до него в переменной окружения, тоже в docker-compose.yml, но в секции environment.
Шаг 2. Конфигурация Fluentbit и YDS
Нужно создать стрим, в который мы будем поставлять логи. В туториале я создам минимально возможный стрим. Для продакшена вам стоит оценить поток ваших логов и конфигурировать стрим, исходя из ваших параметров.
Если у вас еще нет базы YDB, то при создании потока нужно будет сделать ее. Если же у вас есть базы, вы можете выбрать одну из существующих.
![Создаем новую базу YDB Создаем новую базу YDB](https://habrastorage.org/getpro/habr/upload_files/6dc/b08/287/6dcb08287307be9188c81d51e1afafcf.png)
![Минимальный YDS бесплатен Минимальный YDS бесплатен](https://habrastorage.org/getpro/habr/upload_files/534/a2b/c6c/534a2bc6c190843d4e4d4ea8f8a5ce5c.png)
Теперь нужно добавить в конфиги Fluentbit еще одну секцию [OUTPUT] и в ней описать настройки Amazon Kinesis Data Streams плагина.
![](https://habrastorage.org/getpro/habr/upload_files/621/932/286/6219322866f356a22ff70897be1264cd.png)
Значение stream нужно собрать из двух частей, обозначенных на скриншоте выше.
[OUTPUT]
Name kinesis_streams
Match *
region ru-central-1
stream /ru-central1/b1glihojf6il6g7lvk98/etnbsg3d51gq7ooo2l6m/s3-logs
workers 1
endpoint https://yds.serverless.yandexcloud.net
Шаг 3. Data Transfer
Теперь можно перейти на вкладку Трансферы и приступить к созданию Data Transfer.
![](https://habrastorage.org/getpro/habr/upload_files/a5c/890/4ee/a5c8904ee27afde20b8155acbbee1a94.png)
Создайте два эндпоинта: источник и приемник.
Источник будет типа Yandex Data Stream. В него мы подключим только что созданный стрим.
![Источник Источник](https://habrastorage.org/getpro/habr/upload_files/044/e02/ed1/044e02ed1b5fd6a83fd09d4787e44415.png)
Если вы к тому моменту уже запустили поставку логов, нажмите на кнопку Предварительный просмотр. Так вы сможете убедиться, что всё настроено корректно. Откроется попап с примерами записей из источника. У меня это выглядело так.
![](https://habrastorage.org/getpro/habr/upload_files/d0c/016/1ab/d0c0161ab30e5cdcada4a4d5d0bb626f.png)
Далее перейдем к созданию приемника. Выберем для него тип Object Storage. Нужно заполнить бакет для поставки. Остальные поля можно оставить со значениями по умолчанию. Подробнее про эти настройки можно узнать в документации.
![](https://habrastorage.org/getpro/habr/upload_files/04c/f28/f5a/04cf28f5a6e95e42a4e838d75a38c5ca.png)
Теперь можно создать трансфер, указав свежесозданные эндпоинты в соответствующих полях формы.
![](https://habrastorage.org/getpro/habr/upload_files/f9a/b2d/062/f9ab2d062c41298a0e1bc5f96f237cfd.png)
Остается лишь активировать наш трансфер, чтобы он начал переносить данные.
![](https://habrastorage.org/getpro/habr/upload_files/6ed/d79/ced/6edd79ceddcaebf1e027709c9d484e17.png)
Готово. Можно убедиться, что в Object Storage появились логи в формате JSON.
![](https://habrastorage.org/getpro/habr/upload_files/8cf/084/c85/8cf084c85d35cc1796f14f35570d46a8.png)
Таким образом можно настроить приемники других типов, например ClickHouse. Там вы сможете делать аналитические запросы к данным из ваших логов.
P. S. Yandex Data Streams — это serverless-сервис в Yandex.Cloud. Если вам интересна экосистема Serverless-сервисов и все, что с этим связано, заходите в сообщество в Telegram, где можно обсудить serverless в целом.