AWS Elastic Beanstalk 上的 Docker 应用能实现集中式日志吗?

EB Docker 应用可以集中管理日志:开启 CloudWatch Logs 集成、或在容器内运行日志采集 Agent、或直接把日志发到第三方平台。本文介绍各方案。

最佳实践
AWS Elastic Beanstalk 上的 Docker 应用能实现集中式日志吗?封面

完全可以。主流方案有三种:一、开启 Elastic Beanstalk 的 CloudWatch Logs 集成(最简单,AWS 原生);二、在 Docker 容器内打包日志采集 Agent(如 Fluent Bit/DataKit)直发日志平台;三、应用直接把日志输出到外部日志服务。

方案一:CloudWatch Logs 集成(AWS 原生)

在 EB 控制台或 .ebextensions 中开启:

# .ebextensions/logging.config
option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    RetentionInDays: 14

开启后流式传输该平台已配置的日志文件,并非任意容器内文件都会自动采集;需核对平台分支、实例角色权限及应用日志路径,Compose 自定义日志还需配置相应挂载或采集。

方案二:容器内运行采集 Agent

可在支持 Docker Compose 的 EB Docker 平台中添加独立采集容器;这与旧 ECS 多容器平台或在应用 Dockerfile 内打包第二个进程不同:

# docker-compose.yml(EB 多容器环境)
services:
  app:
    image: myapp
  log-collector:
    image: fluent/fluent-bit
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro

该片段仅挂载目录,还需配置采集器输入、解析、检查点、输出和认证。路径假定 Docker 使用 json-file 驱动及默认数据目录,其他驱动或路径需调整。

方案三:应用直发

应用代码中直接把日志通过 HTTP/SDK 发送到日志平台,不依赖基础设施。缺点是和应用耦合。

采用采集器方案时,先确认 EB 实例上日志实际落盘的位置和轮转方式。观测云 DataKit 日志采集可读取指定文件;把应用、环境和实例标识保留在记录中,再测试一次新部署后的采集,确认实例替换不会遗漏配置。

常见问题(FAQ)

Q:EB 实例被替换后日志会丢吗?
A:只保存在被销毁实例上的日志可能丢失;已送达集中平台的副本按后端留存策略保留,但末尾尚未发送的缓冲日志仍可能丢失。

Q:CloudWatch Logs 费用高吗?
A:按采集量+存储量计费,日志量大时成本可观。可以只在生产环境开启,或缩短 RetentionInDays。

Q:eb logs 命令和集中日志什么关系?
A:默认获取尾部日志,也支持 --all/--zip;eb logs --cloudwatch-logs enable 可启用 CloudWatch 流式传输,--stream 可持续查看。长期存储仍取决于后端配置。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台