自定义日志路由 - Amazon ECS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自定义日志路由

利用 FireLens for Amazon ECS,您可以使用任务定义参数将日志路由到 AWS 服务或 AWS 合作伙伴网络 (APN) 目标来进行日志存储和分析。FireLens 与 FluentdFluent Bit 配合使用。我们提供 AWS for Fluent Bit 映像,您也可以使用自己的 Fluentd 或 Fluent Bit 映像。

支持通过 AWS 开发工具包、Amazon ECS 和 AWS CLI使用 FireLens 配置创建 AWS 管理控制台 任务定义。

Considerations

使用 FireLens for Amazon ECS 时应注意以下事项:

  • Amazon ECS 同时在 AWS Fargate 和 上托管的任务支持 的 FireLensAmazon EC2。

  • Amazon ECS 模板中支持 AWS CloudFormation 的 FrelLens。有关更多信息,请参阅 中的 TaskDefinition FirelensConfiguration AWS CloudFormation 用户指南

  • 对于使用 bridge 网络模式的任务,具有 FirelLens 配置的容器必须在依赖它的任何应用程序容器启动之前启动。要控制容器的启动顺序,请在任务定义中使用依赖条件。有关更多信息,请参阅容器依赖项

    注意

    如果您将容器定义中的依赖条件参数与 FirelLens 配置结合使用,请确保每个容器均具有 STARTHEALTHY 条件要求。

所需的 IAM 权限

要使用此功能,您必须为您的任务创建一个 IAM 角色,该角色提供使用任务需要的任何 AWS 服务所需的权限。例如,如果容器将日志路由到 Kinesis Data Firehose,则任务需要调用 firehose:PutRecordBatch API 的权限。有关更多信息,请参阅 中的添加和删除 IAM IAM 用户指南身份权限

以下示例 IAM 策略添加了将日志路由到 Kinesis Data Firehose 所需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecordBatch" ], "Resource": [ "*" ] } ] }

在以下条件下,您的任务也可能需要 Amazon ECS 任务执行角色。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色

  • 如果您的任务托管在 上Fargate,并且您正在从 中提取容器映像Amazon ECR或在日志配置AWS Secrets Manager中引用 中的敏感数据,则必须包含任务执行IAM角色。

  • 如果您指定托管于 Amazon S3 中的自定义配置文件,则您的任务执行 IAM 角色必须包括对配置文件的 s3:GetObject 权限以及对该文件所在的 s3:GetBucketLocation 存储桶的 Amazon S3 权限。有关更多信息,请参阅 中的在策略指定权限Amazon Simple Storage Service 控制台用户指南

    以下示例 IAM 策略添加了从 Amazon S3 中检索文件所需的权限。指定 Amazon S3 存储桶的名称和配置文件名称。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::examplebucket/folder_name/config_file_name" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket" ] } ] }

使用 Fluent 记录器库

在任务定义中指定 awsfirelens 日志驱动程序时,ECS 代理会将以下环境变量注入容器中:

FLUENT_HOST

分配给 FirelLens 容器的 IP 地址。

FLUENT_PORT

Fluent Forward 协议正在侦听的端口。

FLUENT_HOSTFLUENT_PORT 环境变量可让您直接从代码登录到日志路由器,而不是通过 stdout。有关更多信息,请参阅 GitHub 上的 fluent-logger-golang