Имејл извештај о искоришћености ресурса путем команде sar – сумирано и по дану
Ова скрипта ће направити известаје о искоришћености ресурса на дневном или месечном нивоу и послати вам исте на мејл како бисте могли да проверите да ли је можда некад било некаквог загушења. Скрипта користи „sar“ који је део пакета sysstat, тако да инсталирајте тај пакет стандардним yum install, sudo apt-get install и сличним методама зависно од дистрибуције.
Зависно од дистрибуције али sar кад је исталиран обично чува статистику последњих 28 дана (погледати линију HISTORY у конфиг фајлу /etc/sysconfig/sysstat), и исту прикупља сваких 10 минута…али ако желите да ставите мању вредност како би резултати били још валиднији промените то у crontab фајлу: /etc/cron.d/sysstat али имајте на уму да ће то повећати или смањити „sar“ фајлове (кад је на 10 минута лог по дану је око пола мегабајта).
Sar памти у формату /var/log/sa/sa<DanUMesecu> тако да ће рецимо sar -q /var/log/sa/sa15 дати податке о load-у за овај месец (ако је данашњи датум >15, тј ако рецимо 22 Мај) или за 15-ти претходног месеца (ако је данас дан <15 односно рецимо 10 Мај) и добићете извештаје само за дане у којима се статистика генерисала.
Овде скрипту окидамо на ЦентОС седмици, на другим дистроима може да се разликује путања до са фајлова. Овде сам ставио проверу искоришћености CPU, RAM, SWAP, I/О диска (провера диска није историјска већ тренутна) али можете додати и ви своје провере за 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
Ево рецимо како изгледа један известај са средњим вредностима везан за средњу CPU искоришћеност за сва CPU језгра.