Логи из Docker в Google Cloud

Есть у меня pet-проджекты которые крутятся в докер-контейнерах на VPS. На хостовой системе обычно установлен необходимый минимум ПО для запуска контейнеров.

И вот хотелось еще прикрутить отправку логов в какой-нибудь удобный внешний сервис в котором их можно удобно хранить и анализировать, но при этом не хотелось ставить и конфигурировать дополнительный софт типа fluentd и т.д.

Короче мне было просто лень на самом деле 😃. А потом я случайно увидел что в докере из коробки есть драйвер для записи логов который называется gcplogs.

Google Cloud

Итак, какие условия предоставляет Google Cloud. Если верить вот этой странице то нам доступно сохранение первых 50 гигабайт логов в месяц на проект бесплатно и далее по 0.5$ за гигабайт. В аккаунте по-умолчанию можно создать до 25 проектов.

В конце месяца я на всякий случай проверю сколько это в итоге стоит)

Дашборд для просмотра логов в real-time выглядит вот так:

Logs explorer

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

Итак, решено. Прикручиваем 😉

Пример настройки

Тут все можно поделить на 3 шага

  1. Создание проекта, создание сервис-аккаунта, получение ключа доступа в GCP
  2. Добавление ключа в Docker
  3. Переключение настроек логирования в docker-compose.yml

1. Получаем ключ в Google Cloud

Допустим что вы успешно зарегистрировались в GCP и создали проект. Теперь в строке поиска пишем Service Accounts и попадаем на страницу настройки сервисных аккаунтов.

GCP IAM


Отлично!
Здесь мы создаем новый сервисный аккаунт.

GCP IAM Create service account


Придумываем идентификатор для нового сервисного аккаунта.
В моем случае это просто ‘test’.

GCP Service account name


Добавляем созданному аккаунту роль “Logs Writer”.

GCP Service account role


Добавляем себя в owner’ов сервисного аккаунта.

GCP IAM


Теперь в списке сервисных аккаунтов у нас появился наш только что созданный. Теперь идем в Manage keys и генерируем ключ доступа для этого аккаунта.

GCP IAM


Генерируем ключ в формате JSON.

GCP IAM


Сохраняем файл с ключом у себя на компьютере.

GCP IAM

2. Добавляем ключ в Docker

Теперь заливаем ключ на сервер. В качестве примера пусть будет путь /root/.gcp.json

Затем редактируем сервис в systemd

1
vim /lib/systemd/system/docker.service

И добавляем строчку Environment="GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp.json"

1
2
3
[Service]
Type=notify
Environment="GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp.json"

Перезапускаем Docker

1
systemctl daemon-reload
1
systemctl restart docker

3. Переключаем настройки в Docker-compose

Открываем docker-compose.yml и меняем настройки логирования

1
2
3
4
5
6
7
version: '3.7'
x-logging:
&default-logging
driver: gcplogs
options:
gcp-project: "test"
gcp-meta-name: "test_instance"

Затем рестартим docker-compose и идем смотреть наши логи в Google Cloud Log Explorer.

Готово =)