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

최종 업데이트 날짜: 2020년 11월 18일

Amazon Elastic Compute Cloud(EC2) Linux 인스턴스의 OS 지표 및 성능 카운터를 모니터링하려고 합니다. Amazon CloudWatch를 사용하여 이렇게 할 수 있습니까?

간략한 설명

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

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

계속하기 전에 모니터링하려는 인스턴스에 사용할 수 있도록 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.    인스턴스 차원을 선택합니다.

6.    인스턴스 ID지표 이름으로 해당 사용자 지정 지표를 선택합니다.

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로 설정됩니다. 그런 다음 이러한 파라미터에 대해 사용자 지정 경보를 작성하여 시스템에 문제가 있는 상황을 경고합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?