새로운 Prometheus 스크레이프 대상을 추가하기 위한 튜토리얼: Amazon ECS의 Memcached - Amazon CloudWatch

새로운 Prometheus 스크레이프 대상을 추가하기 위한 튜토리얼: Amazon ECS의 Memcached

이 튜토리얼에서는 EC2 시작 유형의 Amazon ECS 클러스터에서 샘플 Memcached 애플리케이션의 Prometheus 지표를 스크레이프하는 실습을 소개합니다. CloudWatch 에이전트는 ECS 태스크 정의 기반 서비스 검색을 통해 Memcached Prometheus Exporter 대상을 자동 검색합니다.

Memcached는 범용 분산 메모리 캐싱 시스템으로, 흔히 외부 데이터 소스(예: 데이터베이스 또는 API)를 읽어야 하는 횟수를 줄이기 위해 RAM에 데이터 및 객체를 캐싱하여 동적 데이터베이스 기반 웹 사이트의 속도를 높이는 데 사용됩니다. 자세한 내용은 Memcached란 무엇입니까?를 참조하세요.

memchached_exporter(Apache 라이선스 2.0)는 공식 Prometheus Exporter 중 하나입니다. 기본적으로 memcache_exporter는 /metrics.의 포트 0.0.0.0:9150에서 제공됩니다.

이 튜토리얼에서는 다음과 같은 두 Docker Hub 리포지토리의 Docker 이미지를 사용합니다.

사전 조건

Amazon ECS의 Prometheus 워크로드 샘플에서 지표를 수집하려면 클러스터에서 Container Insights를 실행 중이어야 합니다. Container Insights 설치에 대한 자세한 내용은 Amazon ECS에서 Container Insights 설정 단원을 참조하세요.

Amazon ECS EC2 클러스터 환경 변수 설정

Amazon ECS EC2 클러스터 환경 변수를 설정하려면
  1. 아직 설치하지 않은 경우 Amazon ECS CLI를 설치합니다. 자세한 내용은 Amazon ECS CLI 설치 단원을 참조하세요.

  2. 새 Amazon ECS 클러스터 이름 및 리전을 설정합니다. 예:

    ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial AWS_DEFAULT_REGION=ca-central-1
  3. (선택 사항) 샘플 Memcached 워크로드 및 CloudWatch 에이전트를 설치하려는 EC2 시작 유형의 Amazon ECS 클러스터가 아직 없는 경우 다음 명령을 입력하여 클러스터를 생성할 수 있습니다.

    ecs-cli up --capability-iam --size 1 \ --instance-type t3.medium \ --cluster $ECS_CLUSTER_NAME \ --region $AWS_REGION

    이 명령의 예상 결과는 다음과 같습니다.

    WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=ecs-ec2-memcached-tutorial region=ca-central-1 INFO[0002] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0063] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0124] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Security Group created: sg-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.

샘플 Memcached 워크로드 설치

Prometheus 지표를 노출하는 샘플 Memcached 워크로드를 설치하려면
  1. 다음 명령을 입력하여 Memcached AWS CloudFormation 템플릿을 다운로드합니다.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml
  2. 다음 명령을 입력하여 Memcached용으로 생성할 IAM 역할 이름을 설정합니다.

    MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name
  3. 다음 명령을 입력하여 샘플 Memcached 워크로드를 설치합니다. 이 샘플은 host 네트워크 모드에서 워크로드를 설치합니다.

    MEMCACHED_ECS_NETWORK_MODE=host aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \ --template-body file://memcached-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION

AWS CloudFormation 스택은 다음과 같은 네 개의 리소스를 생성합니다.

  • ECS 태스크 역할 1개

  • ECS 태스크 실행 역할 1개

  • Memcached 태스크 정의 1개

  • Memcached 서비스 1개

Memcached 태스크 정의에서는 다음과 같이 두 컨테이너가 정의됩니다.

  • 기본 컨테이너는 단순한 Memcached 애플리케이션을 실행하고 액세스를 위해 포트 11211을 엽니다.

  • 다른 컨테이너에서는 Redis OSS 내보내기 도구 프로세스를 실행하여 포트 9150에서 Prometheus 지표를 노출합니다. 이는 CloudWatch 에이전트가 검색하고 스크레이프할 컨테이너입니다.

Memcached Prometheus 지표를 스크레이프하도록 CloudWatch 에이전트 구성

Memcached Prometheus 지표를 스크레이프하도록 CloudWatch 에이전트를 구성하려면
  1. 다음 명령을 입력하여 최신 버전의 cwagent-ecs-prometheus-metric-for-awsvpc.yaml을 다운로드합니다.

    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
  2. 텍스트 편집기를 사용하여 파일을 열고 resource:CWAgentConfigSSMParameter 섹션에서 value 키 뒤에 있는 전체 CloudWatch 에이전트 구성을 찾습니다.

    그런 다음, ecs_service_discovery 섹션에서 다음 구성을 task_definition_list 섹션에 추가합니다.

    { "sd_job_name": "ecs-memcached", "sd_metrics_ports": "9150", "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+" },

    metric_declaration 섹션의 경우 기본 설정은 어느 Memcached 지표도 허용하지 않습니다. Memcached 지표를 허용하려면 다음 섹션을 추가합니다. 이때 기존의 들여쓰기 패턴을 따라야 합니다.

    { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily"]], "metric_selectors": [ "^memcached_current_(bytes|items|connections)$", "^memcached_items_(reclaimed|evicted)_total$", "^memcached_(written|read)_bytes_total$", "^memcached_limit_bytes$", "^memcached_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]], "metric_selectors": [ "^memcached_commands_total$" ] },
  3. AWS CloudFormation에서 Amazon ECS 클러스터에 CloudWatch 에이전트를 이미 배포한 경우 다음 명령을 입력하여 변경 세트를 생성할 수 있습니다.

    ECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name aws cloudformation create-change-set --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_REGION \ --change-set-name memcached-scraping-support
  4. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  5. 새로 생성한 변경 세트인 memcached-scraping-support를 검토합니다. CWAgentConfigSSMParameter 리소스에 적용된 변경 사항 하나가 표시되어야 합니다. 변경 세트를 실행하고 다음 명령을 입력하여 CloudWatch 에이전트 태스크를 다시 시작합니다.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  6. 10초 정도 기다린 후 다음 명령을 입력합니다.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  7. 클러스터에 처음으로 Prometheus 지표 수집이 포함된 CloudWatch 에이전트를 설치하는 경우 다음 명령을 입력합니다.

    ECS_NETWORK_MODEE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name 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_REGION

Memcached 지표 보기

이 튜토리얼에서는 CloudWatch의 ECS/ContainerInsights/Prometheus 네임스페이스에 다음 지표를 전송합니다. CloudWatch 콘솔을 사용하여 해당 네임스페이스의 지표를 볼 수 있습니다.

지표 이름 측정기준

memcached_current_items

ClusterName, TaskDefinitionFamily

memcached_current_connections

ClusterName, TaskDefinitionFamily

memcached_limit_bytes

ClusterName, TaskDefinitionFamily

memcached_current_bytes

ClusterName, TaskDefinitionFamily

memcached_written_bytes_total

ClusterName, TaskDefinitionFamily

memcached_read_bytes_total

ClusterName, TaskDefinitionFamily

memcached_items_evicted_total

ClusterName, TaskDefinitionFamily

memcached_items_reclaimed_total

ClusterName, TaskDefinitionFamily

memcached_commands_total

ClusterName, TaskDefinitionFamily

ClusterName, TaskDefinitionFamily, 명령

ClusterName, TaskDefinitionFamily, 상태, 명령

참고

[명령(command)] 측정기준의 값은 delete, get, cas, set, decr, touch, incr 또는 flush일 수 있습니다.

[상태(status)] 측정기준의 값은 hit, miss 또는 badval일 수 있습니다.

또한 Memcached Prometheus 지표에 대한 CloudWatch 대시보드를 생성할 수도 있습니다.

Memcached Prometheus 지표에 대한 대시보드를 생성하려면
  1. 환경 변수를 만들어서 아래의 값을 배포와 일치하도록 바꿉니다.

    DASHBOARD_NAME=your_memcached_cw_dashboard_name ECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD
  2. 다음 명령을 입력하여 대시보드를 생성합니다.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \ | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \ | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body