1. AWS CloudWatch

1-1. 모니터링의 목적, 영역

모니터링의 목적은 "안정적인 서비스 운영"이다. 고객에게 신뢰를 얻기 위해 큰 장애가 발생하기 전에 미리 징후를 찾아 예방하고, 장애가 발생하더라도 바로 원인을 파악하고 고쳐야 한다.

모니터링의 영역은 다음과 같이 구분할 수 있다.

  • 인프라에 대한 모니터링 : 어플리케이션이 실행되고 있는 인프라에 장애가 발생하거나 징후가 있지는 않은지 파악
  • 클라이언트의 요청에 대한 모니터링 : 클라이언트에서 의도한 대로 올바른 요청을 보내고 있는지, 공격 시도가 들어 오지는 않는지, 얼마만큼의 요청량을 보내고 있는지 파악
  • 어플리케이션에 대한 모니터링 : 작성하고 배포한 코드가 예상했던 대로 동작하고 있는지, 어플리케이션의 어떤 부분이 병목 되어 성능 저하를 일으키는지 파악
  • 데이터에 대한 모니터링 : 의도한 대로 데이터가 올바른 형태로 쌓이고 있는지, 서비스가 운영되면서 쌓이는 데이터들이 어떤 속도로 쌓이고 있는지 파악

 

1-2. CloudWatch 지표

CloudWatch의 지표는 '언제' 어떤 '항목'의 '값'이 무엇이었는지를 기록한 값으로 AWS 내의 대부분의 서비스 이력은 이 지표로 기록 된다.

예를 들어 EC2 인스턴스의 CPU 사용량, 네트워크 전송량. Auto Scaling 그룹이 관리하는 인스턴스 수 등의 값들이 지표로 남는다. 이런 값들은 별도로 설정하지 않아도 서비스를 사용하기만 하면 AWS에서 자동으로 기록해 준다.(Auto Scaling도 이런 지표를 참고하여 서비스가 되고 있다)

이렇게 기본적으로 제공하는 지표 외로 사용자가 지정한 지표를 직접 기록할 수도 있다.

지표는 다음과 같은 항목으로 구성된다.

  • 네임스페이스 : 비슷한 지표들을 모아두기 위해 사용하는 네임스페이스. 예를 들어 Auto Scaling 그룹, ALB 같은 항목들이 네임스페이스가 될 수 있음.
  • 이름 : 지표의 이름. 예를 들어 인스턴스 수, CPU 사용률과 같은 항목들이 이름이 될 수 있음.
  • 차원 : 지표를 더욱 쉽게 분류하기 위한 값. 키/값 쌍을 최대 10개 등록할 수 있으며, 같은 차원으로 표시된 지표만 따로 모아서 볼 수 있음. 예를 들어 Auto Scaling 그룹 내 존재하는 모든 인스턴스의 CPU 지표를 종합해서 확인하고 싶다면 인스턴스의 CPU 지표를 기록할 때 Auto Scaling 그룹의 이름으로 차원을 지정해서 기록하면 됨. 하나의 지표에 여러 종류의 차원으로 보고 싶다면 같은 지표를 여러 번 기록하면 됨.
  • 시간 : 지표로 기록할 값이 발생한 시간.
  • 값 : 지표로 기록할 값.
  • 단위 : 지표로 기록할 값의 단위. 초, 수, KB/s등 다양한 단위를 지원.

지표의 요금은 https://aws.amazon.com/ko/cloudwatch/pricing/?nc1=h_ls 에서 확인할 수 있다.

 

2. 실습 - CloudWatch

2-1. CloudWatch 사용자 지정 지표 기록

* 실습을 진행하기에 앞서, IAM 서비스로 가서 전 단계에서 생성했던 유저(새로 생성해도 무관)에 [CloudWatchEventFullAccess] 정책을 추가하고 진행한다.

 ([cloudwatch:PutMetricData] 정책주기 위함.)

1. [EC2 인스턴스] 서비스에서 exercise-instance를 기동

2. 인스턴스에 접속

3. 테스트를 위한 디렉터리 생성

cd /sorc001
mkdir cloudwatch-custom
cd cloudwatch-custom

4. CloudWatch에 기록할 지표 데이터 파일을 생성

vi test_data.json

###이하 내용으로 입력###
[
  {
    "MetricName": "People",
    "Dimensions": [{ "Name": "Gender", "Value": "All" }],
    "Timestamp": "2019-12-01T14:00:00.000+09:00",
    "Value": 20,
    "Unit": "Count"
  },
  {
    "MetricName": "People",
    "Dimensions": [{ "Name": "Gender", "Value": "All" }],
    "Timestamp": "2019-12-02T15:00:00.000+09:00",
    "Value": 24,
    "Unit": "Count"
  },
  {
    "MetricName": "People",
    "Dimensions": [{ "Name": "Gender", "Value": "All" }],
    "Timestamp": "2019-12-02T16:00:00.000+09:00",
    "Value": 30,
    "Unit": "Count"
  },
  {
    "MetricName": "People",
    "Dimensions": [{ "Name": "Gender", "Value": "All" }],
    "Timestamp": "2019-12-02T17:00:00.000+09:00",
    "Value": 23,
    "Unit": "Count"
  }
]

-. CloudWatch에서는 최근 2주 이내의 시간에 발생한 시표만 받아주기 때문에 Timestamp에 있는 시간은 진행하는 시간의 2주 이내 시간으로 변경.

-. 보통은 지표를 매시간 바로바로 기록하지만, 위 예시처럼 4개를 한번에 보내느 것도 가능.

-. 지표의 이름은 People, 차원은 "키: 성별, 값: 모두"로 설정된 차원 하나만 적용.

5. AWS CLI를 사용해 지표를 기록

aws cloudwatch put-metric-data --namespace "Exercise People" --metric-data file://test_data.json

6. 생성한 지표 확인

[CloudWatch 서비스로 이동] -> 지표 확인

* 테스트를 하다보니 네임스페이스가 Exercise People3가 되었습니다. 참고하시기 바랍니다.

7. 실습에서 사용한 디렉터리 삭제

cd /sorc001
rm -rf cloudwatch-custom