如何将容器日志发送到 AWS Fargate 上 Amazon ECS 中的多个目的地?
我希望将 AWS Fargate 上运行的应用程序容器的日志转发到多个目的地。这些目的地可能是 Amazon CloudWatch、Amazon Kinesis Data Firehose 或 Splunk。
简短描述
Amazon Elastic Container Service (Amazon ECS) 任务定义允许您仅为给定容器指定单个日志配置对象,这意味着您只能将日志转发到单个目的地。要将日志转发到 Fargate 上 Amazon ECS 中的多个目的地,您可以使用 FireLens。
**注意:**FireLens 可与 Fluent Bit 和 Fluentd 日志转发器一起使用。以下解决方案考虑使用 Fluent Bit,因为 Fluent Bit 比 Fluentd 更具资源效率。
请考虑以下事项:
- FireLens 使用 ECS 任务定义的 logConfiguration 对象中指定为选项的键值对生成 Fluent Bit 输出定义。将日志路由到的目的地在 Fluent Bit 配置文件的 [输出] 定义部分指定。有关更多信息,请参阅 Fluent Bit 网站上配置文件的 Output(输出)部分。
- FireLens 代表您创建配置文件,但您也可以指定自定义配置文件。您可以在 Amazon Simple Storage Service (Amazon S3) 中托管此配置文件,也可以创建自定义 Fluent Bit Docker 映像,并添加自定义输出配置文件。
- 如果您在 Fargate 上使用 Amazon ECS,则无法从 Amazon S3 中提取配置文件。您必须使用配置文件创建自定义 Docker 映像。
解决方法
创建 AWS Identity and Access Management (IAM) 权限
创建 IAM 权限,以允许您的任务角色将日志路由到不同的目的地。例如,如果您的目的地是 Kinesis Data Firehose,那么您必须授予任务权限才能调用 firehose:PutRecordBatch API。
注意:Fluent Bit 支持将多个插件作为日志目的地。CloudWatch 和 Kinesis 串流等目的地所需的权限包括 logs:CreateLogGroup、logs:CreateLogStream、logs:DescribeLogStreams、logs:PutLogEvents 和kinesis:PutRecords。
使用自定义输出配置文件创建 Fluent Bit Docker 映像。
1. 创建一个名为 logDestinations.conf 的自定义 Fluent Bit 配置文件,并在其中定义所选择的 [输出] 定义。例如,以下配置文件包含为 CloudWatch、Kinesis Data Firehose 和 Splunk 定义的配置。
[OUTPUT] Name firehose Match YourContainerName* region us-west-2 delivery_stream nginx-stream [OUTPUT] Name cloudwatch Match YourContainerName* region us-east-1 log_group_name firelens-nginx-container log_stream_prefix from-fluent-bit auto_create_group true [OUTPUT] Name splunk Match <ContainerName>* Host 127.0.0.1 Splunk_Token xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx Splunk_Send_Raw On
**注意:**不同的目的地需要在 [输出] 定义中指定不同的字段。有关示例,请参阅 Amazon ECS FireLens 示例。
2. 根据以下 Dockerfile 示例使用自定义 Fluent Bit 输出配置文件创建 Docker 映像:
FROM amazon/aws-for-fluent-bit:latest ADD logDestinations.conf /logDestinations.conf
**注意:**有关详细信息,请参阅 Docker 网站上的 Dockerfile 参考。
3. 要使用您在第 2 步中创建的 Dockerfile 创建自定义 fluent-bit Docker 映像,请运行以下命令:
docker build -t custom-fluent-bit:latest .
**重要提示:**请务必在 Dockerfile 所在位置运行 docker build 命令。
4. 要确认 Docker 映像是否可供 Amazon ECS 使用,请将您的 Docker 映像推送到 Amazon Elastic Container Registry (Amazon ECR) 或您自己的 Docker 注册表。例如,要将本地 Docker 映像推送到 Amazon ECR,请运行以下命令:
docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
5. 在任务定义 (TaskDefinition) 中,更新 FireLens 配置 (firelensConfiguration) 的选项。例如:
{ "containerDefinitions":[ { "essential":true, "image":"aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest", "name":"log_router", "firelensConfiguration":{ "type":"fluentbit", "options":{ "config-file-type":"file", "config-file-value":"/logDestinations.conf" } } } ] }
更新 FireLens 配置的选项时,请考虑以下事项:
要指定自定义配置文件,您必须在 FireLens 配置文件中包含 config-file-type 和 config-file-value 选项。您只能在使用 AWS Command Line Interface (AWS CLI) 创建任务定义时设置这些选项。
**注意:**如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
您必须修改配置的 containerDefinition 部分中的映像属性,才能反映有效的 Amazon ECR 映像位置。您可以使用完整的 registry/repository:tag 命名约定在 Amazon ECR 存储库中指定映像。例如:
aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest
要使用其他存储库,请参阅任务定义的映像属性。
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前