从Docker容器记录日志到AWS Cloudwatch

11

我有几个在AWS EC2实例上通过docker-compose运行的Docker容器。 我希望将日志发送到AWS CloudWatch。 由于在我的Mac上运行Sierra时获取Docker容器的日志并发送到AWS CloudWatch存在问题,因此我已经转到运行Amazon AMI的EC2实例。

我的docker-compose文件:

version: '2'
services:
  scraper:
  build: ./Scraper/
  logging:
    driver: "awslogs"
    options:
       awslogs-region: "eu-west-1"
       awslogs-group: "permission-logs"
       awslogs-stream: "stream"
  volumes:
    - ./Scraper/spiders:/spiders

当我运行docker-compose up时,出现以下错误:

scraper_1 | 警告:'awslogs'日志驱动程序没有可用的日志

但是容器正在运行。 AWS CloudWatch流上不会出现任何日志。 我已将IAM角色分配给EC2容器,docker容器在其中运行。

我现在完全不知道该做什么,希望能得到任何建议。


你是在ECS集群上运行还是在普通的EC2上运行? - talentedmrjones
它正在普通的EC2上运行。 - user7692855
4个回答

9

0

我之前也遇到了同样的错误,但是当我检查了CloudWatch日志后,我能够在其中看到日志。你是否检查过在CloudWatch中是否创建了日志组?当我们使用自定义日志驱动程序时,Docker不支持控制台日志记录。

关于限制的部分这里说道,docker logs命令仅适用于json-file和journald驱动程序,并且这对于内置驱动程序是正确的。

当尝试从不支持读取的驱动程序获取日志时,对我来说没有任何卡顿,docker logs会打印出以下内容:

Error response from daemon: configured logging driver does not support reading

-3

这里涉及到3个主要步骤:

  1. 创建IAM角色/用户
  2. 安装CloudAgent
  3. 修改docker-compose文件或docker运行命令

我参考了一篇文章在这里, 介绍了将Docker日志发送到AWS CloudWatch的步骤。


-6

您正在使用的 AWS 日志驱动程序 awslogs 适用于 EC2 容器服务 (ECS)。它不适用于普通的 EC2。请参阅文档

我建议创建一个单节点 ECS 集群。确保该集群中的 EC2 实例具有角色,并且该角色提供了写入 Cloudwatch 日志的权限。

从那里开始,任何记录到 stdout 的容器内容都将被 awslogs 驱动程序捕获并流式传输到 Cloudwatch 日志。


https://docs.docker.com/engine/admin/logging/awslogs/#tag 上没有任何内容表明它只适用于ECS。事实上,“或者(如果您在Amazon EC2实例上运行Docker守护程序)使用Amazon EC2实例配置文件。”会让您相信它也可以在其他地方工作。 - user7692855
我不会依赖Docker文档来权威地了解AWS的工作原理。如果我没记错,那些有问题的日志驱动程序依赖于在EC2上运行的ECS客户端。在这方面,您可以可能安装客户端并查看是否有所帮助。 - talentedmrjones
2
我正在常规的EC2实例上使用它,不需要ECS。 - user2707671
2
这个答案应该被删除,它会让大多数遇到这个问题的人走上错误的道路。 - SEQOY Development Team

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接