为什么我的 Amazon ECS 容器日志没有传送到 Amazon CloudWatch Logs?

2 分钟阅读
0

我在 Amazon CloudWatch Logs 中找不到我的 Amazon Elastic Container Service (Amazon ECS) 任务的容器日志。

简短描述

由于以下一个或多个原因,您的 Amazon ECS 容器日志不会传输到 CloudWatch Logs:

  • 您的 Amazon ECS 任务定义中未正确配置 awslogs 日志驱动程序。
  • AWS Identity and Access Management (IAM) 角色没有所需的权限。
  • 您的联网配置存在问题。
  • 容器的日志级别配置不正确。

解决方法

未正确配置 awslogs 日志驱动程序

  • 要将容器日志信息发送到 CloudWatch Logs,您必须在任务中正确配置容器。在为容器定义参数时,一定要正确配置 logConfiguration 参数。如果您的 Amazon ECS 任务定义涉及多个容器,则必须为每个容器配置此参数。
  • 确保您已将 awslogs 日志驱动程序添加至任务定义中的 logConfiguration 参数。
  • 对于 Amazon Elastic Compute Cloud (Amazon EC2) 启动类型,请执行以下额外检查:
  • 请确保您的 Amazon ECS 容器实例至少包含版本为 1.9.0 的容器代理。有关检查代理版本和更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理
  • 如果您没有为容器实例使用 Amazon ECS 优化的 AMI,请确保在使用以下环境变量启动代理时在容器实例上指定了 awslogs 日志驱动程序。有关更多信息,请参阅安装 Amazon ECS 容器代理
ECS_AVAILABLE_LOGGING_DRIVERS='["json-file","awslogs"]'

IAM 角色没有所需的权限

  • 确保 Amazon ECS 容器实例的 IAM 角色具有 logs:CreateLogStreamlogs:PutLogEvents 权限。
  • 对于 Fargate 启动类型,通过 logs:CreateLogStreamlogs:PutLogEvents 权限使用 Amazon ECS 任务执行 IAM 角色。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色
  • 对于 Amazon EC2 启动类型,请检查以下内容:
  • 如果在任务定义中没有使用 Amazon ECS 任务执行 IAM 角色,请确保对容器实例使用的 IAM 角色授予 logs:CreateLogStreamlogs:PutLogEvents 权限 。
  • 如果您正在使用 Amazon ECS 任务执行 IAM 角色,请确保容器代理参数 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE 的值设为 true
    注意:使用 ecs-init 包 1.16.0 - 1 版本或更高版本的 Amazon ECS 优化 AMI 时,此参数的默认值为 true。在 Windows 中,此参数的默认值为 false。有关更多信息,请参阅 Amazon ECS 容器代理配置

您的网络配置存在问题

如果您的 Amazon Virtual Private Cloud (Amazon VPC) 没有互联网网关,并且您的任务使用 awslogs 日志驱动程序将日志信息发送到 CloudWatch Logs,那么请确保您为 CloudWatch Logs 创建了接口 Amazon VPC 终端节点。有关更多信息,请参阅将 CloudWatch 日志与接口 VPC 终端节点配合使用

容器的日志级别配置不正确

awslogs 日志驱动程序只需将作为 STDOUT 和 STDERR 输入/输出流的容器日志从 Docker 传送到 CloudWatch Logs 即可。因此,请验证您的应用程序是否将日志传送到 STDOUT 和 STDERR 输入/输出流。请务必在容器构建期间为应用程序设置正确的日志级别。根据您的应用程序,您可以通过环境变量或配置文件来设置日志级别。


相关信息

监控容器实例

如何排查 Amazon ECS 或 Amazon EKS 的容器日志缺失问题?

AWS 官方
AWS 官方已更新 2 年前