本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
部署 CloudWatch 代理程式以在 Amazon 上收集EC2執行個體層級指標 ECS
若要部署 CloudWatch 代理程式以從執行個EC2體上託管的 Amazon ECS 叢集收集執行個體層級指標,請使用具有預設組態的快速入門設定,或手動安裝代理程式以便能夠進行自訂。
這兩種方法都要求您至少已部署一個具有EC2啟動類型的 Amazon ECS 叢集,而且 CloudWatch 代理程式 Continer 必須能夠存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。如需詳細資訊IMDS,請參閱執行個體中繼資料和使用者資料。
這些方法也假設您已 AWS CLI 安裝。此外,若要在下列程序中執行命令,您必須登入具有IAMFullAccess和 Amazon ECS _ FullAccess 政策的帳戶或角色。
快速設置使用 AWS CloudFormation
若要使用快速設定,請輸入下列命令以用 AWS CloudFormation 來安裝代理程式。Replace (取代) 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角色,請先確定已CloudWatchAgentServerPolicy附加作為ECS任務角色使用的角色。此外,請確定要用ECS作工作執行角色的角色同時附加了CloudWatchAgentServerPolicy和 A mazonECSTask ExecutionRolePolicy 原則。然後輸入下列命令。在命令中,替換 task-role-arn
與您ARN的自定義ECS任務角色,並替換 execution-role-arn
與您ARN的自定義ECS任務執行角色。
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 記錄主控台來檢查代理程式記錄檔。尋找 /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任務執行角色,Amazon ECS 代理程式會使用此角色來啟動 CloudWatch 代理程式。如果此角色已經存在,您必須確定它連接了
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\"}]}"
輸入上一個命令後,請將命令輸出Arn
中的值記下為 "TaskRoleArn」。稍後建立任務定義時需要使用此值。然後輸入下列命令以連接必要的政策。
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\"}]}"
輸入上一個命令後,請將命令輸出Arn
中的值記下為 "ExecutionRoleArn」。稍後建立任務定義時需要使用此值。然後輸入下列命令以連接必要的政策。
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 日誌所在的區域,以及 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
然後執行下列命令以啟動協助程式服務。Replace (取代) 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 代理程式組態
-
確保 A mazonSSMRead OnlyAccess 政策已附加到您的 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
。 -
執行下列命令,將此組態放入參數存放區。Replace (取代)
cluster-region
與您的 Amazon ECS 集群的區域。若要執行此命令,您必須登入具有 A mazonSSMFullAccess 原則的使用者或角色。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 -
執行下列命令以啟動協助程式服務。Replace (取代)
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
-