#amazon-web-services #amazon-elastic-beanstalk
#amazon-веб-сервисы #amazon-elastic-beanstalk
Вопрос:
Я пытаюсь передать в потоковом режиме файл журнала, который записывает мое приложение. Я использовал https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config в качестве отправной точки. К сожалению, кажется, что /etc/awslogs
это больше не правильный путь для добавления дополнительной конфигурации CloudWatch.
Я обнаружил, что могу поместить файл в /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json
, чтобы заставить его работать. Но я не могу создать этот файл и заставить CloudWatch проанализировать его с помощью .ebextensions
. Я пытался сделать это, используя файл со следующим содержимым. Файл не существует после развертывания. Если бы я использовал имя файла, предложенное awsdoc, файл был бы создан.
.ebextensions/02-logs-streamtocloudwatch.config
:
files:
"/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json" :
mode: "000644"
owner: root
group: root
content: |
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
"log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}
Кроме того, на данный момент у моего файла журнала должны быть 666
разрешения (я знаю, что это не идея). Создание файла в, /opt/elasticbeanstalk/hooks/appdeploy/post/99_permissions.sh
содержащего следующее содержимое, с помощью .ebextensions
, похоже, тоже не работает.
.ebextensions/04-permissions.config
:
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/99_dbg_permissions.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
chmod 666 /var/log/eb-docker/containers/eb-current-app/dbg.log
Чего мне не хватает в том, как использовать .ebextensions и / или конфигурацию CloudWatch в Beanstalk?
Я хотел бы не только исправить это, но и понять проблему (где я могу создавать / изменять файлы, когда / как). Я ценю любую помощь…
Комментарии:
1. «. Но я не могу создать этот файл и заставить CloudWatch проанализировать его с помощью .ebextensions». почему? Как вы пытались это сделать? Какие ошибки вы получаете?
2. @Marcin: Я добавил файлы, которые использовал в своем посте. Большая часть моей проблемы заключается в том, что я не понимаю, почему мне кажется, что я могу создавать файлы и изменять разрешения в некоторых местах, но не везде. Я предполагаю, что я столкнулся с какой-то проблемой синхронизации (используя неправильный хук), может быть ..?
Ответ №1:
Благодаря ответу @Marcin я смог добавить свой файл журнала в конфигурацию потоковой передачи журналов:
.platform/hooks/postdeploy/02-logs-streamtocloudwatch.sh
#!/bin/bash
echo '{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/var/log/eb-docker/containers/eb-current-app/my.log",
"log_group_name": "/aws/elasticbeanstalk/my-env/var/log/eb-docker/containers/eb-current-app/my.log",
"log_stream_name": "{instance_id}"
}
]
}
}
}
}' > "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/my.json"
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a stop
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a start
Ответ №2:
Как вы правильно отметили, папка /opt/elasticbeanstalk/hooks/
не существует. Причина в том, что вы, вероятно, используете EB-среду на основе Amazon Linux 2 (AL2) вместо AL1. Папка была доступна только в старой EBs на основе AL1.
В AL2 появился новый механизм перехватов, описанный в разделе перехваты на платформе развертывания приложений.
Поэтому вам необходимо адаптировать свой код для использования новых перехватов или вернуться к среде EB на основе AL1.