User Tools

Site Tools


server_stats

---Work in progress---

#!/bin/bash
#####################################
##Release:
##Version 1.3
##Author: Luke Shirnia
####################################
#version 1.3 release notes:
#added total CPU usage for top process and all its threads
#added server uptime from /proc/uptime 
#load average now pulled from /proc/loadavg rather than 'w' (for compatibility)
#replaced 'free -m' with values from /proc/meminfo (for compatibility)
#####################################
#Version 1.2 Update Notes:
#Ram usage now in MB
#removed 'bc' commands and replaced with awk for compatibility reasons
#####################################
#####Colours######
ESC_SEQ="\x1b["
GREEN=$ESC_SEQ"32;01m"
RED=$ESC_SEQ"31;01m"
RESET=$ESC_SEQ"39;49;00m"
BLUE=$ESC_SEQ"34;01m"
#####Underline/bold#####
BOLD=$ESC_SEQ"\033[1m"
bold=$(tput bold)
UNDERLINE=$ESC_SEQ"\033[4m"
#####################################
neat="############################################"
#####################################
#Load Average
loadnow=$( cut /proc/loadavg -f1 -d\ ) #this gets the 1 min load average from /proc/loadavg
load15=$( cut /proc/loadavg -f3 -d\ ) #gets the 15 min load average from /proc/loadavg

#Ram Usage
totalc=$( grep MemTotal /proc/meminfo | awk '{print $2 / 1024 }') #gets the total available ram from /proc/meminfo
usedc=$( ps -Fe --sort:-rss --no-headers | awk '{totalram += $6}END{print totalram / 1024}' )
free=$( printf "%.2f\n" $( echo - | awk -v t=$totalc -v u=$usedc '{print t - u }'))
total=$( printf "%0.2f\n" $totalc )
used=$( printf "%0.2f\n" $usedc )

topramprocess=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $11}')
topramrss=$(ps -Fe --sort:-rss --no-headers | head -1 | awk '{print $6}')

#CPU Stuff
topprocess=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $4}' | sed 's/[][]//g' )
topcpu=$(ps -eo user,pcpu,pid,cmd --sort:-pcpu --no-headers | head -1 | awk '{print $2}')

serveruptime=$(awk '{print int($1/86400)"days "int($1%86400/3600)":"int(($1%3600)/60)":"int($1%60)}' /proc/uptime)
#######################################

echo $neat

#####Load Average#####
echo ""
echo "Server Uptime: "$serveruptime
echo ""
#1 min load check
loadcheck=$(echo - | awk -v lnow=$loadnow '{print ( lnow < 0.80 )}')
    if [ "$loadcheck" -ge 1 ]; then
       echo -e "Load Average: Current$GREEN "$loadnow$RESET
    elif [ "$loadcheck" -le 0 ]; then
       echo -e "Load Average: Current$RED "$loadnow$RESET
    fi

#15 min load check
loadcheck15test=$(echo - | awk -v l15=$load15 '{print ( l15 < 0.80 )}')
    if [ "$loadcheck15test" -ge 1 ]; then
    echo -e "Load Average: 15min Average$GREEN "$loadnow$RESET
    elif [ "$loadcheck15test" -le 0 ]; then
        echo -e "Load Average: 15min Average$RED "$loadnow$RESET
    fi

#####RAM#####
echo ""
echo ""
echo "###RAM usage###"

echo -e "Free Ram: "$free"MB" 
echo "Used RAM: "$used"MB"
ramtest=$( printf "%.0f\n" $(echo - | awk -v u=$used -v f=$free '{ print 100 - ( u / ( f + u ) ) * 100 }' ))


echo ""
echo $ramtest"% ram left"
        if [ $ramtest -gt 20 ]; then
            echo -e "RAM Usage:$GREEN Acceptable$RESET"
        elif [ $ramtest -le 20 ] && [ $ramtest -gt 10 ] ; then
            echo -e "RAM ALERT:$RED Low!$RESET "
        elif [ $ramtest -le 10 ]; then
            echo -e "RAM WARNING:$RED CRITICAL STATE!!$RESET"
        fi
echo ""  

topramMB=$( printf "%.2f\n" $(echo - | awk -v tp=$topramrss '{print tp / 1024}'))
ramtotalprocesses=$(ps -Fe --sort:-rss | grep -v grep | grep -ic $topramprocess)

echo -e "TOP RAM CONSUMER: ""$BLUE$topramprocess$RESET"
echo "RAM Usage (RSS): $topramMB MB"
echo "Total Number of RAM Processes: $ramtotalprocesses"


totalRAMall=$( printf "%.2f" $(ps -Fe --sort:-rss --no-headers | grep -v grep | grep $topramrss | awk '{total += $6}END{print total / 1024 }'))
rampercentage=$( printf "%.2f\n" $( echo - | awk -v t=$total -v tra=$totalRAMall '{ print tra / t }'))


#command below checks total ram usage of top RAM consumer and ALL of its threads and compares to total RAM avaiable. If it is higher than the threshold of 70% then a warning is produced.
totalramcheck=$(echo - | awk -v ramp=$rampercentage '{print ( ramp < 70 )}')
if [ "$totalramcheck" -ge 1 ]; then
    echo -e "Total RAM Usage for all $BLUE$topramprocess$RESET processes = " $GREEN$totalRAMall" MB"$RESET
    echo -e $GREEN$rampercentage$RESET"% used by "$topramprocess
elif [ "$totalramcheck" -le 0 ]; then
    echo -e "Total RAM usage for all $BLUE$topramprocess$RESET processes = " $RED$totalRAMall" MB"$RESET
    echo -e $RED$rampercentage$RESET"% used by "$topramprocess
fi

#####CPU#####
echo ""
echo ""
echo "###CPU usage###"
echo -e "Top Process: " $BLUE$topprocess$RESET

cpuchecktest=$( echo - | awk -v topcpu=$topcpu '{print ( topcpu < 50 )}' )
    if [ "$cpuchecktest" -ge 1 ]; then
        echo -e "CPU % for SINGLE Top Process = " "$GREEN$topcpu$RESET"
    elif [ "$cpuchecktest" -le 0 ]; then
        echo -e "CPU % for SINGLE Top Process = " "$RED$topcpu$RESET"
    fi
    
threads=$( ps afx | grep -v grep | grep -ci $topprocess )
echo -e "number of processes this is running: $UNDERLINE$threads$RESET"

#add all of the processes up and then print the total:
totalcpu=$( ps aux | grep $topprocess | grep -v grep | awk '{total += $3}END{print total}' )


totalcpuchecktest=$( echo - | awk -v totalcpu=$totalcpu '{print ( totalcpu < 70 )}')
    if [ "$totalcpuchecktest" -ge 1 ]; then
        echo -e "Total CPU % for $BLUE$topprocess$RESET = " "$GREEN$totalcpu$RESET"
    elif [ "$totalcpuchecktest" -le 0 ]; then
        echo -e "Total CPU % for $BLUE$topprocess$RESET = " "$RED$totalcpu$RESET"
    fi


echo ""
echo $neat
#######################################

server_stats.txt · Last modified: 2024/05/23 07:26 by 127.0.0.1