EC2 Linux 인스턴스에서 CloudWatch로 사용자 지정 지표를 푸시하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 8월 22일

Amazon Elastic Compute Cloud(EC2) Linux 인스턴스의 OS 지표 및 성능 카운터를 모니터링하려고 합니다. Amazon CloudWatch를 사용하여 이 작업을 수행하려면 어떻게 해야 합니까?

간략한 설명

AWS CLI(AWS 명령줄 인터페이스)를 통해 스크립트를 작성하여 EC2 Linux 인스턴스 통계에 대한 사용자 지정 CloudWatch 지표를 생성할 수 있습니다. 그런 다음 CloudWatch로 푸시하여 해당 지표를 모니터링할 수 있습니다.

​해결 방법

계속하기 전에, 모니터링하려는 인스턴스에 사용할 AWS CLI를 설치하고 구성해야 합니다.

사용자 지정 CloudWatch 지표 생성

사용자 지정 지표를 생성하려면 다음과 같이 합니다.

1. AWS CLI를 통해 인스턴스에 로그인합니다.

2. 다음 bash 스크립트를 복사한 후 인스턴스에 저장합니다(예: mem.sh).

이 예제 스크립트는 CloudWatch에 게시할 수 있는 값을 보여줍니다. 이 예제에서는 put-metric-data API 호출을 사용하여 다음 값을 CloudWatch로 푸시합니다.

  • 사용된 메모리의 비율(USEDMEMORY)
  • 총 연결 수(TCP_CONN)
  • 포트 80의 TCP 연결 수(TCP_CONN_PORT_80)
  • 현재 로그인한 사용자 수(USERS)
  • I/O 대기 시간 비율(IO_WAIT)
========Sample script======
#!/bin/bash
USEDMEMORY=$(free -m | awk 'NR==2{printf "%.2f\t", $3*100/$2 }')
TCP_CONN=$(netstat -an | wc -l)
TCP_CONN_PORT_80=$(netstat -an | grep 80 | wc -l)
USERS=$(uptime |awk '{ print $6 }')
IO_WAIT=$(iostat | awk 'NR==4 {print $5}')
 
aws cloudwatch put-metric-data --metric-name memory-usage --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USEDMEMORY
aws cloudwatch put-metric-data --metric-name Tcp_connections --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN
aws cloudwatch put-metric-data --metric-name TCP_connection_on_port_80 --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN_PORT_80
aws cloudwatch put-metric-data --metric-name No_of_users --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USERS
aws cloudwatch put-metric-data --metric-name IO_WAIT --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $IO_WAIT
===============================================

3. bash 스크립트를 작성한 후 파일에 실행 권한을 부여합니다.

$ chmod +x mem.sh

4. bash 스크립트를 실행하여 작동하는지 확인합니다.

CloudWatch로 지표 푸시

1. cron 작업을 생성합니다.

$ crontab -e

2. 다음 줄을 추가하여 1분마다 스크립트를 실행합니다.

*/1 * * * * /home/ec2-user/mem.sh

3. 저장하고 종료합니다.

crontab이 저장되면 [crontab: installing new crontab]이 표시됩니다.

EC2 인스턴스 모니터링

CloudWatch 콘솔에서 사용자 지정 지표를 찾습니다.

1. CloudWatch 콘솔을 엽니다.

2. [Metrics]를 선택합니다.

3. [All Metrics] 탭을 선택합니다.

4. [Custom]을 선택합니다.

5. 차원 [Instance]를 선택합니다.

6. [InstanceId]와 [Metric Name]을 기준으로 사용자 지정 지표를 선택합니다.

7. 지표의 그래프를 봅니다.

기타 사용법

이 예제를 사용하여 여러 차원을 처리하는 자체 로직을 빌드한 다음 해당 지표 데이터를 CloudWatch로 푸시할 수 있습니다.

예를 들어 애플리케이션을 벤치마크한다고 가정하겠습니다. 그런 다음 I/O 대기 시간 및 메모리 사용률(%)이 특정 임계값에 도달하면 시스템이 정상적으로 작동 중지됩니다. 이 문제를 해결하기 위해 스크립트에서 두 값을 동시에 모니터링할 수 있습니다. CloudWatch로 푸시하는 세 번째 변수에 이들 값의 논리적 AND를 저장합니다.

c=0
if [[  $IO_WAIT > 70 && $USEDMEMORY > 80 ]]
then
  c=1
fi
aws cloudwatch put-metric-data --metric-name danger --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $c

정상 조건의 경우 이 변수는 0입니다. 두 조건이 모두 충족되는 상황에서는 값이 1로 설정됩니다. 그런 다음 이러한 파라미터를 중심으로 사용자 지정 경보를 구축하여 시스템에 문제가 있는 상황을 경고합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?