创建使用 FireLens 配置的任务定义 - Amazon Elastic Container Service

创建使用 FireLens 配置的任务定义

要将自定义日志路由与 FireLens 结合使用,您必须在任务定义中指定以下内容:

  • 包含 FireLens 配置的日志路由器容器。我们建议将容器标记为 essential

  • 一个或多个包含指定 awsfirelens 日志驱动程序的日志配置的应用程序容器。

  • 一个任务 IAM 角色 Amazon 资源名称(ARN),其中包含任务路由日志所需的权限。

使用 AWS Management Console创建新的任务定义时,通过 Firelens 集成部分可以轻松添加日志路由器容器。有关更多信息,请参阅使用控制台创建任务定义

Amazon ECS 将转换日志配置并生成 Fluentd 或 Fluent Bit 输出配置。输出配置挂载在 /fluent-bit/etc/fluent-bit.conf(对于 Fluent Bit)和 /fluentd/etc/fluent.conf(对于 Fluentd)处的日志路由容器中。

重要

FireLens 在端口 24224 上侦听。因此,为了确保从任务外部无法访问 FireLens 日志路由器,不得允许任务使用的安全组中端口 24224 上的入口流量。对于使用 awsvpc 网络模式的任务,这是与任务关联的安全组。对于使用 host 网络模式的任务,它是与托管任务的 Amazon EC2 实例关联的安全组。对于使用 bridge 网络模式的任务,请勿创建任何使用端口 24224 的端口映射。

下面的任务定义示例定义了一个日志路由器容器,它使用 Fluent Bit 将日志路由到 CloudWatch Logs。该示例还定义了一个应用程序容器,它使用日志配置将日志路由到 Amazon Kinesis Data Firehose 并将用于缓冲事件的内存设置为 2MiB。

{ "family": "firelens-example-firehose", "taskRoleArn": "arn:aws:iam::123456789012:role/ecs_task_iam_role", "containerDefinitions": [ { "essential": true, "image": "906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name": "log_router", "firelensConfiguration": { "type": "fluentbit" }, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "firelens-container", "awslogs-region": "us-west-2", "awslogs-create-group": "true", "awslogs-stream-prefix": "firelens" } }, "memoryReservation": 50 }, { "essential": true, "image": "httpd", "name": "app", "logConfiguration": { "logDriver": "awsfirelens", "options": { "Name": "firehose", "region": "us-west-2", "delivery_stream": "my-stream", "log-driver-buffer-limit": "2097152" } }, "memoryReservation": 100 } ] }

logConfiguration 对象中指定为选项的键值对用于生成 Fluentd 或 Fluent Bit 输出配置。以下是来自 Fluent Bit 输出定义的代码示例。

[OUTPUT] Name firehose Match app-firelens* region us-west-2 delivery_stream my-stream
注意

FirelLens 可管理 match 配置。您的任务定义中未指定此配置。

使用 Amazon ECS 元数据

在任务定义中指定 FireLens 配置时,您可以选择性地切换 enable-ecs-log-metadata 的值。默认情况下,Amazon ECS 会在日志条目中添加其他字段来帮助标识日志源。可以通过将 enable-ecs-log-metadata 设置为 false 来关闭此操作。

  • ecs_cluster - 任务所属的集群的名称。

  • ecs_task_arn – 容器所属的任务的完整 Amazon 资源名称(ARN)。

  • ecs_task_definition - 任务正在使用的任务定义名称和修订。

  • ec2_instance_id – 容器托管于的 Amazon EC2 实例 ID。此字段仅对使用 EC2 启动类型的任务有效。

下面显示了在指定 Amazon ECS 日志元数据设置值时所需的语法。

{ "containerDefinitions":[ { "essential":true, "image":"906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name":"log_router", "firelensConfiguration":{ "type":"fluentbit", "options":{ "enable-ecs-log-metadata":"true | false" } } } ] }

指定自定义配置文件

除了 FireLens 代表您创建的自动生成的配置文件之外,您还可以指定自定义配置文件。配置文件格式是您所使用的日志路由器的本机格式。有关更多信息,请参阅 Fluentd Config 文件语法Fluent Bit 配置文件

在您的自定义配置文件中,对于使用 bridgeawsvpc 网络模式的任务,请勿通过 TCP 设置 Fluentd 或 Fluent Bit 转发输入,因为 FireLens 会将它添加到输入配置中。

您的 FireLens 配置必须包含以下选项才能指定自定义配置文件:

config-file-type

自定义配置文件的源位置。可用选项为 s3file

注意

托管在 AWS Fargate 上的任务仅支持 file 配置文件类型。

config-file-value

自定义配置文件的源。如果使用 s3 配置文件类型,则配置文件值是 Amazon S3 存储桶和文件的完整 ARN。如果使用 file 配置文件类型,则配置文件值是容器映像中或挂载到容器中的卷上存在的配置文件的完整路径。

重要

在使用自定义配置文件时,必须指定一个与 FireLens 所用路径不同的路径。Amazon ECS 保留对于 Fluent Bit 和 /fluentd/etc/fluent.conf 对于 Fluentd 的文件路径 /fluent-bit/etc/fluent-bit.conf

以下示例显示了指定自定义配置时所需的语法。

重要

要指定托管于 Amazon S3 中的自定义配置文件,请确保已创建具有适当权限的任务执行 IAM 角色。有关更多信息,请参阅所需的 IAM 权限

下面显示了在指定自定义配置时所需的语法。

{ "containerDefinitions":[ { "essential":true, "image":"906394416424.dkr.ecr.us-west-2.amazonaws.com/aws-for-fluent-bit:stable", "name":"log_router", "firelensConfiguration":{ "type":"fluentbit", "options":{ "config-file-type":"s3 | file", "config-file-value":"arn:aws:s3:::mybucket/fluent.conf | filepath" } } } ] }
注意

托管在 AWS Fargate 上的任务仅支持 file 配置文件类型。