Amazon Linux 2环境下Elastic Beanstalk无法向CloudWatch传输自定义日志
自定义日志无法推送至CloudWatch的排查方案
问题概述
已创建CloudWatch Agent配置文件/opt/aws/amazon-cloudwatch-agent/etc/shoryuken.json并执行追加配置命令,配置验证成功,Agent已启停,但CloudWatch未接收到/var/app/current/log/shoryuken.log的日志内容。
配置文件内容:
{ "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/app/current/log/shoryuken.log", "log_group_name": "/aws/elasticbeanstalk/Demo-env/var/app/current/log/shoryuken.log", "log_stream_name": "{instance_id}" } ] } } } }
执行的追加命令:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/shoryuken.json -s
命令输出显示配置验证成功,但日志推送问题未解决。
排查步骤
1. 检查日志文件的可读性与权限
CloudWatch Agent运行用户(通常为cwagent或root)必须具备读取目标日志文件的权限:
- 查看文件权限:
ls -l /var/app/current/log/shoryuken.log - 模拟Agent用户读取文件:
如果报错sudo -u cwagent cat /var/app/current/log/shoryuken.logPermission denied,需调整文件或目录权限(如执行chmod o+r /var/app/current/log/shoryuken.log,或修改文件所属组)。
2. 查看CloudWatch Agent自身日志
Agent日志会记录推送过程中的错误,路径通常为:
/var/log/amazon/cloudwatch-agent/amazon-cloudwatch-agent.log
搜索关键信息定位问题:
grep -E "shoryuken|error|denied" /var/log/amazon/cloudwatch-agent/amazon-cloudwatch-agent.log
3. 确认日志组与Region匹配
- 登录CloudWatch控制台,检查日志组
/aws/elasticbeanstalk/Demo-env/var/app/current/log/shoryuken.log是否存在于EC2实例所在的Region。 - 核对Agent检测到的Region是否与控制台一致(从命令输出可知Agent已从EC2获取Region,需确认控制台未选错Region)。
4. 验证日志文件是否有新内容
如果目标日志文件长时间无更新,Agent可能不会触发推送:
- 手动写入测试日志:
echo "CloudWatch test log entry: $(date)" >> /var/app/current/log/shoryuken.log - 等待3-5分钟后,查看CloudWatch日志组是否出现该测试条目。
5. 检查EC2实例的IAM权限
EC2实例的IAM角色必须具备CloudWatch日志推送的权限,需包含以下至少一项:
- 内置权限
CloudWatchLogsFullAccess - 精细权限:
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents - 登录IAM控制台,检查实例关联角色的权限策略是否配置正确。
6. 确认CloudWatch Agent运行状态
- 查看Agent当前状态:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status - 如果状态异常,强制重启Agent:
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start
内容的提问来源于stack exchange,提问作者pritam
相关产品推荐
相关产品推荐

