Profile picture

스토리지 서버(NFS) 트러블 재발 방지를 위한 처리

JaehyoJJAng2023년 02월 27일

◾️ 시나리오

예상 불가능한 문제로 백업이 제대로 안됐을 경우에 알림 메세지를 받을 수 있도록 감시 쉘 스크립트를 작성하기


▪️ 알아야할 커맨드

wc

grep 'hello' ./hello.log | wc -l
3

grep

grep -c : 지정한 문자열을 가진 라인이 몇 개 있는지 출력

grep -i : 대소문자 구분

grep -r : 현재 디렉토리와 그 하위 디렉토리까지 검색

grep -v : 지정한 문자열을 제외한 모든 라인을 출력

▪️ 작업 흐름

  • 백업 파일 확인
    • 오늘자 백업파일 확인 (date,grep)
      • 서버별 파일 리스트 출력
  • 백업 파일 개수 확인
    • 7개면 문제없음 (7일치만 백업하므로)
    • 7개가 아니면 백업 종류와 확인 메시지 텔레그램으로 알람보내기
  • 작성한 레포트를 관리자의 텔레그램으로 전송

◾️ 스크립트 작성

!/usr/bin/bash

## 변수지정
TODAY=$(/bin/date +%Y.%m.%d)
TEL_FILE="/root/monitor/tel_push.sh"
LOG="/tmp/bak_report"
HOST="$(hostname)"
WEB="/nfs/backup/cent1/*cent1.tgz"
DB1="/nfs/backup/cent2/*cent2.tgz"
DB2="/nfs/backup/cent2/*DB.tgz"
STR="/nfs/backup/cent3/*.tgz"
WBK_CNT="$(/usr/bin/ls -1 ${WEB} | /usr/bin/wc -l)"
DBK_CNT1="$(/usr/bin/ls -1 ${DB1} | /usr/bin/wc -l)"
DBK_CNT2="$(/usr/bin/ls -1 ${DB2} | /usr/bin/wc -l)"
SBK_CNT="$(/usr/bin/ls -1 ${STR} | /usr/bin/wc -l)"

## 함수 정의
# 인자를 두 개를 받아서 비교 , 메시지를 반환
# 인자1 : 백업이름
# 인자2 : 백업 카운트
function chk_cnt() {
        # 인자를 변수에 할당
            NAME="${1}"
        CNT="${2}"

      # 백업 카운트(${CNT})가 8이 아닐 경우 확인하도록 메세지
        # 8이 맞을 경우 문제가 없다는 메세지를 출력
        if [[ ! ${CNT} -eq 8 ]];
        then
                /usr/bin/echo "${NAME} 백업파일이 8개가 아닙니다! 확인하세요."
                /usr/bin/echo
        else
                /usr/bin/echo "${NAME} 백업파일 문제없음"
        fi
}

## 로그파일 초기화
/usr/bin/rm -f "${LOG}"
/usr/bin/touch "${LOG}"

## 레포트 메세지 작성
{
        /usr/bin/echo
        /usr/bin/echo "==========="
        /usr/bin/echo " 백업 확인"
        /usr/bin/echo "==========="
        /usr/bin/echo
        /usr/bin/echo "웹서버 백업파일:"
        /usr/bin/ls -1 ${WEB} | /usr/bin/grep ${TODAY}
        /usr/bin/echo
        /usr/bin/echo "DB서버1 백업파일:"
        /usr/bin/ls -1 ${DB1} | /usr/bin/grep ${TODAY}
        /usr/bin/echo
        /usr/bin/echo "DB서버2 백업파일:"
        /usr/bin/ls -1 ${DB2} | /usr/bin/grep ${TODAY}
        /usr/bin/echo
        /usr/bin/echo "스토리지서버 백업파일:"
        /usr/bin/ls -1 ${STR} | /usr/bin/grep ${TODAY}
        /usr/bin/echo

        # 백업 별 파일숫자 확인
            chk_cnt Web_System "${WBK_CNT}"
        chk_cnt DB_System "${DBK_CNT1}"
        chk_cnt DB_DUMP "${DBK_CNT2}"
        chk_cnt STORAGE_System "${SBK_CNT}"

} >|"${LOG}"


## 텔레그램으로 레포트 메세지를 보냄
"${TEL_FILE}" "${HOST}" "$(/usr/bin/cat ${LOG})"\

Loading script...