我在 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 容器代理。
IAM 角色没有所需的权限
完成以下步骤:
- 为您的 Amazon ECS 容器实例的 IAM 角色添加 logs:CreateLogStream 和 logs:PutLogEvents 权限。
- 对于 AWS Fargate 启动类型,使用具有 logs:CreateLogStream 和 logs:PutLogEvents 权限的 Amazon ECS 任务执行 IAM 角色。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色。
- 对于 Amazon EC2 启动类型,请查看以下内容:
对于不使用 Amazon ECS 任务执行 IAM 角色的任务,向容器实例 IAM 角色授予 logs:CreateLogStream 和 logs:PutLogEvents 权限。
对于使用 Amazon ECS 任务执行 IAM 角色的任务,将容器代理参数 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE 的值更新为 true。
**注意:**当您使用版本为 1.16.0 -1 或更高版本的 ecs-init 软件包的 Amazon ECS 优化的 AMI 时,此参数的默认值为 true。在 Windows 上,此参数的默认值为 false。有关更多信息,请参阅 Amazon ECS 容器代理配置。
网络配置不正确
在没有互联网网关的 Amazon Virtual Private Cloud(Amazon VPC)上使用 awslogs 日志驱动程序的任务必须创建 CloudWatch Logs 端点。有关更多信息,请参阅 Using CloudWatch Logs with interface VPC endpoints。
容器的日志级别配置不正确
awslogs 日志驱动程序将容器日志(即 STDOUT 和 STDERR I/O 流)从 Docker 传递到 CloudWatch Logs。更新您的应用程序,将日志发送到 STDOUT 和 STDERR I/O 流。在容器构建期间,为您的应用程序配置正确的日志级别。根据您的应用程序,您可以通过环境变量或配置文件设置日志级别。
相关信息
Amazon ECS 的监控工具
如何排查 Amazon ECS 或 Amazon EKS 容器日志缺失的问题?