Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
我該如何將容器日誌同時傳送到 AWS Fargate 上 Amazon ECS 中的多個目的地?
我希望在 AWS Fargate 上執行的應用程式容器能將日誌轉送到多個目的地,例如 Amazon CloudWatch、Amazon Data Firehose 或 Splunk。
簡短描述
Amazon Elastic Container Service (Amazon ECS) 任務定義可讓您為特定容器指定單一的日誌組態物件。此限制表示您只能將日誌轉送到一個目的地。若要在 Amazon ECS 的 Fargate 上將日誌轉送至多個目的地,您可以使用 FireLens。
**注意:**FireLens 可與 Fluent Bit 和 Fluentd 日誌轉送工具搭配使用。以下解決方案使用 Fluent Bit,因為 Fluent Bit 比 Fluentd 更節省資源。
解決方法
先決條件:
查看以下資訊:
- FireLens 會使用 ECS 任務定義中 logConfiguration 物件裡指定為選項的鍵值對來產生 Fluent Bit 的輸出定義。日誌導向的目的地是在 Fluent Bit 組態檔案的 [OUTPUT] 定義區段中指定的。如需詳細資訊,請參閱 Fluent Bit 網站上的輸出結果。
- FireLens 會為您建立一個組態檔案,但您也可以指定自訂組態檔案。您可以在 Amazon Simple Storage Service (Amazon S3) 中託管此組態檔案。或者,建立一個自訂 Fluent Bit Docker 映像檔,並在其中新增自訂輸出組態檔案。
- 如果您在 Fargate 上使用 Amazon ECS,則無法從 Amazon S3 中提取組態檔案。而是必須使用組態檔案建立自訂 Docker 映像檔。
建立 IAM 權限
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
建立 AWS Identity and Access Management (IAM) 權限,以允許您的任務角色將日誌路由到不同的目的地。例如,如果您的目的地是 Data Firehose,那麼您必須授予任務呼叫 firehose:PutRecordBatch API 的權限。
**注意:**Fluent Bit 支援多個外掛程式作為日誌目的地。CloudWatch 和 Kinesis 等目的地需要以下權限:logs:CreateLogGroup、logs:CreateLogStream、logs:DescribeLogStreams、logs:PutLogEvents 和 kinesis:Putcords。如需詳細資訊,請參閱 GitHub 網站上的 CloudWatch 和 Kinesis 權限。
使用自訂輸出組態檔案建立 Fluent Bit Docker 映像檔
-
建立一個名為 logDestinations.conf 的自訂 Fluent Bit 組態檔案,並選擇 [OUTPUT] 定義。例如,下列組態檔案包括 CloudWatch、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**注意:**不同的目的地在 [OUTPUT] 定義中需要指定不同的欄位。有關範例,請參閱 GitHub 網站上的 amazon-ecs-firelens-examples。
-
使用以下 Dockerfile 範例建立包含自訂 Fluent Bit 輸出組態檔案的 Docker 映像檔:
FROM amazon/aws-for-fluent-bit:latestADD logDestinations.conf /logDestinations.conf**注意:**如需詳細資訊,請參閱 Docker 網站上的 Dockerfile 參考。
-
若要使用您建立的 Dockerfile 來建立自訂 fluent-bit Docker 映像檔,請執行以下命令:
docker build -t custom-fluent-bit:latest .**重要:**在與 Dockerfile 相同的位置執行 docker build 命令。
-
若要確認 Docker 映像檔可供 Amazon ECS 使用,請將 Docker 映像檔推送至 Amazon Elastic Container Registry (Amazon ECR)。或者,將 Docker 映像檔推送到您自己的 Docker 登錄檔。例如,若要將本機 Docker 映像檔推送到 Amazon ECR,請執行以下命令:
docker push aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest -
在您的任務定義中,更新您的 FireLens 組態的選項:
{ "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 組態檔案中加入 config-file-type 和 config-file-value 選項。若要加入這些選項,請使用 AWS CLI 或 Amazon ECS 主控台建立任務定義。
-
修改組態中 containerDefinition 區段的 image 屬性,使其指向有效的 Amazon ECR 映像檔位置。若要在 Amazon ECR 儲存庫中指定映像檔,請使用完整的 registry/repository:tag 命名慣例。例如:
aws_account_id.dkr.ecr.region.amazonaws.com/custom-fluent-bit:latest若要使用其他儲存庫,請參閱任務定義的映像檔屬性。
- 語言
- 中文 (繁體)
