◾️ 셸 스크립트 작성
- 스크립트가 해야할 일
- 디스크 파티션 사용량 감시
▪️ 한 줄 스크립트
df -h | awk '{gsub("%",""); USE=$5;MNT=$6; print USE,MNT}' | column -t
df -h | awk '{gsub("%",""); USE=$5;MNT=$6; if ( USE > 80 ) print USE,MNT}' | column -t
df -h | awk '{gsub("%",""); USE=$5;MNT=$6; if ( USE >= 80 ) print USE,MNT}' | column -t | grep -v "^[A-Z]"
df -h | awk '{gsub("%",""); USE=$5;MNT=$6; if ( USE >= 80 ) print MNT,"파티션이 ",USE,"%를 사용중입니다" }' | grep -v "^[A-Z]"
▪️ 감시 스크립트 작성
# ./disk-monitoring.sh
#!/usr/bin/bash
function param_check() {
if [[ ${#} -ne 1 ]]; then
clear
echo -e "해당 스크립트 사용방법\n${0} percentage"
echo -e "\nExample) ${0} 50"
exit 1
fi
}
function validation_check() {
if [[ ${1} -gt 100 ]] || [[ ${1} -lt 0 ]]; then
echo -e "퍼센트 수치가 너무 높거나 낮습니다. 1 ~ 100 사이에서 입력하세요."
exit 1
fi
if [[ ${1} =~ [^0-9] ]]; then
echo -e "숫자만 입력!"
exit 1
fi
}
# Check Params
param_check ${1}
# Percentage
PER=${1}
# PER validation check
validation_check ${PER}
#### Required Variables
TEL_FILE="/home/${USER}/telegram/alarm.sh"
HOST_NAME="${HOSTNAME}"
#
#### disk usage
DISK_USAGES=( $(df -h | grep -v "Filesystem" | awk '{gsub("%",""); print $5}') )
MNT_PATH=( $(df -h | grep -v "Filesystem" | awk '{print $6}') )
for idx in "${!DISK_USAGES[@]}"; do
DISK_USAGE="${DISK_USAGES[${idx}]}"
MOUNT="${MNT_PATH[${idx}]}"
echo ${MOUNT}
if [[ ! "${DISK_USAGE}" -ge "${PER}" ]]; then
continue
else
TEXT="디스크 사용량이 ${DISK_USAGE}% 까지 올랐습니다! 서버에 접속하여 확인해주세요."
echo "${TEXT}"
"${TEL_FILE}" "${HOST_NAME}" "${MOUNT}" "${TEXT}"
fi
done
#
▪️ 텔레그램 봇 연동
# telegram/alarm.sh
#!/usr/bin/bash
# 서버 호스트 이름
# 텔레그램 보낼 메시지
# 파라미터 확인하기
# 파라미터 확인하기
if [[ ${#} -ne 3 ]]; then
clear
echo -e "Usage\n${0} hostname mount_path text"
echo -e "\nExam) ${0} web /mnt '디스크 사용량을 확인해주세요.'"
exit 1
fi
# 텔레그램 봇 관련 정보
TELE_INFO_FILE="/home/${USER}/telegram/.telegram.info"
TELE_INFOS=( $(awk -F '=' '{print $2}' "${TELE_INFO_FILE}" ) )
CHAT_ID="${TELE_INFOS[0]}"
API_TOKEN="${TELE_INFOS[1]}"
URL="https://api.telegram.org/bot${API_TOKEN}/sendMessage"
# 날짜
DATE="$(date +'%Y-%m-%d %H:%M')"
# 보낼 메시지 작성
TEXT="${DATE}
${1} :: ${2} ${3}"
# 메시지 보내기
curl -s -d "chat_id=${CHAT_ID}&text=${TEXT}" ${URL} > /dev/null # 출력 결과는 필요없기 때문에 표준출력에 대해 /dev/null로 보냄
# /home/${USER}/telegram/telegram.info
CHAT_ID=1002XXXXX
TOKEN=66XXXX:XXXXXX
▪️ crontab 등록
# 로그 디렉토리 감시 스크립트
00 * * * * /root/diskusage_monitor/log_mon.sh >/dev/null 2>&1
# 디스크 파티션 감시 스크립트
30 * * * * /root/part_monitor/part_mon.sh 70 >/dev/null 2>&1
💥 리다이렉션?
/dev/null : 표준 출력 /dev/null로 보냄 (쓰레기통)
2>&1 : 표준 에러를 표준 출력으로 변환