已部署CloudWatch Agent,如何通过EC2 Session Manager同步Spring Boot日志至CloudWatch?
问题排查与解决方案
一、现有操作的潜在问题
- 未在
awslogs.conf中配置Spring Boot日志监听:默认的awslogs.conf仅包含EC2系统日志(如/var/log/messages、/var/log/secure),不会自动识别Spring Boot应用日志,必须手动添加对应日志文件的采集配置段。 - 日志文件权限不足:
awslogs服务通常以root或awslogs用户身份运行,如果Spring Boot日志文件的所有者/权限设置限制了该用户的读取权限(比如日志文件归ec2-user所有且权限为600),会导致服务无法读取日志内容。 - 多日志采集工具冲突(可选):你同时安装了CloudWatch Agent和旧版
awslogs服务,两者可能存在资源竞争或配置优先级问题,建议统一使用CloudWatch Agent(新版更灵活的日志采集工具)来管理所有日志采集任务。
二、Spring Boot应用的额外配置(无需Access Key/Secret)
不需要额外配置密钥信息(依赖EC2绑定的IAM角色即可),但需确保日志稳定输出到固定路径的文件:
- 检查Spring Boot的日志框架配置(Logback/Log4j2等),添加文件输出Appender,指定明确的日志文件路径。例如在
logback.xml中配置:<appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/var/log/my-spring-boot-app/app.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="FILE"/> </root> - 提前创建日志文件所在目录并设置合适权限,确保应用有权限写入(比如执行
sudo mkdir -p /var/log/my-spring-boot-app && sudo chown ec2-user:ec2-user /var/log/my-spring-boot-app)。
三、修复步骤示例
- 编辑
awslogs.conf,添加Spring Boot日志采集配置:[my-spring-boot-app-log] file = /var/log/my-spring-boot-app/app.log log_group_name = /aws/ec2/my-spring-boot-app/logs log_stream_name = {instance_id}/app.log datetime_format = %Y-%m-%d %H:%M:%S - 调整日志文件权限,确保
awslogs用户可读取:sudo chmod o+r /var/log/my-spring-boot-app/app.log sudo chown ec2-user:awslogs /var/log/my-spring-boot-app/app.log - 重启
awslogs服务使配置生效:sudo service awslogs restart - (可选)若改用CloudWatch Agent,编辑
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json添加日志采集配置后,重启服务:sudo systemctl restart amazon-cloudwatch-agent
内容的提问来源于stack exchange,提问作者Usha Podduturi
相关产品推荐
相关产品推荐

