要将容器日志流式传输到AWS CloudWatch,可以使用AWS Elastic Beanstalk提供的配置选项。以下是一个示例解决方法,包含了一些必要的代码示例:
在Elastic Beanstalk环境的根目录下创建一个名为.ebextensions
的文件夹。
在.ebextensions
文件夹中创建一个名为cloudwatch.config
的文件,并将以下内容复制到文件中:
files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/cloudwatchlogs.sh":
mode: "000755"
owner: root
group: root
content: |
#!/bin/bash
exec 1>&2
# Replace "your-log-group-name" with the name of your CloudWatch log group
LOG_GROUP_NAME="your-log-group-name"
# Replace "/var/log/your-log-file-name.log" with the path to your log file
LOG_FILE_PATH="/var/log/your-log-file-name.log"
# Update the AWS region if necessary
AWS_REGION="us-west-2"
while true
do
aws logs put-log-events --log-group-name $LOG_GROUP_NAME --log-stream-name `date +%Y-%m-%d` --log-events file://<(tail -n 1 -f $LOG_FILE_PATH | awk '{print "{\"timestamp\": \""strftime(\"%Y-%m-%dT%H:%M:%S%z\")"\", \"message\": \""$0"\"}"}')
sleep 1
done
container_commands:
01_setup_cloudwatchlogs:
command: "mkdir -p /opt/aws/cloudwatch"
ignoreErrors: true
02_restart_awslogs:
command: "service awslogs restart"
替换your-log-group-name
为您的CloudWatch日志组的名称。
替换/var/log/your-log-file-name.log
为您要传输到CloudWatch的日志文件的路径。
如果您的AWS区域不是us-west-2
,请将AWS_REGION
替换为您的区域代码。
将修改后的cloudwatch.config
文件添加到您的代码库,并将其部署到Elastic Beanstalk环境。
这样,当您的Elastic Beanstalk环境启动时,它将自动将容器日志流式传输到指定的CloudWatch日志组中。
请注意,此示例假设您已经在环境中启用了AWS CloudWatch日志记录。如果没有启用,请在Elastic Beanstalk环境配置中进行设置。