如何从Amazon Linux 2023实例将自定义日志流式传输到CloudWatch
解决方案:AL2023 Elastic Beanstalk 自定义日志流式传输适配
核心差异说明
Amazon Linux 2023(AL2023)环境中,Elastic Beanstalk不再使用awslogs服务,而是采用Amazon CloudWatch Agent负责日志采集与流式传输,这是原AL2配置失效的根本原因。
步骤1:创建适配AL2023的CloudWatch Agent配置文件
在项目根目录的.ebextensions文件夹中新建配置文件(例如01-cloudwatch-custom-logs.config),内容如下:
files: # 生成CloudWatch Agent的核心配置文件 "/etc/amazon/cloudwatch-agent/config.json": mode: "000644" owner: root group: root content: | { "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ # 替换为你的自定义日志路径与日志组配置 { "file_path": "/var/www/html/app.log", "log_group_name": "/aws/elasticbeanstalk/[你的环境名称]/app-log", "log_stream_name": "{instance_id}", "timestamp_format": "%Y-%m-%d %H:%M:%S" }, { "file_path": "/var/log/your-custom-service.log", "log_group_name": "/aws/elasticbeanstalk/[你的环境名称]/service-log", "log_stream_name": "{instance_id}" } ] } } } } commands: # 重启CloudWatch Agent加载新配置 01_restart_cloudwatch_agent: command: systemctl restart amazon-cloudwatch-agent ignoreErrors: true # 确保CloudWatch Agent开机自启 02_enable_cloudwatch_agent: command: systemctl enable amazon-cloudwatch-agent ignoreErrors: true
配置细节说明:
file_path:填写自定义日志文件的绝对路径,避免使用相对路径log_group_name:建议沿用/aws/elasticbeanstalk/[环境名]/[日志标识]的规范,和默认日志组格式保持一致log_stream_name:{instance_id}会自动替换为EC2实例ID,方便区分不同实例的日志流timestamp_format:根据你的日志时间格式填写,若日志无标准时间戳可省略该字段
步骤2:验证IAM权限(可选)
原有的IAM策略已包含CloudWatch日志所需的全部权限(logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents、logs:DescribeLogStreams),无需额外修改。若之前未配置,确保EC2实例角色已附加该策略。
步骤3:部署并验证
- 将配置文件提交到代码仓库,部署到Elastic Beanstalk环境
- 登录EC2实例,执行
systemctl status amazon-cloudwatch-agent确认服务正常运行 - 进入CloudWatch控制台,检查对应日志组是否已创建并开始接收日志
常见排查点
- 日志文件权限:确保CloudWatch Agent(默认以root运行)有读取权限,可执行
chmod 644 /path/to/your/log.log调整 - Agent日志排查:执行
tail -f /var/log/amazon/cloudwatch-agent.log查看采集过程中的报错信息 - 路径正确性:反复确认自定义日志文件的绝对路径是否填写错误
内容的提问来源于stack exchange,提问作者Pau Seglar
相关产品推荐
相关产品推荐

