본문으로 건너뛰기

설치하기

와탭 Amazon ECS 모니터링은 META API 및 Cgroup 디렉터리를 통해 도커 컨테이너별 자원 사용량을 실시간으로 수집합니다. Amazon ECS API 연동 와탭 Task를 통해 Amazon ECS Service, Deployment, Container Instance의 상태를 조회 및 수집합니다.

와탭 에이전트를 설치하기 위해서 AWS 리소스 접근 권한이 필요합니다. 아래 권한을 먼저 확인해 주시기 바랍니다.

주의

권한

  • 스크립트 실행자

    • iam:CreateRole, iam:CreatePolicy, iam:AttachRolePolicy
    • ecs:RegisterTaskDefinition, ecs:CreateService
    • ecs:Describe*, ecs:List*
    • ec2:DescribeSubnets, ec2:DescribeSecurityGroups
  • ECS 태스크 역할 (WhatapEcsReadonly)

    • ecs:Describe*, ecs:List*

와탭 모니터링 서비스를 사용하기 위해서는 먼저 회원 가입 후 프로젝트를 생성해야 합니다. 회원 가입에 관한 자세한 내용은 다음 문서를 참조하세요.

프로젝트 생성하기

에이전트를 설치하기 전에 먼저 프로젝트를 생성하세요.

  1. 와탭 모니터링 서비스에 로그인합니다.

  2. 왼쪽 사이드 메뉴에서 전체 프로젝트 > + 프로젝트 버튼을 클릭합니다.

  3. 상품 선택 화면에서 설치할 제품을 선택합니다.

  4. 아래 항목을 입력하거나 선택합니다.

    • 프로젝트 이름: 프로젝트의 이름을 입력합니다.

    • 데이터 서버 지역: 데이터 서버가 위치한 리전을 선택합니다. 리전은 클라우드 서비스를 제공하는 데이터 센터의 묶음입니다. 선택한 리전에 사용자의 데이터가 저장됩니다.

    • 타임 존: 알림 및 보고서 생성 시 기준이 되는 시간을 설정합니다.

    • 알림 언어 설정: 경고 알림 메시지의 언어를 설정합니다. (한글, 영어 지원)

    • 프로젝트 그룹: 여러 프로젝트를 그룹으로 묶어 관리할 수 있습니다. 소속될 그룹이 있으면 선택하세요.

    • 프로젝트 설명: 프로젝트에 대한 추가 설명이나 세부 정보를 입력합니다.

  5. 모든 설정을 완료하면 프로젝트 생성하기 버튼을 클릭합니다.

노트

조직을 선택한 상태에서 프로젝트를 추가할 경우 조직 하위 그룹을 필수로 설정해야 합니다.

그룹에 대한 자세한 설명은 다음 문서를 참고하세요.

사전 점검 사항

  • AWS CLI

    설치 방법은 다음 문서를 참조하세요.

  • Amazon ECS CLI

    설치 방법은 다음 문서를 참조하세요.

  • Python 2.x / 3.x

    스크립트의 json 문서 분석을 위해 설치가 필요합니다.

노트
  • 설치에 쓰이는 와탭 이미지(whatap/ecs_mon)는 다운로드 후 사용자 레지스트리에 등록하고 사용하는 것을 권장합니다.
  • 와탭 서버로 데이터 전송하기 위해 6600 포트가 열려 있어야 합니다.

모니터링 대상

Amazon ECS의 Launch Type에 따라 아이템이 구분됩니다. 모니터링 대상은 Task, Service, Deployment, Container Instance입니다.

  • EC2 Launch Type: Task, Service, Deployment, Container Instance

    EC2 DAEMON

  • Fargate Launch Type: Task, Service, Deployment

    ECS Fargate Sidecar

다음의 모니터링 절차도 EC2 Launch Type 모니터링을 위한 절차와 Fargate Launch Type 모니터링을 위한 절차로 구분되어 진행됩니다.

노트

Amazon ECS launch types에 대한 자세한 설명은 다음 문서를 참조하세요.

모니터링 절차

ecs install

  • 설치 안내 섹션 number-s 탭의 안내를 참조해 와탭 Amazon ECS 에이전트를 전용 Task 혹은 Sidecar로 배포하세요.

  • 설치 안내 섹션 number-s 탭의 안내를 참조해 모니터링 서비스를 활성화해 모니터링 서비스를 시작하세요.

EC2 Launch Type

  1. 프로젝트를 생성하고 사전 점검 사항을 확인했다면 관리 > 에이전트 설치의 설치 안내 섹션으로 이동하세요.

  2. number-s Task 생성하기 탭에서 EC2 Launch Type을 선택하세요.

  3. 다음 스크립트를 실행해 DAEMON 타입 Task를 생성하세요. CLUSTER, REGION을 추가하고 ACCESSKEYWHATAP_HOST를 설정해 수집서버와 통신할 수 있게 합니다.

    Linux
    #!/usr/bin/env bash
    export ACCESSKEY=x4u5j20mdbj98-x3btmtjfhffmrc-z6ogidu7vm3shg
    export WHATAP_HOST=127.0.0.1
    export CLUSTER=xxxx
    export REGION=xxxx
    export LAUNCH_TYPE=EC2

    cat >whatap_ecs.json <<EOL
    { "containerDefinitions": [ {
    "name": "whatap-node-agent",
    "image": "whatap/ecs_mon",
    "cpu": 100,
    "memory": 50,
    "essential": true,
    "mountPoints": [{
    "containerPath": "/var/run/docker.sock",
    "sourceVolume": "docker_sock",
    "readOnly": true},{
    "containerPath": "/rootfs",
    "sourceVolume": "rootfs",
    "readOnly": true}],
    "environment": [{
    "name": "ACCESSKEY",
    "value": "$ACCESSKEY"
    },{
    "name": "WHATAP_HOST",
    "value": "$WHATAP_HOST"}
    ],
    "linuxParameters": {
    "capabilities": {
    "add": [
    "SYS_ADMIN",
    "SYS_RESOURCE",
    "SYS_PTRACE",
    "NET_ADMIN",
    "NET_BROADCAST",
    "NET_RAW",
    "IPC_LOCK",
    "CHOWN"]
    }}}],
    "requiresCompatibilities": ["EC2"],
    "volumes": [{
    "host": {"sourcePath": "/var/run/docker.sock"},
    "name": "docker_sock"},{
    "host": {"sourcePath": "/"},
    "name": "rootfs"}],
    "family": "whatap-agent-task"}

    EOL

    aws ecs register-task-definition \
    --cli-input-json file://$(pwd)/whatap_ecs.json \
    --region $REGION
    aws ecs create-service --cluster $CLUSTER \
    --service-name whatap-node-agent \
    --task-definition whatap-agent-task \
    --scheduling-strategy DAEMON \
    --launch-type $LAUNCH_TYPE \
    --region $REGION
    • 실행에 필요한 항목은 다음과 같습니다.

      • ACCESSKEY (와탭 프로젝트 Access Key)

      • WHATAP_HOST (와탭 수집 리전 IP)

      • REGION (AWS Region)

      • CLUSTER (ECS Cluster)

Fargate Launch Type

  1. 프로젝트를 생성하고 사전 점검 사항을 확인했다면 관리 > 에이전트 설치의 설치 안내 섹션으로 이동하세요.

  2. number-s Task 생성하기 탭에서 Fargate Launch Type을 선택하세요.

    • 스크립트를 실행하여 AWS ECS API READONLY IAM ROLE을 만듭니다.

      노트

      와탭 Task가 ECS Service를 조회하여 서비스 상태를 실시간 수집하는데 필요합니다.

    • 실행에 필요한 항목은 다음과 같습니다.

      • ACCESSKEY (와탭 프로젝트 Access Key)
      • WHATAP_HOST (와탭 수집 리전 IP, 복수 IP는 / 로 연결)
      • REGION (AWS Region)
      • PROFILE (ECS Profile)
      • CLUSTER (ECS Cluster)
      • CLUSTER_CONFIG (ECS Cluster Config)
      • TASK_EXECUTION_ROLE (와탭 에이전트 Task ECS Task 실행 역할)
      • SUBNET_1 (와탭 에이전트 Task SUBNET#1)
      • SUBNET_2 (와탭 에이전트 Task SUBNET#2)
      • SGGRP (와탭 에이전트 Task Security Group)
    • 다음 예시를 참조하세요.

      Linux
      #!/usr/bin/env bash
      export REGION=xxxxx
      export WHATAP_ECS_ROLE_READONLY=WhatapEcsReadonly
      export WHATAP_ECS_POLICY_READONLY=WhatapEcsReadonly
      cat >ecs_trust.json <<EOL
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
      "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
      }
      ]
      }
      EOL
      aws iam create-role --role-name $WHATAP_ECS_ROLE_READONLY --assume-role-policy-document file://ecs_trust.json | python -c 'import json,sys;print(json.load(sys.stdin)["Role"]["Arn"])' > role_arn.txt
      cat >ecs_readonly.json <<EOL
      {
      "Version": "2012-10-17",
      "Statement": [
      {
      "Effect": "Allow",
      "Action": [
      "ecs:Describe*",
      "ecs:List*"
      ],
      "Resource": [
      "*"
      ]
      }
      ]
      }
      EOL
      aws iam --region $REGION create-policy --policy-name $WHATAP_ECS_POLICY_READONLY \
      --policy-document file://ecs_readonly.json | python -c 'import json,sys;print(json.load(sys.stdin)["Policy"]["Arn"])' > policy_arn.txt
      export POLICY_ARN=$(cat policy_arn.txt)
      aws iam --region $REGION attach-role-policy --role-name $WHATAP_ECS_ROLE_READONLY \
      --policy-arn $POLICY_ARN
  3. 생성한 IAM ROLE을 탑재한 Whatap-Single 에이전트를 시작하세요. ECS API를 사용하여 Service 상태를 실시간 수집합니다.

    Linux
    #!/usr/bin/env bash
    export ACCESSKEY=xxxx-xxxx-xxxx
    export WHATAP_HOST=xxx.xxx.xxx
    export PROFILE=xxxxx
    export REGION=xxxxx
    export CLUSTER=xxxxx
    export CLUSTER_CONFIG=xxxx
    export TASK_EXECUTION_ROLE=xxxx
    export SUBNET_1=xxxx
    export SUBNET_2=xxxx
    export SGGRP=xxxx
    export WHATAP_ECS_ROLE_READONLY=WhatapEcsReadonly
    export PROJNAME=whatap-monitoring
    export LAUNCH_TYPE=FARGATE
    export WHATAP_ROLE_ARN=$(cat role_arn.txt)

    cat >docker-compose.yml <<EOL
    version: '3'
    services:
    whatap-ecs-agent:
    image: whatap/ecs_mon
    environment:
    - ACCESSKEY=$ACCESSKEY
    - WHATAP_HOST=$WHATAP_HOST
    - FARGATE_HELPER=true
    EOL

    cat >ecs-params.yml <<EOL
    version: 1
    task_definition:
    task_execution_role: $TASK_EXECUTION_ROLE
    task_role_arn: "$WHATAP_ROLE_ARN"
    ecs_network_mode: awsvpc
    task_size:
    mem_limit: 0.5GB
    cpu_limit: 256
    run_params:
    network_configuration:
    awsvpc_configuration:
    subnets:
    - "$SUBNET_1"
    - "$SUBNET_2"
    security_groups:
    - "$SGGRP"
    assign_public_ip: ENABLED
    EOL

    ecs-cli compose --project-name $PROJNAME service up \
    --cluster-config $CLUSTER_CONFIG \
    --ecs-profile $PROFILE --region $REGION
  4. 다음과 같이 최종 사용자 Task에 와탭 Sidecar 에이전트를 배포하세요. ACCESSKEYWHATAP_HOST를 환경 변수로 추가해 수집 서버와 통신할 수 있도록 합니다.

    Linux
    version: '3'
    services:
    xxxxx:
    image: xxxx
    ports:
    - "xx:xx"
    ...
    whatap-ecs-agent:
    image: whatap/ecs_mon
    environment:
    - ACCESSKEY=
    - WHATAP_HOST=

모니터링 서비스 활성화

number-s 모니터링 시작하기 탭에서 모니터링 서비스 활성화 버튼을 선택해 모니터링 서비스를 시작하세요.

  • 모니터링 서비스 활성화 가능

    모니터링 활성화

  • 모니터링 서비스 활성화 불가

    모니터링 활성화 불가

제거 시 주의 사항

완전한 비용 발생 방지를 위해서는 다음 항목을 삭제하세요.

  • ECS Service: whatap-ecs-agent

  • Task Sidecar: whatap-ecs-agent

  • Role: WhatapEcsReadonly