EC2 메모리/디스크 용량 모니터링

Singsoong·2022년 8월 31일
0

AWS

목록 보기
8/13
  • 목적 : 기본적으로 EC2 모니터링 지표로 CPU 사용률, 네트워크 입출력 등은 나오지만 메모리와 디스크 용량 지표는 제공되지 않는다. 메모리, 디스크 용량의 로그를 기록하며 모니터링 할 수 있게 한다.
  • 주의사항 : 이 작업은 설정에 따라 굉장히 많은 요금이 부과될 수 있음을 확인해야 한다.

    요금 : https://aws.amazon.com/ko/cloudwatch/pricing/


📌 IAM 권한 부여

  • 적용하고자 하는 EC2의 IAM 권한을 부여해야 한다.

  • 필요한 권한은 AmazonEC2FullAccess, AmazonEC2RoleforSSM과 커스텀으로 추가해줄 allow-get-parameter이다.

  • allow-get-parameter는 권한 추가 > 인라인 정책 생성을 통해 만든다.

  • 서비스는 System Manager로 선택하고 액세스 레벨>읽기에서 GetParameter와 GetParmeters 두가지를 선택해주고 정책 검토를 누른다.

  • 리소스는 모든 리소스 (혹은 선택) 선택 후 정책 이름을 allow-get-parameters로 설정했다.


📌 파라미터 생성

  • 시스템 매니저 > 파라미터 스토어 > 파라미터 생성
  • 파라미터 이름을 설정하고 값에 하단의 코드내용을 넣는다
{
  "agent": {
    "metrics_collection_interval": 10,
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  },
  "metrics": {
    "namespace": "MyEc2InstanceMetric",
    "metrics_collected": {
      "cpu": {
        "resources": [
          "*"
        ],
        "measurement": [
          {
            "name": "cpu_usage_idle",
            "rename": "CPU_USAGE_IDLE",
            "unit": "Percent"
          },
          {
            "name": "cpu_usage_nice",
            "unit": "Percent"
          },
          "cpu_usage_guest"
        ],
        "totalcpu": false,
        "metrics_collection_interval": 10,
        "append_dimensions": {
          "customized_dimension_key_1": "customized_dimension_value_1",
          "customized_dimension_key_2": "customized_dimension_value_2"
        }
      },
      "disk": {
        "resources": [
          "/",
          "/tmp"
        ],
        "measurement": [
          {
            "name": "free",
            "rename": "DISK_FREE",
            "unit": "Gigabytes"
          },
          "total",
          "used"
        ],
        "ignore_file_system_types": [
          "sysfs",
          "devtmpfs"
        ],
        "metrics_collection_interval": 60,
        "append_dimensions": {
          "customized_dimension_key_3": "customized_dimension_value_3",
          "customized_dimension_key_4": "customized_dimension_value_4"
        }
      },
      "diskio": {
        "resources": [
          "*"
        ],
        "measurement": [
          "reads",
          "writes",
          "read_time",
          "write_time",
          "io_time"
        ],
        "metrics_collection_interval": 60
      },
      "swap": {
        "measurement": [
          "swap_used",
          "swap_free",
          "swap_used_percent"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used",
          "mem_cached",
          "mem_total"
        ],
        "metrics_collection_interval": 1
      },
      "net": {
        "resources": [
          "eth0"
        ],
        "measurement": [
          "bytes_sent",
          "bytes_recv",
          "drop_in",
          "drop_out"
        ]
      },
      "netstat": {
        "measurement": [
          "tcp_established",
          "tcp_syn_sent",
          "tcp_close"
        ],
        "metrics_collection_interval": 60
      },
      "processes": {
        "measurement": [
          "running",
          "sleeping",
          "dead"
        ]
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions": [
      [
        "ImageId"
      ],
      [
        "InstanceId",
        "InstanceType"
      ],
      [
        "d1"
      ],
      []
    ],
    "force_flush_interval": 30
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
            "log_group_name": "MyEc2InstanceAgentLog.log",
            "log_stream_name": "MyEc2InstanceAgentLog.log",
            "timezone": "LOCAL"
          }
        ]
      }
    },
    "log_stream_name": "my_log_stream_name",
    "force_flush_interval": 15
  }
}
  • 과금을 발생시키는 요소가 로그의 주기인데 이 주기를 설정하고 싶다면 코드 내 Interval 값을 조절하면 된다. (Interval을 길게 할수록 과금이 적게 된다.)

📌 CloudWatchAgent 설치

  • 각 EC2에 CloudWatchAgent를 설치해야 한다.
  • 시스템매니저 > 명령실행 > 명령실행 > AWS-ConfigureAWSPackage 검색 후 선택
  • 명령 실행을 누르고 Name에 AmazonCloudWatchAgent를 입력하고 수동으로 설치할 인스턴스를 선택
  • 이후 실행 버튼을 누르고 새로고침을 하여 상태가 성공임을 확인

📌 CloudWatch 설정

  • 시스템매니저 > 명령실행 > 명령실행 > AmazonCloudWatch-ManageAgent 선택
  • 명령 실행 후 Optional Configuration Location 에 생성한 파라미터의 이름을 입력 후 실행
  • 상태에 진행중 → 성공을 확인

📌 모니터링(지표) 확인

  • CloudWatch > 지표 > 모든 지표 > Metric 클릭

  • InstanceId, InstanceType 클릭

  • 원하는 인스턴스의 이름을 확인하고 확인할 지표를 클릭

  • DISK_FREE : 남은 디스크 용량

  • mem_used : 메모리 사용량

  • 이런식으로 디스크 남은용량을 확인할 수 있다.


📌 명령 취소 (롤백)


참고한 유튜브 : https://www.youtube.com/watch?v=iBhCghmwh3w

profile
Web Developer

0개의 댓글