將應用程式指標匯出至 Amazon CloudWatch - Amazon Elastic Container Service

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

將應用程式指標匯出至 Amazon CloudWatch

Amazon ECS on Fargate 支援將您的自訂應用程式指標匯出至 Amazon CloudWatch 作為自訂指標。方法是將 OpenTelemetry Sidecar AWS 容器的 Distro 新增至您的任務定義。Amazon ECS主控台會在建立新的任務定義時新增使用指標集合選項,以簡化此程序。如需詳細資訊,請參閱使用主控台建立 Amazon ECS任務定義

應用程式指標會匯出至具有 CloudWatch 日誌群組名稱的日誌,/aws/ecs/application/metrics並且可以在ECS/AWSOTel/Application命名空間中檢視指標。您的應用程式必須使用 進行測試 OpenTelemetry SDK。如需詳細資訊,請參閱 AWS Distro 中的 Distro for 簡介 OpenTelemetry文件 OpenTelemetry 。 AWS

考量事項

使用 Amazon ECS on Fargate 與 AWS Distro for 整合 OpenTelemetry ,將應用程式指標傳送至 Amazon 時,應考慮下列事項 CloudWatch。

  • 此整合只會將自訂應用程式指標傳送至 CloudWatch。如果您想要任務層級指標,您可以在 Amazon ECS叢集組態中開啟 Container Insights。如需詳細資訊,請參閱使用 ECS Container Insights 監控 Amazon 容器

  • Amazon ECS執行個體上託管於 Fargate 上的 Amazon 工作負載和託管於 Amazon EC2執行個體上的 Amazon ECS工作負載支援用於 OpenTelemetry 整合的 AWS Distro。目前不支援外部執行個體。

  • CloudWatch 支援每個指標最多 30 個維度。依預設,Amazon 預設會將 TaskARNClusterARNLaunchTypeTaskDefinitionFamilyTaskDefinitionRevision維度ECS納入指標。其餘 25 個維度可由您的應用程式定義。如果設定超過 30 個維度, CloudWatch 則無法顯示。發生這種情況時,應用程式指標會顯示在ECS/AWSOTel/Application CloudWatch 指標命名空間中,但沒有任何維度。您可以檢測應用程式以增加其他維度。如需詳細資訊,請參閱在 Distro 中使用 CloudWatch 指標搭配 AWS Distro for OpenTelemetry 文件 OpenTelemetry 。 AWS

AWS Distro 與 Amazon OpenTelemetry 整合所需的IAM許可 CloudWatch

Amazon 與 AWS Distro for 的ECS整合 OpenTelemetry 需要您建立任務IAM角色,並在任務定義中指定角色。建議您也設定 AWS Distro for OpenTelemetry sidecar,將容器日誌路由至 Logs,該 CloudWatch 日誌也需要在您的任務定義中建立和指定任務執行IAM角色。Amazon ECS主控台會代表您處理任務執行IAM角色,但任務IAM角色必須手動建立並新增至您的任務定義。如需任務執行IAM角色的詳細資訊,請參閱 Amazon ECS任務執行IAM角色

重要

如果您也使用 AWS Distro 收集應用程式追蹤資料以進行 OpenTelemetry 整合,請確定您的任務IAM角色也包含該整合所需的許可。如需詳細資訊,請參閱使用應用程式追蹤資料識別 Amazon ECS最佳化機會

如果您的應用程式需要任何其他許可,則應將其新增到此政策中。每個任務定義只能指定一個任務IAM角色。例如,如果您使用的是儲存在 Systems Manager 中的自訂組態檔案,您應該將 ssm:GetParameters 許可新增至此IAM政策。

建立 Elastic Container Service 的服務角色 (IAM 主控台)
  1. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在IAM主控台的導覽窗格中,選擇角色 ,然後選擇建立角色

  3. 對於 Trusted entity type (信任的實體類型),請選擇 AWS 服務

  4. 針對服務或使用案例 ,選擇彈性容器服務 ,然後選擇彈性容器服務任務使用案例。

  5. 選擇 Next (下一步)

  6. 新增許可區段中,搜尋 AWSDistroOpenTelemetryPolicyForXray,然後選擇政策。

  7. (選用) 設定許可界限。這是進階功能,可用於服務角色,而不是服務連結的角色。

    1. 開啟設定許可界限區段,然後選擇使用許可界限來控制最大角色許可

      IAM 包含您帳戶中受 AWS 管和客戶受管政策的清單。

    2. 選取用於許可界限的政策。

  8. 選擇 Next (下一步)

  9. 輸入角色名稱或角色名稱尾碼,以協助您識別角色的目的。

    重要

    當您命名角色時,請注意下列事項:

    • 角色名稱在您的 中必須是唯一的 AWS 帳戶,且無法依大小寫設為唯一。

      例如,請勿建立名為 PRODROLE和 的角色prodrole。當角色名稱用於政策或 的一部分時ARN,角色名稱區分大小寫,但是當角色名稱出現在主控台中的客戶時,例如在登入過程中,角色名稱區分大小寫。

    • 您無法在建立角色之後編輯角色的名稱,因為其他實體可能會參考角色。

  10. (選用) 針對描述 ,輸入角色的描述。

  11. (選用) 若要編輯角色的使用案例和許可,請在步驟 1:選取信任的實體步驟 2:新增許可區段中,選擇編輯

  12. (選用) 若要協助識別、組織或搜尋角色,請將標籤新增為鍵值對。如需在 中使用標籤的詳細資訊IAM,請參閱 IAM 使用者指南 中的標記IAM資源

  13. 檢閱角色,然後選擇 Create role (建立角色)。

在任務定義中指定 OpenTelemetry Sidecar AWS 的 Distro

Amazon ECS主控台使用使用指標收集選項,簡化為 OpenTelemetry Sidecar 容器建立 AWS Distro 的體驗。如需詳細資訊,請參閱使用主控台建立 Amazon ECS任務定義

如果您不使用 Amazon ECS主控台,則可以手動將 Distro for OpenTelemetry Sidecar AWS 容器新增至任務定義。下列任務定義範例顯示為 Amazon CloudWatch 整合新增 OpenTelemetry 旁路 AWS 專用 Distro 的容器定義。

{ "family": "otel-using-cloudwatch", "taskRoleArn": "arn:aws:iam::111122223333:role/AmazonECS_OpenTelemetryCloudWatchRole", "executionRoleArn": "arn:aws:iam::111122223333:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "aws-otel-emitter", "image": "application-image", "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/aws-otel-emitter", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "dependsOn": [{ "containerName": "aws-otel-collector", "condition": "START" }] }, { "name": "aws-otel-collector", "image": "public.ecr.aws/aws-observability/aws-otel-collector:v0.30.0", "essential": true, "command": [ "--config=/etc/ecs/ecs-cloudwatch.yaml" ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "True", "awslogs-group": "/ecs/ecs-aws-otel-sidecar-collector", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } } } ], "networkMode": "awsvpc", "requiresCompatibilities": [ "FARGATE" ], "cpu": "1024", "memory": "3072" }