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

开启后每个实例的容器日志自动流式传输到 CloudWatch Logs,在 CloudWatch 控制台统一查看。

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

在 Dockerfile 或 docker-compose(EB 多容器 Docker 平台)中加日志采集 sidecar:

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

Fluent Bit/DataKit 等采集器读取容器日志并发送到日志平台。

方案三:应用直发

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

观测云对照

观测云 DataKit 支持部署为 EB Docker 环境的 sidecar 容器或直接安装在 EC2 实例上,采集容器日志和指标上报观测云;与 CloudWatch 相比,观测云提供更灵活的日志检索、Pipeline 清洗和告警配置。

常见问题(FAQ)

Q:EB 实例被替换后日志会丢吗?
A:会。EB 自动扩缩容时实例是临时的,这正是必须集中式日志的原因——实例销毁前把日志送走。

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

Q:eb logs 命令和集中日志什么关系?
A:eb logs 只是临时拉取各实例的日志快照查看,不是集中存储。真正的集中化需要上述方案之一。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台