本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
部署 CloudWatch 代理程式以收集 Amazon ECS 上的 EC2 執行個體層級指標
若要部署 CloudWatch 代理程式以從 EC2 執行個體託管之 Amazon ECS 叢集中收集執行個體層級指標,請使用具有預設組態的 Quick Start 設定,或手動安裝代理以便能自訂代理。
這兩種方法都需要您至少有一個已部署了 EC2 啟動類型的 Amazon ECS 叢集,並要求 CloudWatch 代理程式容器可以存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。如需有關 IMDS 的詳細資訊,請參閱執行個體中繼資料與使用者資料。
這些方法也假設您 AWS CLI 已安裝 。此外,若要執行下列程序中的命令,您必須登入具有 IAMFullAccess 和 AmazonECS_FullAccess 政策的帳戶或角色。
使用 快速設定 AWS CloudFormation
若要使用快速設定,請輸入下列命令以使用 AWS CloudFormation 來安裝代理程式。將 cluster-name
和 cluster-region
替換成您 Amazon ECS 叢集的名稱和區域。
此命令會建立 IAM 角色 CWAgentECSTaskRole 和 CWAgentECSExecutionRole。如果您的帳戶中已存在這些角色,請在輸入命令時改用 ParameterKey=CreateIAMRoles,ParameterValue=False
,而不是使用 ParameterKey=CreateIAMRoles,ParameterValue=True
。否則命令會失敗。
ClusterName=
cluster-name
Region=cluster-region
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \ --template-body file://cwagent-ecs-instance-metric-cfn.json \ --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \ ParameterKey=CreateIAMRoles,ParameterValue=True \ --capabilities CAPABILITY_NAMED_IAM \ --region ${Region}
(替代) 使用您自己的 IAM 角色
如果您想要使用自己自訂的 ECS 任務角色和 ECS 任務執行角色,不使用 CWAgentECSTaskRole 和 CWAgentECSExecutionRole 角色,請先確定要作為 ECS 任務角色使用的角色連接了 CloudWatchAgentServerPolicy。此外,亦請確定要作為 ECS 任務執行角色使用的角色同時連接了 CloudWatchAgentServerPolicy 和 AmazonECSTaskExecutionRolePolicy 政策。然後輸入下列命令。在命令中,以您自訂 ECS 任務角色的 ARN 取代 task-role-arn
,以您自訂 ECS 任務執行角色的 ARN 取代 execution-role-arn
。
ClusterName=
cluster-name
Region=cluster-region
TaskRoleArn=task-role-arn
ExecutionRoleArn=execution-role-arn
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \ --template-body file://cwagent-ecs-instance-metric-cfn.json \ --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \ ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \ ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${Region}
故障診斷快速設定
若要檢查 AWS CloudFormation 堆疊的狀態,請輸入下列命令。
ClusterName=
cluster-name
Region=cluster-region
aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region
如果您看到的 StackStatus
不是 CREATE_COMPLETE
或 CREATE_IN_PROGRESS
,請檢查堆疊事件以找出錯誤。輸入以下命令。
ClusterName=
cluster-name
Region=cluster-region
aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region
若要檢查 cwagent
常駐程式服務的狀態,請輸入以下命令。在輸出中,您應該會看到 runningCount
等於 deployment
區段的 desiredCount
。如果不相等,請檢查輸出的 failures
區段。
ClusterName=
cluster-name
Region=cluster-region
aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region
您也可以使用 CloudWatch Logs 主控台檢查代理程式日誌。尋找 /ecs/ecs-cwagent-daemon-service 日誌群組。
刪除 CloudWatch 代理程式的 AWS CloudFormation 堆疊
如果您需要刪除 AWS CloudFormation 堆疊,請輸入下列命令。
ClusterName=
cluster-name
Region=cluster-region
aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}
手動和自訂設定
依本節的步驟手動部署 CloudWatch 代理,以從 EC2 執行個體託管的 Amazon ECS 叢集中收集執行個體層級指標。
必要的 IAM 角色和政策
需要兩個 IAM 角色。如果角色不存在,即必須建立角色。如需這些角色的詳細資訊,請參閱 IAM 任務角色和 Amazon ECS 任務執行角色。
-
ECS 任務角色,CloudWatch 代理程式用來發佈指標的角色。如果此角色已經存在,您必須確定它連接了
CloudWatchAgentServerPolicy
政策。 -
ECS 任務執行角色,CloudWatch 代理用來啟動 Amazon ECS 代理程式的角色。如果此角色已經存在,您必須確定它連接了
AmazonECSTaskExecutionRolePolicy
和CloudWatchAgentServerPolicy
政策。
如果您尚未擁有這些角色,您可以使用下列命令建立它們並連接必要的政策。第一個命令會建立 ECS 任務角色。
aws iam create-role --role-name CWAgentECSTaskRole \ --assume-role-policy-document "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
輸入上一個命令後,請記下命令輸出中作為 "TaskRoleArn" 的 Arn
值。稍後建立任務定義時需要使用此值。然後輸入下列命令以連接必要的政策。
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-name CWAgentECSTaskRole
下一個命令會建立 ECS 任務執行角色。
aws iam create-role --role-name CWAgentECSExecutionRole \ --assume-role-policy-document "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"
輸入上一個命令後,請記下命令輸出中作為 "ExecutionRoleArn" 的 Arn
值。稍後建立任務定義時需要使用此值。然後輸入下列命令以連接必要的政策。
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-name CWAgentECSExecutionRole aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \ --role-name CWAgentECSExecutionRole
建立任務定義並啟動常駐程式服務
建立任務定義並用它啟動 CloudWatch 代理程式作為常駐程式服務。若要建立任務定義,請輸入下列命令。在前幾行中,將預留位置更換為您部署的實際值。logs-region
是 CloudWatch Logs 所在的區域,cluster-region
則是您叢集所在的區域。task-role-arn
是您所用之 ECS 任務角色的 Arn,execution-role-arn
則是 ECS 任務執行角色的 Arn。
TaskRoleArn=
task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \ | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \ | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
然後執行下列命令以啟動協助程式服務。將 cluster-name
和 cluster-region
替換成您 Amazon ECS 叢集的名稱和區域。
重要
執行此命令之前,請先移除所有容量提供者策略。否則,命令將無法運作。
ClusterName=
cluster-name
Region=cluster-region
aws ecs create-service \ --cluster ${ClusterName} \ --service-name cwagent-daemon-service \ --task-definition ecs-cwagent-daemon-service \ --scheduling-strategy DAEMON \ --region ${Region}
如果看到此錯誤訊息 An error occurred
(InvalidParameterException) when calling the CreateService operation: Creation of
service was not idempotent
,即表示您已經建立名為 cwagent-daemon-service
的協助程式服務。您必須使用下列命令作為範例,先刪除該服務。
ClusterName=
cluster-name
Region=cluster-region
aws ecs delete-service \ --cluster ${ClusterName} \ --service cwagent-daemon-service \ --region ${Region} \ --force
(選用) 進階組態
或者,您可以選擇使用 SSM 為 EC2 執行個體託管之 Amazon ECS 叢集中的 CloudWatch 代理程式,指定其他組態選項。選項如下:
-
metrics_collection_interval
– CloudWatch 代理程式收集指標的頻率 (秒)。預設為 60。範圍介於 1–172,000 之間。 -
endpoint_override
– (選用) 指定不同端點以傳送日誌。如果從 VPC 中的叢集發佈,且想要在 VPC 端點記錄資料,建議您這麼做。endpoint_override
的值必須是 URL 字串。 -
force_flush_interval
– 指定日誌在傳送到伺服器之前停留在記憶體緩衝區內的最長時間 (以秒為單位)。不論此欄位的設定如何,如果緩衝區中的日誌大小達到 1 MB,系統會立即將日誌傳送到伺服器。預設值為 5 秒。 -
region
– 根據預設,代理會將指標發佈至 Amazon ECS 容器執行個體所在的同一區域。若要覆寫此項目,您可在此指定不同的區域。例如"region" : "us-east-1"
以下是自訂組態的範例:
{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "ecs": { "metrics_collection_interval": 30 } }, "force_flush_interval": 5 } }
若要在 Amazon ECS 容器中自訂 CloudWatch 代理程式組態
-
確定 AmazonSSMReadOnlyAccess 政策已連接至您的 Amazon ECS 任務執行角色。您可以輸入以下命令來執行此操作。此範例假設您的 Amazon ECS 任務執行角色是 CWAgentECSExecutionRole。如果使用不同的角色,請更換下列命令中的角色名稱。
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
-
建立類似上述範例的自訂組態檔案。將此檔案命名為
/tmp/ecs-cwagent-daemon-config.json
。 -
執行下列命令,將此組態放入參數存放區。將
cluster-region
替換成您 Amazon ECS 叢集的區域。若要執行此命令,您必須登入具有 AmazonSSMFullAccess 政策的使用者或角色。Region=
cluster-region
aws ssm put-parameter \ --name "ecs-cwagent-daemon-service" \ --type "String" \ --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \ --region $Region -
將任務定義檔案下載至本機檔案,例如
/tmp/cwagent-ecs-instance-metric.json
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
-
修改任務定義檔案。移除以下區段:
"environment": [ { "name": "USE_DEFAULT_CONFIG", "value": "True" } ],
以下列內容取代該區段:
"secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent-daemon-service" } ],
-
依照下列步驟重新啟動代理作為協助程式服務:
-
執行下列命令。
TaskRoleArn=
task-role-arn
ExecutionRoleArn=execution-role-arn
AWSLogsRegion=logs-region
Region=cluster-region
cat /tmp/cwagent-ecs-instance-metric.json \ | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \ | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json -
執行下列命令以啟動協助程式服務。將
cluster-name
和cluster-region
替換成您 Amazon ECS 叢集的名稱和區域。ClusterName=
cluster-name
Region=cluster-region
aws ecs create-service \ --cluster ${ClusterName} \ --service-name cwagent-daemon-service \ --task-definition ecs-cwagent-daemon-service \ --scheduling-strategy DAEMON \ --region ${Region}如果看到此錯誤訊息
An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent
,即表示您已經建立名為cwagent-daemon-service
的協助程式服務。您必須使用下列命令作為範例,先刪除該服務。ClusterName=
cluster-name
Region=Region
aws ecs delete-service \ --cluster ${ClusterName} \ --service cwagent-daemon-service \ --region ${Region} \ --force
-