Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

使用 awslogs 日志驱动程序

您可在任务中配置容器以将日志信息发送到 CloudWatch Logs。这使您能够在一个方便的位置查看容器中的不同日志,并防止您的容器日志占用您的容器实例上的磁盘空间。本主题将帮助您在任务定义中开始使用 awslogs 日志驱动程序。

要将系统日志从 Amazon ECS 容器实例发送到 CloudWatch Logs,请参阅将 CloudWatch Logs 用于容器实例。有关 CloudWatch Logs 的更多信息,请参阅 Amazon CloudWatch 用户指南 中的监控日志文件

在容器实例上启用 awslogs 日志驱动程序

Amazon ECS 容器实例至少需要 1.9.0 版本的容器代理才能启用 awslogs 日志驱动程序。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

注意

如果您对容器实例使用的不是针对 Amazon ECS 优化过的 AMI(至少具有 1.9.0-1 版本的 ecs-init 程序包),则还需要指定当您通过在 docker run 语句或环境变量文件中使用以下环境变量启动代理时,awslogs 日志记录驱动程序在容器实例上可用。有关更多信息,请参阅安装 Amazon ECS 容器代理

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

您的 Amazon ECS 容器实例还需要针对您用于启动容器实例的 IAM 角色的 logs:CreateLogStreamlogs:PutLogEvents 权限。如果您在 Amazon ECS 中启用 awslogs 日志驱动程序支持之前创建了 Amazon ECS 容器实例,则可能需要添加此权限。如果您的容器实例使用容器实例的托管 IAM 策略,则您的容器实例应具有正确的权限。有关检查您的 Amazon ECS 容器实例角色并为容器实例附加托管 IAM 策略的信息,请参阅在 IAM 控制台中检查 ecsInstanceRole

创建您的日志组

awslogs 日志驱动程序可将日志流发送到 CloudWatch Logs 中的现有日志组,但无法创建日志组。您必须先创建您希望您的容器使用的日志组,然后您才能启动使用 awslogs 日志驱动程序的任何任务。

例如,您可具有包含链接到一个 MySQL 容器(使用 awslogs-mysql 日志组)的 WordPress 容器(使用 awslogs-wordpress 日志组)的任务。下列各部分演示如何使用 AWS CLI 和 CloudWatch 控制台创建这些日志组。

使用 AWS CLI 创建日志组

AWS Command Line Interface (AWS CLI) 是用于管理 AWS 服务的统一工具。只通过一个工具进行下载和配置,您就可以使用命令行控制多个 AWS 服务并利用脚本来自动执行这些服务。有关更多信息,请参阅 AWS Command Line Interface 用户指南

如果您安装了可以正常运行的 AWS CLI,则可使用它创建日志组。下面的命令将在 ap-northeast-1 区域中创建一个名为 awslogs-wordpress 的日志组。为要创建的每个日志组运行此命令,将日志组名称替换为您的值和所需日志目标的区域名称。

Copy
aws logs create-log-group --log-group-name awslogs-wordpress --region ap-northeast-1

使用 CloudWatch 控制台创建日志组

以下步骤将在 CloudWatch 控制台中创建日志组。

在 CloudWatch 控制台中创建日志组

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在左侧导航窗格中,选择 Logs

  3. 选择 ActionsCreate log group

  4. 对于 Log Group Name,输入要创建的日志组的名称。

  5. 选择 Create log group 以完成操作。

可用的 awslogs 日志驱动程序选项

awslogs 日志驱动程序支持 Amazon ECS 任务定义中的下列选项。

注意

虽然 Docker 文档中还有更多可用于 awslogs 日志驱动程序的选项,但 Amazon ECS 尚未全部支持这些选项。

awslogs-region

必需:是

指定 awslogs 日志驱动程序应将您的 Docker 日志发送到的区域。您可选择将位于不同区域的集群中的所有日志发送到 CloudWatch Logs 中的单个区域,以便它们全部显示在一个位置,或者您可以按区域将它们分开以更好地粒化。确保指定的日志组存在于您使用此选项指定的区域中。

awslogs-group

必需:是

您必须指定 awslogs 日志驱动程序将其日志流发送到的日志组。有关更多信息,请参阅 创建您的日志组

awslogs-stream-prefix

必需:否

利用 awslogs-stream-prefix 选项,您可将日志流与指定的前缀、容器名称和容器所属的 Amazon ECS 任务的 ID 关联在一起。如果您使用此选项指定前缀,则日志流将采用以下格式:

prefix-name/container-name/ecs-task-id

如果您未使用此选项指定前缀,则日志流将以 Docker 守护程序在容器实例上分配的容器 ID 命名。由于仅使用 Docker 容器 ID(仅在容器实例上可用)很难将日志回溯到发送它们的容器,因此,我们建议您使用此选项指定前缀。

对于 Amazon ECS 服务,您可使用服务名称作为前缀,从而允许您将日志流跟踪到容器所属的服务、发送它们的容器的名称以及容器所属的任务的 ID。

在任务定义中指定日志配置

您必须先在任务定义中为容器指定 awslogs 日志驱动程序,然后您的容器才能将日志发送到 CloudWatch。此部分描述了为使用 awslogs 日志驱动程序而进行的容器日志配置。有关更多信息,请参阅 创建任务定义

下面显示的任务定义 JSON 为每个容器都指定了一个 logConfiguration 对象,即,为将日志发送到名为 awslogs-wordpress 的日志组的 WordPress 容器指定了一个,并为将日志发送到名为 awslogs-mysql 的日志组的 MySQL 容器指定了一个。两个容器都使用 awslogs-example 日志流前缀。

Copy
{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-wordpress", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "awslogs-example" } }, "memory": 500, "cpu": 10 }, { "environment": [ { "name": "MYSQL_ROOT_PASSWORD", "value": "password" } ], "name": "mysql", "image": "mysql", "cpu": 10, "memory": 500, "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-mysql", "awslogs-region": "ap-northeast-1", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example" }

在 Amazon ECS 控制台中,指定了 wordpress 容器的日志配置,如下图中所示。

 控制台日志配置

在容器定义日志配置中向 awslogs 日志驱动程序注册任务定义之后,您可运行任务或使用此任务定义创建服务以开始将日志发送到 CloudWatch Logs。有关更多信息,请参阅 正在运行的任务创建服务

在 CloudWatch Logs 中查看 awslogs 容器日志

在您的容器实例角色有适当的权限将日志发送到 CloudWatch Logs 之后,您的容器代理至少将更新到版本 1.9.0,并且您已配置并启动包含使用 awslogs 日志驱动程序的容器的任务,您已配置的容器应会将其日志数据发送到 CloudWatch Logs。您可在控制台中查看和搜索这些日志。

通过 Amazon ECS 控制台查看容器的 CloudWatch Logs 数据

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. Clusters 页上,选择包含要查看的任务的集群。

  3. Cluster: cluster_name 页上,选择 Tasks 并选择要查看的任务。

  4. Task: task_id 页上,通过选择容器名称左侧的箭头来扩展容器视图。

  5. Log Configuration 部分,选择 View logs in CloudWatch,这将在 CloudWatch 控制台中打开关联的日志流。

     日志配置的任务定义视图

在 CloudWatch 控制台中查看 CloudWatch Logs 数据

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在左侧导航窗格中,选择 Logs

  3. 选择要查看的日志组。您应该会看到在创建您的日志组中创建的日志组。

     awslogs 控制台指标视图
  4. 选择要查看的日志流。

     awslogs 控制台指标视图