Централизованное ведение журнала с помощью Django, Docker и CloudWatch
Давайте рассмотрим, как настроить контейнеризованное приложение Django, работающее на экземпляре EC2, для отправки журналов в Amazon CloudWatch.
Шаги:
- Создать роль IAM
- Прикрепить роль IAM к экземпляру EC2
- Создайте группу журналов CloudWatch
- Установите агент журналов CloudWatch на экземпляр EC2
- Настроить ведение журнала Django
- Обновить Docker Compose
Создать роль IAM
Начните с создания новой роли IAM и прикрепите политику CloudWatchAgentServerPolicy, которую демон Docker будет использовать для записи в CloudWatch.
В консоли IAM выберите "Роли" и нажмите "Создать роль". Выберите службу "EC2" в разделе "Общие варианты использования":
Нажмите кнопку далее.
На странице разрешений найдите политику "CloudWatchAgentServerPolicy" и установите флажок, чтобы прикрепить ее:
Нажмите далее несколько раз. На странице просмотра введите название роли, например, CloudWatchAgentRole
, а затем создайте роль.
Присвоить роль IAM
Чтобы назначить роль экземпляру EC2, перейдите на Панель управления EC2 и выберите экземпляр. Нажмите на раскрывающийся список "Действия", выберите "Настройки экземпляра" и нажмите "Прикрепить/заменить роль IAM":
Найдите и выберите роль IAM, которую вы только что создали, и нажмите "Применить".
Вы также можете назначить роль из командной строки следующим образом:
$ aws ec2 associate-iam-instance-profile \ --instance-id <YOUR_INSTANCE_ID> \ --iam-instance-profile Name=CloudWatchAgentRole
Создать группу журналов CloudWatch
Теперь, когда у демона Docker есть разрешение на запись в CloudWatch, давайте создадим группу журналов для записи. В консоли CloudWatch создайте новую группу журналов. Добавьте также новый поток журналов в эту недавно созданную группу.
Установите агент ведения журналов CloudWatch
Подключитесь по SSH к экземпляру EC2 и загрузите и установите CloudWatch Logs Agent непосредственно с S3.
Пример:
# download
$ curl https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
# install
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
Настройка ведения журнала Django
Поскольку контейнеры Docker отправляют логи в выходные потоки stdout и stderr, вам нужно настроить ведение журнала Django так, чтобы он записывал все в stderr с помощью StreamHandler.
Например:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler'
},
},
'loggers': {
'': {
'handlers': ['console'],
'level': 'DEBUG',
},
},
}
Обновить Docker Compose
Наконец, мы можем использовать awslogs от Docker драйвер ведения журнала в отдельных контейнерах.
Например:
version: "3.8"
services:
api:
build: ./project
command: gunicorn core.wsgi:application --bind 0.0.0.0:8000 --log-level=debug
logging:
driver: "awslogs"
options:
awslogs-region: "us-east-1"
awslogs-group: "your-log-group"
awslogs-stream: "your-log-stream"
Не используете compose? Предполагая, что вы уже создали изображение и пометили его тегами, разверните контейнер следующим образом:
$ docker run \
--log-driver="awslogs" \
--log-opt awslogs-region="use-east-1" \
--log-opt awslogs-group="your-log-group" \
--log-opt awslogs-stream="your-log-group" \
your-image-tag
Вернуться на верх