Amazon ECS 클러스터에 Prometheus 지표 수집과 함께 CloudWatch 에이전트 설치 - Amazon CloudWatch

Amazon ECS 클러스터에 Prometheus 지표 수집과 함께 CloudWatch 에이전트 설치

이 단원에서는 Amazon ECS를 실행 중인 클러스터에서 Prometheus 모니터링이 포함된 CloudWatch 에이전트를 설정하는 방법을 설명합니다. 이렇게 에이전트를 설정하면 에이전트가 해당 클러스터에서 실행 중인 다음 워크로드에 대한 지표를 자동으로 스크레이프하고 가져옵니다.

  • AWS App Mesh

  • Java/JMX

추가 Prometheus 워크로드 및 소스에서 지표를 스크레이프하고 가져오도록 에이전트를 구성할 수도 있습니다.

IAM 역할 설정

CloudWatch 에이전트 태스크 정의의 두 IAM 역할이 필요합니다. Container Insights가 이러한 역할을 자동으로 생성하도록 AWS CloudFormation 스택에서 CreateIAMRoles=True를 지정하면 올바른 권한을 가진 역할이 생성됩니다. 역할을 직접 생성하거나 기존 역할을 사용하려는 경우 다음 역할 및 권한이 필요합니다.

  • CloudWatch 에이전트 ECS 태스크 역할 - CloudWatch 에이전트 컨테이너는 이 역할을 사용합니다. 여기에는 CloudWatchAgentServerPolicy 정책 및 다음과 같은 읽기 전용 권한을 포함하는 고객 관리형 정책이 포함되어야 합니다.

    • ec2:DescribeInstances

    • ecs:ListTasks

    • ecs:ListServices

    • ecs:DescribeContainerInstances

    • ecs:DescribeServices

    • ecs:DescribeTasks

    • ecs:DescribeTaskDefinition

  • CloudWatch 에이전트 ECS 태스크 실행 역할 - Amazon ECS가 컨테이너를 시작하고 실행하는 데 필요한 역할입니다. 태스크 실행 역할에 AmazonSSMReadOnlyAccess, AmazonECSTaskExecutionRolePolicyCloudWatchAgentServerPolicy 정책이 연결되어 있는지 확인합니다. Amazon ECS에서 사용할 더 민감한 데이터를 저장하려는 경우 민감한 데이터 지정 단원을 참조하세요.

AWS CloudFormation을 사용하여 Prometheus 모니터링이 포함된 CloudWatch 에이전트 설치

AWS CloudFormation을 사용하여 Amazon ECS 클러스터에 대해 Prometheus 모니터링이 포함된 CloudWatch 에이전트를 설치합니다. 다음 목록에는 AWS CloudFormation 템플릿에서 사용할 파라미터가 나와 있습니다.

  • ECSClusterName - 대상 Amazon ECS 클러스터를 지정합니다.

  • CreateIAMRoles - Amazon ECS 태스크 역할 및 Amazon ECS 태스크 실행 역할의 새 역할을 생성하려면 True를 지정합니다. 기존 역할을 재사용하려면 False를 지정합니다.

  • TaskRoleName - CreateIAMRoles에서 True를 지정한 경우 이 파라미터는 새 Amazon ECS 태스크 역할에 사용할 이름을 지정합니다. CreateIAMRoles에서 False를 지정한 경우 이 파라미터는 Amazon ECS 태스크 역할로 사용할 기존 역할을 지정합니다.

  • ExecutionRoleName - CreateIAMRoles에서 True를 지정한 경우 이 파라미터는 새 Amazon ECS 태스크 실행 역할에 사용할 이름을 지정합니다. CreateIAMRoles에서 False를 지정한 경우 이 파라미터는 Amazon ECS 태스크 실행 역할로 사용할 기존 역할을 지정합니다.

  • ECSNetworkMode - EC2 시작 유형을 사용하는 경우 여기에서 네트워크 모드를 지정합니다. bridge 또는 host여야 합니다.

  • ECSLaunchType - fargate 또는 EC2를 지정합니다.

  • SecurityGroupID - ECSNetworkModeawsvpc인 경우 여기에서 보안 그룹 ID를 지정합니다.

  • SubnetID - ECSNetworkModeawsvpc인 경우 여기에서 서브넷 ID를 지정합니다.

샘플 명령

이 단원에는 다양한 시나리오에서 Prometheus 모니터링과 함께 Container Insights를 설치하기 위한 샘플 AWS CloudFormation 명령이 포함되어 있습니다.

브리지 네트워크 모드에서 Amazon ECS 클러스터의 AWS CloudFormation 스택 생성

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_NETWORK_MODE=bridge export CREATE_IAM_ROLES=True export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

호스트 네트워크 모드에서 Amazon ECS 클러스터의 AWS CloudFormation 스택 생성

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_NETWORK_MODE=host export CREATE_IAM_ROLES=True export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSNetworkMode,ParameterValue=${ECS_NETWORK_MODE} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

awsvpc 네트워크 모드에서 Amazon ECS 클러스터의 AWS CloudFormation 스택 생성

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_LAUNCH_TYPE=EC2 export CREATE_IAM_ROLES=True export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \ ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \ ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

awsvpc 네트워크 모드에서 Fargate 클러스터의 AWS CloudFormation 스택 생성

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export ECS_CLUSTER_NAME=your_ec2_ecs_cluster_name export ECS_LAUNCH_TYPE=FARGATE export CREATE_IAM_ROLES=True export ECS_CLUSTER_SECURITY_GROUP=your_security_group_eg_sg-xxxxxxxxxx export ECS_CLUSTER_SUBNET=your_subnet_eg_subnet-xxxxxxxxxx export ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name export ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml aws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-${ECS_LAUNCH_TYPE}-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=${ECS_CLUSTER_NAME} \ ParameterKey=CreateIAMRoles,ParameterValue=${CREATE_IAM_ROLES} \ ParameterKey=ECSLaunchType,ParameterValue=${ECS_LAUNCH_TYPE} \ ParameterKey=SecurityGroupID,ParameterValue=${ECS_CLUSTER_SECURITY_GROUP} \ ParameterKey=SubnetID,ParameterValue=${ECS_CLUSTER_SUBNET} \ ParameterKey=TaskRoleName,ParameterValue=${ECS_TASK_ROLE_NAME} \ ParameterKey=ExecutionRoleName,ParameterValue=${ECS_EXECUTION_ROLE_NAME} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}

AWS CloudFormation 스택에서 생성한 AWS 리소스

다음 표에는 AWS CloudFormation을 사용하여 Amazon ECS 클러스터에서 Prometheus 모니터링과 함께 Container Insights를 설정할 때 생성되는 AWS 리소스가 나와 있습니다.

리소스 유형 리소스 이름 설명

AWS::SSM::Parameter

AmazonCloudWatch-CWAgentConfig-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

이 리소스는 기본 App Mesh 및 Java/JMX 임베디드 지표 형식 정의가 있는 CloudWatch 에이전트입니다.

AWS::SSM::Parameter

AmazonCloudWatch-PrometheusConfigName-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

이 리소스는 Prometheus 스크레이핑 구성입니다.

AWS::IAM::Role

$ECS_TASK_ROLE_NAME.

Amazon ECS 태스크 역할입니다. CREATE_IAM_ROLES에서 True를 지정한 경우에만 생성됩니다.

AWS::IAM::Role

${ECS_EXECUTION_ROLE_NAME}

Amazon ECS 태스크 실행 역할입니다. CREATE_IAM_ROLES에서 True를 지정한 경우에만 생성됩니다.

AWS::ECS::TaskDefinition

cwagent-prometheus-$ECS_CLUSTER_NAME-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

AWS::ECS::Service

cwagent-prometheus-replica-service-$ECS_LAUNCH_TYPE-$ECS_NETWORK_MODE

Prometheus 모니터링이 포함된 CloudWatch 에이전트의 AWS CloudFormation 스택 삭제

Amazon ECS 클러스터에서 CloudWatch 에이전트를 삭제하려면 다음 명령을 입력합니다.

export AWS_PROFILE=your_aws_config_profile_eg_default export AWS_DEFAULT_REGION=your_aws_region_eg_ap-southeast-1 export CLOUDFORMATION_STACK_NAME=your_cloudformation_stack_name aws cloudformation delete-stack \ --stack-name ${CLOUDFORMATION_STACK_NAME} \ --region ${AWS_DEFAULT_REGION} \ --profile ${AWS_PROFILE}