Ova skripta će napraviti izvestaje o iskorišćenosti resursa na dnevnom ili mesečnom nivou i poslati vam iste na mail kako biste mogli da proverite da li je možda nekad bilo nekakvog zagušenja. Skripta koristi sar koji je deo paketa sysstat, tako da instalirajte taj paket standardnim yum install, sudo apt-get install i sličnim metodama zavisno od distribucije.

Ovo može biti neki vid ‘brzinskog monitoringa’ ako vam je mrsko da instalirate Nagios ili slični monitoring alat – ovde odmah posle yum install sysstat – generisanje izvestaja pocinje na dnevnom nivou.

Zavisno od distribucije ali sar kad je istaliran obično čuva statistiku poslednjih 28 dana (pogledati liniju HISTORY u config fajlu /etc/sysconfig/sysstat), i istu prikuplja svakih 10 minuta…ali ako želite da stavite manju vrednost kako bi rezultati bili još validniji promenite to u crontab fajlu: /etc/cron.d/sysstat ali imajte na umu da će to povećati ili smanjiti „sa“ fajlove (kad je na 10 minuta log po danu je oko pola megabajta).

Sar pamti u formatu /var/log/sa/sa<DanUMesecu> tako da će recimo sar -q /var/log/sa/sa15 dati podatke o loadu za ovaj mesec (ako je današnji datum >15, tj ako recimo 22 Maj) ili za 15-ti prethodnog meseca (ako je danas dan <15 odnosno recimo 10 Maj) i dobićete izvestaje samo za dane u kojima se statistika generisala.
Ovde skriptu okidamo na CentOS 7 linuxu, na drugim distroima može da se razlikuje putanja do sa fajlova. Ovde sam stavio proveru iskorišćenosti CPU, RAM, SWAP, I/O, diska (provera diska nije istorijska već trenutna) ali možete dodati i vi svoje provere za sar.

#!/bin/bash
#########################################################################################
# Opis: Skripta za report i statistiku iskoriscenja resursa po danu ili po srednjim 
# vrednostima i slanje tih reporta na email. Crontab ready skripta.
# Autor: Kompjuteras.com, Slobodni ste da skriptu koristite/menjate kako vam srcu drago
#
# Crontab primer (da se okida svakog prvog u mesecu):
# 00  01  1  *  *  /root/skripte/ResourceProvera.sh > /tmp/CrontabResourceProvera.log 2>&1
#
#########################################################################################
 
shopt -s expand_aliases           # Za slucaj da mailx ima varijable
source /root/.bash_profile        # za potrebe crontaba

###################################### VARIJABLE #########################################
# Ime servera u human friendly formatu, prefix (PROD, TEST, STAGOD, HOSNTAME i IP adrese)
# Mozete i da hardkodujete, tipa IME_SERVERA=KOMPJUTERAS
JAVNA_IP_ADRESA=$(ip route get 8.8.8.8 | grep src | sed 's/.*src \(.*\)$/\1/g' | cut -d ' ' -f1)
IME_SERVERA="$(hostname -s) (${JAVNA_IP_ADRESA})"

# Ko treba da dobija izvestaje, ako ima vise primaoca dodati ih (separator je prazno mesto)
MAIL_TO="moj@mejl.kom"

# Gde treba da se pakuju privremeni logovi. Najbolje u tmp folder. Svetite nesto ne-sistemsko
LOGFAJL_PREFIX=/tmp/SAR

# Da li zelite da vam stize izvestaj po svakom danu zasebno (u jednom fajlu ce biti)
# Ako da stavite Y ako ne stavite N
IZVESTAJ_PO_DANU=Y

# Da li zelite da vam prosecne (average) vrednosti iskoriscenja resursa)
# Napomena, ako ste restartovali server imacete dva average za taj dan, average do restarta 
# i na kraju dana
# Ako da stavite Y ako ne stavite N          
IZVESTAJ_SA_PROSECIMA_PO_DANU=Y
##########################################################################################

# Da li je sysstat instaliran
if [ `hash sar 2>/dev/null  ; echo $?` -gt 0 ] ; then echo "Instalirajte sysstat program prvo, izlazim!" ; exit 1 ; fi
if [ `hash mail 2>/dev/null ; echo $?` -gt 0 ] ; then echo "Instalirajte mailx program prvo, izlazim!"   ; exit 1 ; fi

# Gde se nalaze sar arhive statistika
CONFIG_FILE="$(grep '/sa/' /etc/cron.d/sysstat | grep -v '#' | awk '{print $7}' | head -1)"
SAR_LOG_FILE_LOCATION="$(cat $CONFIG_FILE | grep DDIR= | cut -d '=' -f2)"

# Brisi stare logove
rm -f ${LOGFAJL_PREFIX}_*.log
# Generisanje punog loga - ako je IZVESTAJ_PO_DANU=Y  bice i oni poslati u zasebnom mailu
for i in {01..30}
do
	if [ -f ${SAR_LOG_FILE_LOCATION}/sa${i} ] ; then
		echo "`sar -u -f ${SAR_LOG_FILE_LOCATION}/sa${i} ` | DayOfTheMonth ${i}" | grep -v `hostname` >> ${LOGFAJL_PREFIX}_CPU.log
		echo "`sar -r -f ${SAR_LOG_FILE_LOCATION}/sa${i} ` | DayOfTheMonth ${i}" | grep -v `hostname` >> ${LOGFAJL_PREFIX}_RAM.log
		echo "`sar -S -f ${SAR_LOG_FILE_LOCATION}/sa${i} ` | DayOfTheMonth ${i}" | grep -v `hostname` >> ${LOGFAJL_PREFIX}_SWP.log
		echo "`sar -q -f ${SAR_LOG_FILE_LOCATION}/sa${i} ` | DayOfTheMonth ${i}" | grep -v `hostname` >> ${LOGFAJL_PREFIX}_LOAD.log
		echo "`sar -b -f ${SAR_LOG_FILE_LOCATION}/sa${i} ` | DayOfTheMonth ${i}" | grep -v `hostname` >> ${LOGFAJL_PREFIX}_IO.log
	fi
done

# Generisanje average loga
	# CPU iskoriscenost
	CPU_CORES=`cat /proc/cpuinfo | grep vendor_id | wc -l`
	echo "CPU Cores       : ${CPU_CORES}"                        > ${LOGFAJL_PREFIX}_CPU_AVG.log
	cat /proc/cpuinfo | grep 'model name' | sort -u             >> ${LOGFAJL_PREFIX}_CPU_AVG.log
	cat /proc/cpuinfo | grep 'cpu MHz'    | sort -u             >> ${LOGFAJL_PREFIX}_CPU_AVG.log
	echo "-----------------------------"                        >> ${LOGFAJL_PREFIX}_CPU_AVG.log
	echo "`sar -u | sed -n 3p` | Description"                   >> ${LOGFAJL_PREFIX}_CPU_AVG.log
	cat ${LOGFAJL_PREFIX}_CPU.log | grep 'Average:'             >> ${LOGFAJL_PREFIX}_CPU_AVG.log
	# RAM iskoriscenost
	echo "-----------------------------"                         > ${LOGFAJL_PREFIX}_RAM_AVG.log
	cat /proc/meminfo | grep 'MemTotal'  | sort -u              >> ${LOGFAJL_PREFIX}_RAM_AVG.log
	cat /proc/meminfo | grep 'SwapTotal' | sort -u              >> ${LOGFAJL_PREFIX}_RAM_AVG.log
	echo "-----------------------------"                        >> ${LOGFAJL_PREFIX}_RAM_AVG.log
	echo "`sar -r | sed -n 3p` | Description"                   >> ${LOGFAJL_PREFIX}_RAM_AVG.log
	cat ${LOGFAJL_PREFIX}_RAM.log    | grep 'Average:'          >> ${LOGFAJL_PREFIX}_RAM_AVG.log
	# SWAP iskoriscenost
	echo "-----------------------------"                         > ${LOGFAJL_PREFIX}_SWP_AVG.log
	cat /proc/meminfo | grep 'SwapTotal' | sort -u              >> ${LOGFAJL_PREFIX}_SWP_AVG.log
	echo "-----------------------------"                        >> ${LOGFAJL_PREFIX}_SWP_AVG.log
	echo "`sar -S | sed -n 3p` | Description"                   >> ${LOGFAJL_PREFIX}_SWP_AVG.log
	cat ${LOGFAJL_PREFIX}_SWP.log    | grep 'Average:'          >> ${LOGFAJL_PREFIX}_SWP_AVG.log
	# LOAD servera
	echo "-----------------------------"                         > ${LOGFAJL_PREFIX}_LOAD_AVG.log
	echo "CPU Cores       : ${CPU_CORES}"                       >> ${LOGFAJL_PREFIX}_LOAD_AVG.log
	echo "-----------------------------"                        >> ${LOGFAJL_PREFIX}_LOAD_AVG.log
	echo "`sar -q | sed -n 3p` | Description"                   >> ${LOGFAJL_PREFIX}_LOAD_AVG.log
	cat ${LOGFAJL_PREFIX}_LOAD.log | grep 'Average:'            >> ${LOGFAJL_PREFIX}_LOAD_AVG.log
	# Zauzetost diska
	echo "------------------------------------------------"      > ${LOGFAJL_PREFIX}_HDD.log
	df -Ph | grep -v tmpfs                                      >> ${LOGFAJL_PREFIX}_HDD.log
	echo "------------------------------------------------"     >> ${LOGFAJL_PREFIX}_HDD.log
	# I/O aktivnosti
	echo "-----------------------------"                         > ${LOGFAJL_PREFIX}_IO_AVG.log
	echo "I/O activity on server"                               >> ${LOGFAJL_PREFIX}_IO_AVG.log
	echo "-----------------------------"                        >> ${LOGFAJL_PREFIX}_IO_AVG.log
	echo "`sar -b | sed -n 3p` | Description"                   >> ${LOGFAJL_PREFIX}_IO_AVG.log
	cat ${LOGFAJL_PREFIX}_IO.log | grep 'Average:'              >> ${LOGFAJL_PREFIX}_IO_AVG.log

# Ako ste odabrali da zelite izvestaj sa srednjim vrednostima
if [ ${IZVESTAJ_SA_PROSECIMA_PO_DANU} == "Y" ] ; then
echo "Prosecne vrednosti su u prilogu" | mail -s "${IME_SERVERA} - Prosecna iskoriscenost resursa zu 30 dana" \
-a ${LOGFAJL_PREFIX}_CPU_AVG.log  \
-a ${LOGFAJL_PREFIX}_RAM_AVG.log  \
-a ${LOGFAJL_PREFIX}_SWP_AVG.log  \
-a ${LOGFAJL_PREFIX}_LOAD_AVG.log \
-a ${LOGFAJL_PREFIX}_IO_AVG.log   \
-a ${LOGFAJL_PREFIX}_HDD.log      \
${MAIL_TO}
fi
# Ako ste odabrali da zelite detaljnije izvestaj sa po danu
if [ ${IZVESTAJ_PO_DANU} == "Y" ] ; then
echo "Puna statistika je u prilogu"    | mail -s "${IME_SERVERA} - Iskoriscenost po danima za 30 dana" \
-a ${LOGFAJL_PREFIX}_CPU.log  \
-a ${LOGFAJL_PREFIX}_RAM.log  \
-a ${LOGFAJL_PREFIX}_SWP.log  \
-a ${LOGFAJL_PREFIX}_LOAD.log \
-a ${LOGFAJL_PREFIX}_IO.log   \
-a ${LOGFAJL_PREFIX}_HDD.log  \
${MAIL_TO}
fi

exit 0

Evo recimo kako izgleda jedan izvestaj sa srednjim vrednostima vezan za srednju CPU iskorišćenost za sve CPU coreove