将 Amazon ECS 日志发送到 CloudWatch - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 Amazon ECS 日志发送到 CloudWatch

您可在任务中配置容器以将日志信息发送到 CloudWatch Logs。如果您对任务使用 Fargate 启动类型,则可以查看容器中的日志。如果您使用 EC2 启动类型,则可以在一个方便的位置查看容器中的不同日志,并防止您的容器日志占用您容器实例上的磁盘空间。

注意

任务中的容器所记录的信息类型主要取决于其 ENTRYPOINT 命令。默认情况下,捕获的日志显示命令输出是您在本地运行容器时在交互式终端上通常看到的内容,即 STDOUTSTDERR I/O 流。awslogs日志驱动程序只是将 Docker 中的这些日志传递到 CloudWatch Logs。有关如何处理 Docker 日志的更多信息,包括捕获不同文件数据或流的替代方法,请参阅 Docker 文档中的查看容器或服务的日志

要将系统日志从 Amazon ECS 容器实例发送到 CloudWatch Logs,请参阅《Amazon CloudWatch Logs 用户指南》中的监控日志文件CloudWatch Logs 配额

Fargate 启动类型

如果您对任务使用 Fargate 启动类型,您需要将所需的 logConfiguration 参数添加到您的任务定义才能打开 awslogs 日志驱动程序。有关更多信息,请参阅 Amazon ECS 任务定义示例:将日志路由到 CloudWatch

对于 Fargate 上的 Windows 容器,当您的任何任务定义参数包含特殊字符(例如 & \ < > ^ |)时,请执行以下选项之一:

  • 在整个参数字符串周围添加一个带有双引号的 escape(\)字符

    示例

    "awslogs-multiline-pattern": "\"^[|DEBUG|INFO|WARNING|ERROR\"",
  • 在每个特殊字符周围添加一个 escape(^)字符

    示例

    "awslogs-multiline-pattern": "^^[^|DEBUG^|INFO^|WARNING^|ERROR",

EC2 启动类型

如果您对任务使用 EC2 启动类型,并且想要打开 awslogs 日志驱动程序,您的 Amazon ECS 容器实例至少需要容器代理的 1.9.0 版本。有关如何检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

注意

您必须使用经 Amazon ECS 优化的 AMI 或至少包含 ecs-init 软件包版本 1.9.0-1 的自定义 AMI。使用自定义 AMI 时,如果在 docker run 语句或环境变量文件中使用以下环境变量启动代理,您必须指定 awslogs 日志驱动程序在 Amazon EC2 实例上可用。

ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"]

Amazon ECS 容器实例还需要针对您用于启动容器实例的 IAM 角色的 logs:CreateLogStreamlogs:PutLogEvents 权限。如果在 Amazon ECS 中启用 awslogs 日志驱动程序支持之前创建了 Amazon ECS 容器实例,可能需要添加此权限。ecsTaskExecutionRole 在将其分配给任务时使用,并且可能包含正确的权限。有关任务执行角色的信息,请参阅Amazon ECS 任务执行 IAM 角色。如果您的容器实例使用容器实例的托管 IAM policy,您的容器实例可能具有正确的权限。有关容器实例的托管 IAM 策略的信息,请参阅Amazon ECS 容器实例 IAM 角色