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

时间:2018-10-22 19:44:14

标签: 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

这在生产中工作正常,并按预期将所有内容发送到CloudWatch。但是我不清楚当我想在本地使用相同的docker文件(不发送到AWS,仅登录到STDOUT / STDERR)以及暂存时(我想发送到不同的AWS日志),这应该如何工作-group /-前缀)。

有什么想法吗?通常,我不喜欢为每个环境使用单独的docker文件-重复输入代码会增加某些东西会丢失或维护不正确的可能性。但是Docker似乎有条件供应事物的能力有限。

1 个答案:

答案 0 :(得分:1)

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

例如,您可以使用Fluentd logging driver,并且必须为Fluentd启动一个单独的sidecar容器。然后,在您的配置上,您可以根据环境创建一个routing rule。您可以使用fluentd CloudWatch logs plugin之类的东西说dev路由到“ stdout”,而prod路由到“ awslogs”。

This is另一个有关如何使用docker-compose配置Fluentd的示例。