Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

使用 awslogs 日志驱动程序

您可在任务中配置容器以将日志信息发送到 CloudWatch Logs。这允许您从 Fargate 任务中的容器查看日志。本主题将帮助您在任务定义中开始使用 awslogs 日志驱动程序。

注意

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

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

如果您对任务使用 Fargate 启动类型,要启用 awslogs 日志驱动程序,只需要将所需的 logConfiguration 参数添加到您的任务定义即可。此日志驱动程序会将您的 Fargate 任务配置为向 Amazon CloudWatch Logs 发送日志信息。有关更多信息,请参阅 在任务定义中指定日志配置

创建您的日志组

awslogs 日志驱动程序可将日志流发送到 CloudWatch Logs 中的现有日志组,但无法创建日志组。您应确保创建您希望您的容器使用的日志组,然后您才能启动使用 awslogs 日志驱动程序的任何任务。该控制台提供了一个自动配置选项。如果您在控制台中注册任务定义并选择 Auto-configure CloudWatch Logs (自动配置 CloudWatch Logs) 选项,系统将为您创建日志组。或者,您可以使用以下步骤手动创建日志组。

例如,您可具有包含链接到一个 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,则可使用它创建日志组。下面的命令将在 us-west-2 区域中创建一个名为 awslogs-wordpress 的日志组。为要创建的每个日志组运行此命令,将日志组名称替换为您的值和所需日志目标的区域名称。

aws logs create-log-group --log-group-name awslogs-wordpress --region us-west-2

使用自动配置功能创建日志组

在 Amazon ECS 控制台中注册任务定义时,您可以选择允许 Amazon ECS 自动配置 CloudWatch 日志。此选项还为您创建指定的日志组。为使此过程变得轻松,自动配置选项使用指定的前缀设置 CloudWatch 日志和日志组。

在 Amazon ECS 控制台中创建日志组

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

  2. 在左侧导航窗格中,依次选择 Task DefinitionsCreate new Task Definition

  3. 选择兼容性选项,然后选择下一步

  4. 选择 Add container

  5. Storage and Logging (存储和日志记录) 部分,对于 Log configuration (日志配置),选择 Auto-configure CloudWatch Logs (自动配置 CloudWatch 日志)

  6. 输入您的 awslogs 日志驱动程序选项。有关更多信息,请参阅 在任务定义中指定日志配置

  7. 完成任务定义向导的其余部分。

使用 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 任务定义中的下列选项。有关更多信息,请参阅 CloudWatch Logs 日志记录驱动程序

awslogs-create-group

必需:否

指定您是否希望自动创建日志组。如果未指定此选项,则默认为 false

注意

IAM 策略必须包含 logs:CreateLogGroup 权限,然后才能尝试使用 awslogs-create-group

awslogs-datetime-format

必需:否

此选项以 Python strftime 格式定义多行开始位置模式。日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成。因此,匹配行是日志消息之间的分隔符。

使用此格式的一个使用案例示例是用于解析输出(如堆栈转储),这可能记录在多个条目中。正确模式允许它捕获在单个条目中。

如果同时配置了 awslogs-datetime-formatawslogs-multiline-pattern,此选项始终优先。

注意

多行日志记录对所有日志消息执行正则表达式解析和匹配,这可能会对日志记录性能产生负面影响。

awslogs-region

必需:是

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

awslogs-group

必需:是

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

awslogs-multiline-pattern

必需:否

此选项使用正则表达式定义多行开始位置模式。日志消息由与模式匹配的行以及与模式不匹配的任何以下行组成。因此,匹配行是日志消息之间的分隔符。

如果还配置了 awslogs-datetime-format,则会忽略此选项。

注意

多行日志记录对所有日志消息执行正则表达式解析和匹配。这可能会对日志记录性能产生负面影响。

awslogs-stream-prefix

必需:在使用 Fargate 启动类型时是必需的。

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

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

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

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

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

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

{ "containerDefinitions": [ { "name": "wordpress", "links": [ "mysql" ], "image": "wordpress", "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "awslogs-wordpress", "awslogs-region": "us-west-2", "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": "us-west-2", "awslogs-stream-prefix": "awslogs-example" } } } ], "family": "awslogs-example" }

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


                控制台日志配置

在 CloudWatch Logs 中查看 awslogs 容器日志

在启动使用 awslogs 日志驱动程序的 Fargate 任务后,您配置的容器应将其日志数据发送到 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 控制台中查看 CloudWatch Logs 数据

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

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

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

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

    
                        awslogs 控制台指标视图