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