在Amazon Linux 2023版Elastic Beanstalk中配置CloudWatch Agent转发自定义日志
在Amazon Linux 2023 Elastic Beanstalk中配置新版CloudWatch Agent转发自定义日志
由于Elastic Beanstalk默认脚本会在启动CloudWatch Agent前覆盖/opt/amazon/amazon-cloudwatch-agent/etc/beanstalk.json,推荐通过平台钩子或扩展配置实现自定义日志转发,以下是具体方案:
方案一:使用平台钩子(推荐)
平台钩子可精准控制执行时机,确保在EB生成默认配置后、Agent启动前修改配置文件。
在项目根目录创建钩子目录:
mkdir -p .platform/hooks/deploy在该目录下创建可执行脚本(命名前缀数字控制执行顺序,确保在EB默认脚本后运行):
.platform/hooks/deploy/99_custom_cloudwatch_config.sh,内容如下:#!/bin/bash # 安装jq(用于合并配置,若实例已预装可跳过) yum install -y jq # 定义自定义日志配置条目 CUSTOM_LOG='{ "file_path": "/var/log/your-custom-log.log", "log_group_name": "/aws/elasticbeanstalk/your-env-name/your-custom-log", "log_stream_name": "{instance_id}", "retention_in_days": 7 }' # 将自定义日志条目合并到默认配置的collect_list中 jq --argjson custom "$CUSTOM_LOG" '.logs.logs_collected.files.collect_list += [$custom]' /opt/amazon/amazon-cloudwatch-agent/etc/beanstalk.json > /tmp/beanstalk.json # 替换原配置文件 mv /tmp/beanstalk.json /opt/amazon/amazon-cloudwatch-agent/etc/beanstalk.json # 重启CloudWatch Agent使配置生效 systemctl restart amazon-cloudwatch-agent给脚本添加执行权限:
chmod +x .platform/hooks/deploy/99_custom_cloudwatch_config.sh
方案二:使用.ebextensions扩展配置
通过扩展配置直接替换或修改beanstalk.json,需注意执行顺序确保覆盖默认配置。
在项目根目录创建.ebextensions/cloudwatch-agent.config文件,内容如下:
files: "/opt/amazon/amazon-cloudwatch-agent/etc/beanstalk.json": content: | { "logs": { "logs_collected": { "files": { "collect_list": [ # 保留EB默认日志配置(可选) { "file_path": "/var/log/httpd/access_log", "log_group_name": "/aws/elasticbeanstalk/your-env-name/var/log/httpd/access_log", "log_stream_name": "{instance_id}" }, # 添加自定义日志配置 { "file_path": "/var/log/your-custom-log.log", "log_group_name": "/aws/elasticbeanstalk/your-env-name/your-custom-log", "log_stream_name": "{instance_id}", "retention_in_days": 7 } ] } } } } mode: "000644" owner: root group: root container_commands: 01_restart_cloudwatch_agent: command: systemctl restart amazon-cloudwatch-agent
注意事项
- 替换配置中的
your-env-name和your-custom-log.log为实际环境名和日志文件路径; - 确保Elastic Beanstalk实例IAM角色拥有CloudWatch日志相关权限(如
logs:CreateLogGroup、logs:PutLogEvents等); - 若完全替换配置文件,需保留必要的默认日志条目,避免丢失EB自带日志的转发能力。
内容的提问来源于stack exchange,提问作者Ben Zuill-Smith
相关产品推荐
相关产品推荐

