如何配置 docker 日志记录以有条件地发送到 CloudWatch?

DrT*_*eth 5 docker docker-compose

我在 docker-compose.yml 中有以下内容

  web:
    image: my_web
    build:
      context: ./
      dockerfile: web.docker
    container_name: my_web
    networks:
      - front
    ports:
      - "80:8080"
    volumes:
      - wwwlogs:/var/logs/www
    env_file:
      - ${SERVICE_ENVIRONMENT}.env
    links:
      - revproxy
    logging:
      driver: awslogs
      options:
        awslogs-group: my-web-group
        awslogs-region: us-east-1
        awslogs-stream-prefix: my-web
Run Code Online (Sandbox Code Playgroud)

这在生产中运行良好,并按预期将所有内容发送到 CloudWatch。但是,当我想在本地使用相同的 docker 文件(不要发送到 AWS,只需登录到 STDOUT/STDERR)和暂存(我想发送到不同的 awslogs 的地方)时,我不清楚这应该如何工作-组/-前缀)。

有什么想法吗?一般来说,我不喜欢为每个环境使用单独的 docker 文件 - 重复的代码条目增加了某些东西被遗漏或未正确维护的可能性。但是 Docker 似乎有条件地提供东西的能力有限。

Ric*_*ico 1

这是 docker 中的更多限制,您不能指定多个日志记录驱动程序。使用单个 docker-compose 文件发送到多个目的地会更加复杂,因为 docker 不支持它,但它是可行的。

例如,您可以使用Fluentd 日志记录驱动程序,并且必须为Fluentd启动单独的 sidecar 容器。然后在您的配置中,您可以根据环境创建路由规则。您可以使用fluidd CloudWatch 日志插件之类的工具将 dev 路由到“stdout”,并将 prod 路由到“awslogs” 。

这是关于如何使用 docker-compose 配置 Fluentd 的另一个示例。