안녕하세요 오늘은 BESPIN GLOBAL SRE실 지봉근님이 작성해주신 ‘[WhaTap] RDS Failover/Reboot 관제 2 – RDS Failover’에 대해 소개해드리도록 하겠습니다.
목차
- 개요
- 세부 내용
- 마치며
1. 개요
- 목적: 본 문서는 WhaTap Failover / Reboot 관제를 위해 2
2. 세부 내용:
2-1. 적용 배경:
- WhaTap에서는 RDS Failover / Reboot을 감지할 수 있는 지표(Metric)이 별도로 존재하지 않습니다.
- Failover / Reboot은 정확히는 지표(Metric)가 아닌 이벤트(Event)로 분류됩니다.
- Failover / Reboot을 감지할 수 있도록 자동화 Script를 작성했으며, 대상 자동화를 통해 신규 RDS의 생성 혹은 삭제 등이 발생할 경우에도 자동으로 관제 가능하도록 구성했습니다.
2-2. 주의 사항:
- IAM Role / Access Key를 혼용해서 사용하는 경우에는 ‘권한’ 충돌이 발생하지 않도록 ‘Profile’ 등을 통해 구분해야 합니다. (RDS Describe 권한이 필요)
- 해당 Script들은 AWS CLI를 통해 Query하는 부분이 있어 리소스를 과점유할 수 있으니, Crontab에는 ‘5분’ 정도의 여유 시간을 할애하는 것을 권장합니다.
- 해당 Script는 ‘describe RDS’ Script가 선 실행되어 List 파일이 존재해야 합니다.
- Script의 결과값을 WhaTap에 ‘json’ 형식으로 보낼 ‘focus’라는 WhaTap에서 제공하는 툴 다운로드가 필요합니다
- 별도의 설치 과정은 없습니다.
- WhaTap Focus: https://docs.whatap.io/focus/introduction
2-3. 코드 내용:
- RDS_Failover_v2.0.sh:
#!/bin/bash
# Amazon Linux 1 / Amazon Linux 2 / CentOS / Redhat
# Aurora RDS(Cluster) / RDS(Instance) - Failover Monitoring
# License Key of the project to be installed
# Type: String
WHATAP_LICENSE=''
# Project Code of the project to be installed
# Type: Integer
WHATAP_PCODE=
# If it is a 'Proxy' configuration, the proxy server IP.
# If it is a WhaTap collection server, the collection server IP listed in the WhaTap pr
# Type: String
WHATAP_HOST=''
# Collect/save results with the 'Category' name specified below.
# Type: String
CATEGORY=''
# Enter the 'Full Path' where 'Focus' file is located.
# Type: String
FOCUS_PATH=''
# Enter the path where 'Script' will be located/operated.
LOCATE_PATH=""
# AWS CLI Output Type
OUTPUT="text"
# AWS CLI Target Region
REGION="ap-northeast-2"
EVENT="failover"
# for Aurora RDS
CLUSTER_KEYWORD="Completed"
# for RDS(Instance)
INSTANCE_KEYWORD="completed"
# === Do not change the variables below. ===
K_DATE='"Date"'
K_TIME='"Time"'
K_TZ='"Time Zone"'
K_TARGET1='"DB Cluster"'
K_TARGET2='"DB Identifier"'
K_FAILOVER='"Failover"'
V_DATE='"-"'
V_TIME='"-"'
V_TZ='"UTC"'
V_TARGET1='"-"'
V_TARGET2='"-"'
V_FAILOVER=0
# === Do not change the variables over. ===
##### Run Command #####
echo `aws rds describe-events --output ${OUTPUT} --region ${REGION} --duration 5 --even
echo `aws rds describe-events --output ${OUTPUT} --region ${REGION} --duration 5 --even
sleep 5;
SIZE_CHECK1=`ls -la ${LOCATE_PATH} | grep Cluster_Failover_Event | awk '{ print $5 }'`
if [ "${SIZE_CHECK1}" != 0 ]; then
for LINES in $(cat ${LOCATE_PATH}RDS_Cluster_List);
do
EVENT_READ1=`cat ${LOCATE_PATH}Cluster_Failover_Event | grep ${LINES}`
if [ -n "${EVENT_READ1}" ]
then
V_DATE=`cat ${LOCATE_PATH}Cluster_Failover_Event | grep ${LINES
V_DATE='"'${V_DATE}'"'
V_TIME=`cat ${LOCATE_PATH}Cluster_Failover_Event | grep ${LINES
V_TIME='"'${V_TIME}'"'
V_TARGET1=${LINES}
V_TARGET1='"'${V_TARGET1}'"'
#V_TARGET2=${LINES}
V_FAILOVER=1
echo "{"${K_DATE}":"${V_DATE}","${K_TIME}":"${V_TIME}","${K_TZ}
fi
done
else echo "{"${K_DATE}":"${V_DATE}","${K_TIME}":"${V_TIME}","${K_TZ}":"
fi
SIZE_CHECK2=`ls -la ${LOCATE_PATH} | grep Instance_Failover_Event | awk '{ print $5 }'`
if [ "${SIZE_CHECK2}" != 0 ]; then
for LINES in $(cat ${LOCATE_PATH}RDS_Instance_List);
do
EVENT_READ2=`cat ${LOCATE_PATH}Instance_Failover_Event | grep ${LINES}`
if [ -n "${EVENT_READ2}" ]
then
V_DATE=`cat ${LOCATE_PATH}Instance_Failover_Event | grep ${LINE
V_DATE='"'${V_DATE}'"'
V_TIME=`cat ${LOCATE_PATH}Instance_Failover_Event | grep ${LINE
V_TIME='"'${V_TIME}'"'
V_TARGET1='"-"'
V_TARGET2=${LINES}
V_TARGET2='"'${V_TARGET2}'"'
V_FAILOVER=1
echo "{"${K_DATE}":"${V_DATE}","${K_TIME}":"${V_TIME}","${K_TZ}
fi
done
else echo "{"${K_DATE}":"${V_DATE}","${K_TIME}":"${V_TIME}","${K_TZ}":"${V_TZ}","${K_TA
fi
- WHATAP_LICENSE:
- WhaTap을 설치할 고객사 프로젝트의 ‘에이전트 설치’ 항목으로 이동하면 License Key 값을 확인할 수 있습니다
- 해당 License Key 값을 변수로 할당합니다.
- String 타입으로 ‘ ‘로 감싸야 합니다.

- WHATAP_PCODE:
- WhaTap을 설치할 고객사의 프로젝트 코드(Project CODE)입니다.
- 설치할 고객사 프로젝트 선택 시, ‘주소표시줄’에서 확인 가능합니다.

- 혹은 [ 관리 ] – [ 프로젝트 관리 ] 항목으로 이동해도 확인 가능합니다.
![혹은 [ 관리 ] - [ 프로젝트 관리 ] 항목으로 이동해도 확인 가능합니다.](https://i0.wp.com/bespin-wordpress-bucket.s3.ap-northeast-2.amazonaws.com/wp-content/uploads/2025/04/image-504.png?resize=895%2C939&ssl=1)
- 해당 pcode 값을 변수로 할당합니다.
- Integer 타입으로 숫자만 기입합니다.
- WHATAP_HOST:
- 각 WhaTap Infra Agent 지표(Metric)을 수집할 WhaTap 서버의 공인 IP 입니다.

- 해당 공인 IP 주소값을 변수로 할당합니다.
- String 타입으로 ‘ ‘로 감싸야 합니다.
- CATEGORY
- ‘메트릭스 조회’, ‘알람 설정’을 진행하기에 지표(Metric)가 수집/분류되는 네임 스페이스입니다. (입력하는 이름으로 Custom하게 저장 가능)
- String 타입으로 ‘ ‘로 감싸야 합니다

- FOCUS_PATH
- Script 결과값(Customized)을 ‘focus’를 통해 전송이 필요합니다.
- 주석과 같이 ‘focus’를 포함한 ‘Full Path’ 정보를 기입합니다.
- 해당 Script와 ‘focus’는 동일한 디렉토리에 있는 것을 권장합니다
- LOCATE_PATH: 해당 Script가 위치할 Path를 변수로 할당합니다. (마지막에 ‘/’ 포함 필수)
- OUTPUT: ‘text’ 형식으로 AWS CLI 결과를 출력합니다. (변경 X)
- REGION: AWS CLI로 검색할 리전 코드를 변수로 할당합니다.
- 36 ~ 59번 줄까지의 내용은 수정할 필요가 없습니다.
- ‘Run Command’ 이하 내용은 수정할 필요가 없습니다.
- ‘Profile’을 이용하여 모니터링 할 경우에는 62, 63번 줄의 AWS CLI 명령어 중간에 ‘–profile=[Profile User]’ 가 추가되어야 합니다
2-4. Script 실행(Test):
- Script가 위치한 디렉토리로 이동하여 해당 Script를 실행합니다.
- 다음 2가지 내용으로 Script 정상 동작 여부를 확인합니다.
- Script 수행 시, Terminal에 별도 Error 메세지 없이 WhaTap Logo와 Session Closed 확인 여부
- Error 발생 시에는 Script 혹은 AWS CLI 수행을 위한 권한 확인 필요
- WhaTap Browser에서 [ 메트릭스 조회 ]를 통해 Script에 지정한 ‘CATEGORY’ 항목이 ‘카테고리’에서 보이는지 확인
- Script 수행 시, Terminal에 별도 Error 메세지 없이 WhaTap Logo와 Session Closed 확인 여부
2-5. Script 등록:
- Crontab에 해당 Script를 실행할 User로 ‘5분’ 간격으로 실행될 수 있도록 등록합니다.
3. 마치며
- 동작 관련:
- 정상적으로 Script가 동작하여 지표가 수집된다면, ‘Failover’ 컬럼에 ‘0’으로만 집계되고 나머지 컬럼은 ‘-’ 지표만 수집합니다.
- 실제 Failover Event 발생 시, ‘Failover’ 컬럼이 ‘1’로 기입되며, 나머지 컬럼에 자동적으로 Event 발생한 대상 리소스 정보가 표시됩니다.
- 알람 설정을 위해서는 해당 ‘카테고리’를 선택 후, ‘Failover > 0’로만 선택해도 전체 RDS의 Failover 감지가 가능합니다
- 타 모니터링 솔루션과 다르게 WhaTap에서는 RDS Failover / Reboot을 Integration으로 관제할 수 있는 방안이 없어 해당 Script를 구현하여 고객사에 적용했습니다.
- 해당 Script는 describe RDS Script와 하나의 세트입니다.
- 대상 자동화를 위한 세트 구성이기에 각 Script별로 올바른 설정이 필요합니다.
여기까지 ‘[WhaTap] RDS Failover/Reboot 관제 2 – RDS Failover’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다.
Written by 지 봉근 / SRE실
BESPIN GLOBAL