본문 바로가기
프로그래밍

[centos7] 디스크 사용률 확인 스크립트 작성하기

by choihyuunmin 2022. 2. 1.
728x90

1. 개요

현재 진행하는 프로젝트에서는 월간보고 시, 전체 서버들의 한 달간 디스크 사용률을 보고해야한다.
작년 한 해는 그냥 df 명령어를 사용하여 복사하고, 엑셀에 붙여넣어서 계산하는 식으로 사용했는데 서버가 하나 둘 늘어나다 보니 여간 불편한게 아니었다. 귀찮음을 줄이고자 스크립트를 작성하여 크론 등록 후 서버 to 서버로 전송하여 한번에 내려받고자 먼저 스크립트를 작성해보았다.

2. 기존 방식

기존 방식이라고 하기도 부끄러운게 그냥 df 명령어를 사용하여 전체 블록 용량, 사용량을 복사하여 엑셀에서 계산했다.
여기서 의문점은 df를 실행했을 때, Use% 필드에 사용률이 나오지 않느냐? 일텐데,
Use% 필드에는 1의 자릿수까지 근삿값으로 표출되기 때문에, 1시간이나 1분 단위로 찍었을 때 디스크 사용률을 확인하기 어려웠다.
그래서 정확한 계산을 위해 kilo bytes 단위의 사용량을 가져와 사용률을 다시 계산해야했다.

df 명령어

df 명령어는 서버 상에 마운트 된 디스크의 용량 및 사용량을 보여주는 명령어로 옵션 없이 사용했을 때는 기본적으로 kilo bytes 기준으로 출력된다.

※ 자주 쓰는 df 명령어 옵션

   
옵션 설명
-a. --all 0블록의 파일시스템을 포함하여 모든 파일시스템을 출력한다.
-h, --human-readable MB, GB 등의 단위로 표시해주는 옵션, 옵션 이름 그래도 사람이 읽기 쉽게 표시한다.
-m MB 단위로 출력한다.
-P POSIX 출력 표준으로 출력합니다. 개행이 일어나는 경우, 한 화면에 출력한다.

3. 스크립트 작성

1) 합계 구하기

스크립트를 작성함에 있어, 가장 먼저 해야할 것은 마운트된 디스크들의 용량과, 사용중인 용량들을 각각 합해서 출력하는 것이었는데
디스크 별로 다 뜯어서 반복문을 돌릴까 생각하다가 왠지 df 명령어에 합산을 내주는 명령어가 있을까 해서 찾아보았더니,
웬걸 진짜 --total 이란 옵션이 있었다.

--total 옵션을 사용하면 맨 밑줄에 total 이 생긴다.

total을 구했으니 마운트 용량과 사용량을 나누어서 사용률을 구해주면 된다.

2) 사용률 계산하기

여기서는 awk 명령어를 사용하여 계산했다.
df --total | awk '/total/' | awk '{print $2, $3}' | awk '{print $2 / $1 * 100}'
먼저 df --total 로 total 사용량을 추가해준뒤 나머지는 제거해주기 위해 '/total/'을 사용했다.
awk에서 /문자열/ 은 해당 문자열이 포함된 레코드만 보여준다. awk '{print $2, $3}'은 총 용량과,

사용량인 2번째, 3번째 탭의 문자열을 가져오고, 가져온 2, 3번째 탭이 1, 2번째가 되기 때문에

{print $2 / $1 * 100} 을 사용해서 사용량을 구해준다.

이런식으로 사용률이 구해진다.

3) 쉘로 만들어서 크론 등록하기

매일 등록해서 확인하는 스크립트이기 때문에 최대한 간단하게 작성했다.
time 변수에 현재 날짜 및 시간을 확인 명령어를 할당하고
disk 변수에는 위에서 계산하는 데 사용한 확인 명령어를 할당했다.
echo로 두 변수를 출력하고 출력 문자열을 텍스트 파일에 리다이렉트 시켰다.
해당 스크립트를 크론탭에 등록하여주면,

이런식으로 예쁘게 출력된 모습을 볼 수 있다.

4. 정리

지금은 사용률만 찍어내는 스크립트 이기 때문에 각각 서버에서 가져오는 작업을 또 해야한다. db서버에서 다른 서버들로 붙을 수 있으니 db서버로 모아서 날짜별로 테이블을 만들어 저장해두면 어떨까 싶다. 1분 간격은 너무 빠르고 1시간 단위로 찍어서 보내주면 적절할 것 같다.
몇개월 미루던 작업인데 스크립트 작성하는데 한 시간도 안걸렸다. 지난 일 년간 번거로운 작업을 수행한 나에게 미안해진다.