728x90
반응형

매번 리눅스 서버 점검할 때마다 명령어를 날려야 한다는 건 매우 번거로운 일이다.

물론, 상세한 정보와 정확한 파악을 위해서는 직접 명령어를 날리며 상세 내역을 확인하는 것이 옳다고 생각한다.

하지만 간단한 점검 차원이라면 스크립트를 이용하여 다양한 시스템 정보를 한눈에 확인할 수 있다.

 

스크립트 소개

아래 스크립트는 다음과 같은 기능을 수행한다.

  1. 시스템 정보 출력: 운영체제 버전, DB 버전 및 현재 시간 출력
  2. 시스템 리소스 모니터링: CPU, 메모리, 스왑 사용량 출력
  3. 파일 시스템 사용량 출력: 각 파일 시스템의 사용 용량 및 상태 출력
  4. 디스크 건강 상태 확인: SMART Health Status를 통한 디스크 건강 상태 확인
  5. 부팅 정보 출력: 시스템 부팅 시간 및 운영 시간 출력
  6. 현재 로그인 사용자 목록 출력
  7. 실행 중인 프로세스 모니터링: 웹 서버, 데이터베이스, 애플리케이션 서버 등의 실행 여부 확인

 

코드

*이 스크립트는 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 "========================================================="

 

마무리

리눅스 서버의 상태를 주기적으로 점검하는 것은 시스템 안정성과 성능을 유지하는데 매우 중요하다.

상세한 점검은 개별적으로 수행하고 간단한 모니터링 정보는 스크립트를 활용해 보자.


728x90
반응형