본문 바로가기
쉘스크립트애들

system resource check

by 혜룐 2018. 7. 9.
#!/bin/bash

HOSTNAME=`hostname`
TODAY_TIME=`date +%m%d%H%M`

check_load(){
THRESHOLD=15

UPTIME=(`uptime | awk '{print $(NF-2) $(NF-1) $(NF)}' | sed 's/,/ /g'`)
LOAD1M=${UPTIME[0]}
LOAD5M=${UPTIME[1]}
LOAD15M=${UPTIME[2]}

RESULT=$(echo "$LOAD5M > $THRESHOLD" | bc)
if [ $RESULT = '1' ]; then
echo "$HOSTNAME : check load : ", "load.1m=$LOAD1M", "load.5m=$LOAD5M", "load.15m=$LOAD15M"
else
echo "$HOSTNAME : good load : ", "load.1m=$LOAD1M", "load.5m=$LOAD5M", "load.15m=$LOAD15M"
fi

}

check_swap(){
THRESHOLD=60

SWAP=`free -m | grep Swap:`
TOTAL=$(echo $SWAP | awk '{print $2}')
USED=$(echo $SWAP | awk '{print $3}')
ACTUAL=`echo "100*$USED/$TOTAL" | bc -l`

RESULT=$(echo "$ACTUAL > $THRESHOLD" | bc)

if [ $RESULT = '1' ]; then
echo "$HOSTNAME : check swap : ", "total=$TOTAL", "used=$USED", "actual=$ACTUAL"
else
echo "$HOSTNAME : good swap : ", "total=$TOTAL", "used=$USED", "actual=$ACTUAL"
fi
}

check_mem(){
THRESHOLD=85

TOTAL=`free | grep ^Mem | awk '{print $2}'`
CACHE=`free | grep ^-/+ | awk '{print $3}'`
ACTUAL=`echo "100*$CACHE/$TOTAL" | bc -l`

MEM_RESULT=$(echo "$ACTUAL > $THRESHOLD" | bc)

if [ $MEM_RESULT = '1' ]; then
echo "$HOSTNAME : check mem : ", "total=$TOTAL", "buffer cache=$CACHE", "actual=$ACTUAL"
else
echo "$HOSTNAME : good mem : ", "total=$TOTAL", "buffer cache=$CACHE", "actual=$ACTUAL"
fi
}

check_max_open_filecnt(){
THRESHOLD=65535

#PREFIX=65535
#SPACE=`svs | grep ^path-`
SPACE=`svs | grep api`
while read -r device
do
DEVICE=($device)
PID=`echo ${DEVICE[3]}| sed 's/,//g'`
MAX_OPEN_FILES=`cat /proc/${PID}/limits | grep "Max open" |awk -F" " '{print $5}'`
#echo $MAX_OPEN_FILES

if [ "$MAX_OPEN_FILES" != "$THRESHOLD" ]; then
echo "$HOSTNAME : check max open files : $MAX_OPEN_FILES", "PID:$PID"
else
echo "$HOSTNAME : good max open files : $MAX_OPEN_FILES", "PID:$PID"
fi

done <<< "$SPACE"
}

check_filesystem(){
THRESHOLD=91

# FILE SYSTEM
SPACE=`df -lP | tail -n +2`
while read -r device
do
DEVICE=($device)
if [[ $DEVICE[0] != "/"* ]]; then
continue
fi

usage=`echo ${DEVICE[4]} | sed 's/%//g'`
if [[ ${DEVICE[5]} == "/" ]]; then
#echo "filesystem.root.space=$usage"
RESULT=$(echo "$usage > $THRESHOLD" | bc)

if [ $RESULT = '1' ]; then
echo "$HOSTNAME : check filesystem :", "filesystem.$mount.space=$usage"
else
echo "$HOSTNAME : good filesystem :", "filesystem.$mount.space=$usage"
fi
else
mount=`echo ${DEVICE[5]} | sed 's/^\///'`

RESULT=$(echo "$usage > $THRESHOLD" | bc)

if [ $RESULT = '1' ]; then
echo "$HOSTNAME : check filesystem :", "filesystem.$mount.space=$usage"
else
echo "$HOSTNAME : good filesystem :", "filesystem.$mount.space=$usage"
fi
fi

done <<< "$SPACE"
}


main(){
check_load
check_filesystem
check_mem
check_swap
check_max_open_filecnt
}

#sys.arg=1 servicename
main ${1}