问题描述
我正在尝试流式传输应用程序写入的日志文件。我以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
对其进行解析。我尝试使用具有以下内容的文件来执行此操作。部署后该文件不存在。如果我使用awsdocs建议的文件名,则文件已创建。
.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
在Beanstalk中如何使用.ebextensions和/或CloudWatch配置时,我缺少了什么?
我不仅要解决此问题,还要了解问题(何时/如何在何处创建/修改文件)。感谢您的帮助...
解决方法
由于@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
,
如您正确指出的,文件夹/opt/elasticbeanstalk/hooks/
不存在。原因是您可能使用的是基于 Amazon Linux 2 (AL2)的EB环境,而不是AL1。该文件夹仅在基于AL1的旧EB中可用。
在AL2上,有{strong> Application deployment platform hooks中所述的新钩子机制。
因此,您必须调整代码以使用新的挂钩,或切换回基于AL1的EB环境。