

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將 Amazon ECS 日誌傳送至 AWS 服務或 AWS Partner
<a name="using_firelens"></a>

您可以使用 FireLens for Amazon ECS 來使用任務定義參數，將日誌路由到 AWS 服務或 AWS Partner Network (APN) 目的地，以進行日誌儲存和分析。 AWS Partner Network 是一個全球合作夥伴社群，利用計劃、專業知識和資源來建置、行銷和銷售客戶產品。如需詳細資訊，請參閱 [AWS Partner](https://aws.amazon.com/partners/work-with-partners/)。FireLens 使用 [Fluentd](https://www.fluentd.org/) 和 [Fluent Bit](https://fluentbit.io/)。我們提供 AWS for Fluent Bit 映像，或者您也可以使用自己的 Fluentd 或 Fluent Bit 映像。

依預設，Amazon ECS 會設定容器相依性，確保 Firelens 容器先於所有使用它的容器啟動，並於所有使用它的容器停止後才停止。

若要使用此功能，您必須為任務建立 IAM 角色，以提供使用任務所需的任何 AWS 服務所需的許可。例如，若容器正在將日誌路由至 Firehose，則任務需要呼叫 `firehose:PutRecordBatch` API 的許可。如需詳細資訊，請參閱 *《IAM 使用者指南》*中的[新增和移除 IAM 身分許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

在下列情況下，任務可能也需要 Amazon ECS 任務執行角色。如需詳細資訊，請參閱[Amazon ECS 任務執行 IAM 角色](task_execution_IAM_role.md)。
+ 如果您的任務託管在 Fargate 上，而且您要從 Amazon ECR 提取容器映像，或在日誌組態 AWS Secrets Manager 中參考來自 的敏感資料，則必須包含任務執行 IAM 角色。
+ 在使用 Amazon S3 中託管的自訂組態檔案時，任務執行 IAM 角色必須包含 `s3:GetObject` 許可。

使用 FireLens for Amazon ECS 時，請考量下列事項：
+ 建議將 `my_service_` 新增至日誌容器名稱，以便在主控台中輕鬆區分容器名稱。
+ Amazon ECS 預設會在應用程式容器與 FireLens 容器之間新增啟動容器順序相依性。在應用程式容器與 FireLens 容器之間指定容器順序時，會覆寫預設的啟動容器順序。
+ 託管於 Linux 上的 AWS Fargate 和 Linux 上的 Amazon EC2 的任務支援 Amazon ECS 的 FireLens。Windows 容器不支援 FireLens。

  如需如何為 Windows 容器設定集中式記錄的相關資訊，請參閱 [Centralized logging for Windows containers on Amazon ECS using Fluent Bit](https://aws.amazon.com/blogs/containers/centralized-logging-for-windows-containers-on-amazon-ecs-using-fluent-bit/) (《使用 Fluent Bit 為 Amazon ECS 上的 Windows 容器設定集中式記錄》)。
+ 您可以使用 CloudFormation 範本來設定 Amazon ECS FireLens的 。如需詳細資訊，請參閱《AWS CloudFormation 使用者指南》**中的 [AWS::ECS::TaskDefinition FirelensConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-firelensconfiguration.html)。
+ FireLens 在連接埠上監聽 `24224`，因此為了確保 FireLens 日誌路由器無法在任務之外連線，您不能在允許任務使用的安全群組中連接埠 `24224` 上的傳入流量。對於使用 `awsvpc` 網路模式的任務，這是與任務相關聯的安全群組。對於使用 `host` 網路模式的任務，這是與託管任務的 Amazon EC2 執行個體相關聯的安全群組。對於使用 `bridge` 網路模式的任務，請不要建立使用連接埠 `24224` 的任何連接埠映射。
+ 對於使用 `bridge` 網路模式的工作，具有 FireLens 配置的容器必須在任何依賴該模式的應用程式容器啟動之前啟動。若要控制容器的起始順序，請在工作定義中使用相依性條件。如需詳細資訊，請參閱[容器相依性](task_definition_parameters.md#container_definition_dependson)。
**注意**  
如果您在使用 FireLens 配置的容器定義中使用相依性條件參數，請確定每個容器都有 `START` 或 `HEALTHY` 條件需求。
+ 根據預設，FireLens 將叢集和任務定義名稱以及叢集的 Amazon Resource Name (ARN) 作為中繼資料索引鍵新增到 stout/stderr 容器紀錄。以下是中繼資料格式的範例。

  ```
  "ecs_cluster": "{{cluster-name}}",
  "ecs_task_arn": "arn:aws:ecs:{{region}}:{{111122223333}}:task/{{cluster-name}}/{{f2ad7dba413f45ddb4EXAMPLE}}",
  "ecs_task_definition": "task-def-name:revision",
  ```

  如果您不想在紀錄中使用中繼資料，請在任務定義 `firelensConfiguration` 部分中將 `false` 設定為 `enable-ecs-log-metadata`。

  ```
  "firelensConfiguration":{
     "type":"fluentbit",
     "options":{
        "enable-ecs-log-metadata":"false",
        "config-file-type":"file",
        "config-file-value":"/extra.conf"
  }
  ```

您可以設定FireLens容器以非根使用者身分執行。考慮下列各項：
+  若要將FireLens容器設定為以非根使用者身分執行，您必須以下列其中一種格式指定使用者：
  + `uid`
  + `uid:gid`
  + `uid:group`

  如需在容器定義中指定使用者的詳細資訊，請參閱《*Amazon Elastic Container Service API 參考*》中的 [ContainerDefinition](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html)。

  FireLens 容器會透過UNIX通訊端接收應用程式日誌。Amazon ECS 代理程式使用 `uid`將通訊端目錄的擁有權指派給FireLens容器。
+ Amazon ECS Agent 版本 `1.96.0`和更新版本以及 Amazon ECS 最佳化 AMI 版本 `v20250716` 和更新版本支援將FireLens容器設定為以非根使用者身分執行。
+ 當您為FireLens容器指定使用者時， `uid` 必須是唯一的，且不會用於任務或容器執行個體中屬於其他容器的其他程序。

如需有關如何搭配 Amazon ECS 使用多個組態檔案 (包括您託管的或 Amazon S3 中的檔案) 的資訊，請參閱 [Init process for Fluent Bit on ECS, multi-config support](https://github.com/aws/aws-for-fluent-bit/tree/mainline/use_cases/init-process-for-fluent-bit)。

如需範例組態的詳細資訊，請參閱 [Amazon ECS 任務定義範例：將日誌路由至 FireLens](firelens-taskdef.md)。

如需設定高輸送量日誌的詳細資訊，請參閱 [為高輸送量設定 Amazon ECS 日誌](firelens-docker-buffer-limit.md)。