매번 리눅스 서버 점검할 때마다 명령어를 날려야 한다는 건 매우 번거로운 일이다.
물론, 상세한 정보와 정확한 파악을 위해서는 직접 명령어를 날리며 상세 내역을 확인하는 것이 옳다고 생각한다.
하지만 간단한 점검 차원이라면 스크립트를 이용하여 다양한 시스템 정보를 한눈에 확인할 수 있다.
스크립트 소개
아래 스크립트는 다음과 같은 기능을 수행한다.
- 시스템 정보 출력: 운영체제 버전, DB 버전 및 현재 시간 출력
- 시스템 리소스 모니터링: CPU, 메모리, 스왑 사용량 출력
- 파일 시스템 사용량 출력: 각 파일 시스템의 사용 용량 및 상태 출력
- 디스크 건강 상태 확인: SMART Health Status를 통한 디스크 건강 상태 확인
- 부팅 정보 출력: 시스템 부팅 시간 및 운영 시간 출력
- 현재 로그인 사용자 목록 출력
- 실행 중인 프로세스 모니터링: 웹 서버, 데이터베이스, 애플리케이션 서버 등의 실행 여부 확인
코드
*이 스크립트는 CentOS 기반으로 작성
#!/bin/bash
# 스크립트 목적: 리눅스 서버 상태 점검을 위한 스크립트
clear
echo "========================================================="
os_ver=`grep . /etc/*centos-release |perl -ane print` # 운영 체제 버전 확인
chk_time=`date` # 현재 시간 확인
echo " OS Ver : " $os_ver
echo " DB Ver : Oracle 10.-" # DB 버전 체크 후 작성
echo " Check : " $chk_time
echo "========================================================="
cpu_stat=`sar 1 3 |grep Average |perl -ane 'printf "$F[2]%"'` # CPU 사용량 확인
mem_stat=`free -h |grep Mem |perl -ane 'printf "$F[2]/$F[1]"'` # 메모리 사용량 확인
swap_stat=`free -h |grep Swap |perl -ane 'printf "$F[2]/$F[1]"'` # 스왑 사용량 확인
# 시스템 리소스 모니터링
echo
echo "+--------------------------------------------------------+"
echo "| 1. System Cehck (CPU, Memory, Swap) |"
echo "+--------------------------------------------------------+"
echo " CPU : " $cpu_stat
echo " MEMORY : " $mem_stat
echo " SWAP : " $swap_stat
ps_sshd=`ps -ef |grep -v grep |perl -ne 'printf 0 < $. if /sshd$/'` # SSH 프로세스 확인
ps_crond=`ps -ef |grep -v grep |perl -ne 'printf 0 < $. if /crond$/'` # 크론 프로세스 확인
# 파일 시스템 사용량 출력
echo
echo "+--------------------------------------------------------+"
echo "| 2. File system Usage |"
echo "---------------------------------------------------------+"
df -h | awk 'NR == 1; NR > 1 {print $0 | "sort -k6"}'
disk_stat=`smartctl -H /dev/sda1 |grep 'SMART Health Status' |perl -ane 'printf "$F[3]"'` # 디스크 건강 상태 확인
# 디스크 건강 상태 확인
echo
echo "+--------------------------------------------------------+"
echo "| 3. Disk Health Status |"
echo "+--------------------------------------------------------+"
echo " SMART Health Status : " $disk_stat
# 파일 시스템 사용량에 따른 상태 출력
lev_info=70 # info level
lev_war=80 # Warning level
lev_cri=90 # Critical level
echo -e "Status" '\t' "Direcotry" '\t' "Size" '\t' "Used" '\t' "Available" '\t' "Usage"
df -H | egrep -v '^Filesystem|tmpfs|cdrom|loop|udev'| while read -r df_output;
do
fs=$(echo "$df_output" | awk '{ print $1}')
dsize=$(echo "$df_output" | awk '{ print $2}')
dused=$(echo "$df_output" | awk '{ print $3}')
davail=$(echo "$df_output" | awk '{ print $4}')
dusage=$(echo "$df_output" | awk '{ print $5}')
usep=$(echo "$df_output" | awk '{ print $5}' | cut -d'%' -f1 )
fmount=$(echo "$df_output" | awk '{ print $6}')
# 파일 시스템 상태에 따른 경고 수준 설정
if [[ $usep -ge $lev_cri ]]; then
echo -e "[Critical] " $fmount '\t' $dsize '\t' $dused '\t' $davail '\t' $dusage
elif [[ $usep -ge $lev_war ]]; then
echo -e "[Warning] " $fmount '\t' $dsize '\t' $dused '\t' $davail '\t' $dusage
elif [[ $usep -ge $lev_info ]]; then
echo -e "[Info] " $fmount '\t' $dsize '\t' $dused '\t' $davail '\t' $dusage
else
echo -e "[Good] " $fmount '\t' $dsize '\t' $dused '\t' $davail '\t' $dusage
fi
done
# 시스템 부팅 정보 출력
echo
sys_boot=`who -b | perl -ane print`
echo "+--------------------------------------------------------+"
echo "| 4. System Boot |"
echo "+--------------------------------------------------------+"
echo "" $sys_boot
uptime
# 현재 로그인 사용자 목록 출력
echo
echo "+--------------------------------------------------------+"
echo "| 5. Current login User |"
echo "+--------------------------------------------------------+"
who -u
echo "========================================================="
# 프로세스 모니터링
web=`pgrep http | wc -l`
db=`netstat -n | grep 1521 | wc -l`
was=`ps -ef | grep java | grep tomcat | wc -l`
# 각 프로세스 상태 출력
if [ ${web} -ge 1 ]
then
echo "WEB = running"
else
echo "WEB = down"
fi
if [ ${was} -eq 1 ]
then
echo "WAS = running"
else
echo "WAS = down"
fi
if [ ${db} -ge 1 ]
then
echo "DB = running"
else
echo "DB = down"
fi
echo "========================================================="
마무리
리눅스 서버의 상태를 주기적으로 점검하는 것은 시스템 안정성과 성능을 유지하는데 매우 중요하다.
상세한 점검은 개별적으로 수행하고 간단한 모니터링 정보는 스크립트를 활용해 보자.
반응형
'Dev > Linux' 카테고리의 다른 글
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast" 메시지에 대한 설명과 해결 방안 (0) | 2024.07.04 |
---|---|
[Linux] AH00548: NameVirtualHost has no effect and will be removed in the next release (2) | 2024.06.04 |
[Linux] 계정 생성, 삭제, 비밀번호 설정 (0) | 2023.11.21 |
[Linux] 리눅스 Hostname 변경하기 (CentOS & Rocky 6, 7, 8) (0) | 2023.11.15 |
[Linux] kdevtmpfsi, kinsing 멀웨어 해결방법 (0) | 2023.08.02 |