본문 바로가기
리눅스&서버/우분투

디스크 파티션 사용량 모니터링 스크립트[2]

by 인생여희 2022. 3. 23.

디스크 파티션 사용량 모니터링 스크립트[2] 

 

 

작업내용

 

✅디스크 용량 확인 명령어

df -h

 

 

✅Use 칼럼의 데이터 구하기

df -h | awk '{print $5}'

 

✅Use 칼럼의 데이터에서 % 제외하기 (%를 기준으로 자르고 첫번째 줄 print) 

df -h | awk '{print $5}' | awk -F% '{print $1}'

 

✅Use 칼럼의 데이터에서 칼럼제목(영어) 제외

df -h | awk '{print $5}' | awk -F% '{print $1}' | grep -v "^[A-Z]"

 

위의 명령어는 쉘스크립트에서 사용하기에 복잡할 수 있다.

 

✅gsub 내장함수를 이용한 명령어

df -h | awk '{gsub("%",""); print$5 , $6}' | column -t

 

 

✅출력값을 변수에 대입해서 처리 : 변수를 쓰는 이유는 나중에 코드를 읽을때 알아보기 쉽고, 코드 확장 위함 (USE, MNT)

df -h | awk '{gsub("%",""); USE=$5; MNT=$6; print USE,MNT}' | column -t

 

 

✅USE 가 30이 넘는 Mount의 이름 출력

df -h | awk '{gsub("%",""); USE=$5; MNT=$6; if(USE > 30) print USE,MNT}' | column -t

df -h | awk '{gsub("%",""); USE=$5; MNT=$6; if(USE > 30) print USE,MNT}' | column -t | grep -v "^[A-Z]"

 

 

✅USE 가 30이 넘는 Mount의 이름과 사용량을 문장으로 출력

df -h | awk '{gsub("%" , ""); USE=$5; MNT=$6; if (USE > 30) print MNT,"파티션이 " ,USE,"%를 사용 중입니다."}' | column -t | grep -v "^[A-Z]"

 

 

✅ 쉘스크립트 참고

$ ( 명령어 )

$() 안에있는 명령어는 실행이 된다.

 

 

📌 log_part.sh  내용

#! /bin/bash

# 파티션별 사용량을 확인해서 30% 이상인 파티션이 있으면 관리자에게 메시지를 보냄
# 1. 파티션별 사용량을 확인
# 2. 크기를 비교해서 처리
# 3. use가 30 이상이면 관리자에게 메시지
# 4. 30 미만이면 아무것도 안함


#TEXT 변수에 보낼 메시지를 작성
# (역슬래쉬) 이용해서 줄 바꿈

TEXT="$(df -h | \
        awk '{ 
		gsub("%" , "");
	        USE=$5; 
		MNT=$6; 
		if ( USE > 30 ) 
			print MNT, "파티션이 " ,USE, "%를 사용 중입니다." 
	       }' | grep -v "^[A-Z]")"


HOST="$(hostname)"

# 30% 이상 디스크를 사용하는 파티션이 있을 경우
# TEXT 변수의 내용(메시지)를 관리자에게 보냄

# TEXT 앞에 # 은 바이트 수 구하는 문법. 즉 1바이트 보다 크면(메시지가 존재하면)
if [ ${#TEXT} -gt 1 ]
then
	/root/monitor/telegram_push.sh "${HOST}" "${TEXT}"

fi

 

위의 스크립트에서 텔레그램 봇으로 메시지 보내는 쉘 스크립트는 이전 포스팅(서버 운영 필요한 지식 - 트러블 슈팅[1] - (텔레그램 봇 메시지 보내기)) 에 나와 있습니다.

 

 

✅적용

crontab 에 등록하기 :  1시간에 1번

 

✅순서

분, 시간, 일, 월, 요일

 

✅crontab 에 등록

crontab -e

 

# 정시마다 특정 로그 파일 용량 체크

00 * * * * /root/monitor/log_part.sh >/dev/null 2>&1

 

#30 분 마다 파티션 용량 체크 

30 * * * * /root/monitor/log_mon.sh >/dev/null 2>&1

 

✅crontab 등록한 스케쥴 확인

crontab -l

 

crontab -r 쓰면 안됨! 전체 삭제됨