Solved

script to get cpu utilization and compare it against a value

Posted on 2009-05-05
11
574 Views
Last Modified: 2013-12-26
Hi I need assistance in a script which main purpose would be to display the cpu utilization and if exceeds threshold it will generate a file and it will send out and email.
#!/bin/bash
 

#LOGFILE=/var/log/monitoring/cpu/util
 

#mkdir -p $LOGFILE
 

#mpstat -u > $LOGFILE/util

UTIL="mpstat -u"
 

#cat $LOGFILE/util | grep -Ev "Linux|%" > $LOGFILE/util1

UTIL1="mpstat -u|grep -Ev "Linux|%""
 

#Deleting empty lines

#sed '/^$/d' $LOGFILE/util1 >> $LOGFILE/util2

UTIL2="sed '/^$/d' $UTIL1"
 

UTIL3="cut -c 21-24 $UTIL2"

echo  $UTIL3

Open in new window

0
Comment
Question by:dpoper1
  • 6
  • 5
11 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 24306554
what did you get in  $UTIL3 ?
0
 

Author Comment

by:dpoper1
ID: 24306580
cut -c 21-24 $UTIL2
./util.sh: line 22: [: too many arguments
0
 

Author Comment

by:dpoper1
ID: 24306623
Here is my code, but I still get the error provided above.

#!/bin/bash
 

LIMIT="50"

ADMINS=myemail@gmail.com

LOGFILE=/var/log/monitoring/cpu/cpuutil.log
 

#mkdir -p $LOGFILE
 

UTIL='mpstat -u'
 

UTIL1='$UTIL|grep -Ev "Linux|%"'
 

#Deleting empty lines

UTIL2='sed '/^$/d' $UTIL1'
 

UTIL3='cut -c 21-24 $UTIL2'

echo  $UTIL3
 

if [ $UTIL3 -gt $LIMIT ]

then

    echo "Current CPU Utilization: $UTIL3" >> $LOGFILE

    echo "CPU Threshold: $LIMIT" >> $LOGFILE

    mail -s "CPU Utilization on $hostname is over CPU Threshold" $ADMINS < $LOGFILE                      

#    scp $LOGFILE root@headnode:/mnt/disk01/alerts/cpu/

fi

Open in new window

0
 
LVL 84

Expert Comment

by:ozo
ID: 24306805
did you mean to use ` instead of ' ?
0
 
LVL 84

Expert Comment

by:ozo
ID: 24306839
and you may have wanted
UTIL3=`mpstat -u | grep -Ev "Linux|%" | sed '/^$/d' | cut -c 21-24`
note `
 not  '

0
Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

 

Author Comment

by:dpoper1
ID: 24306843
I have narrowed down the code, please take a look below, but I still get the following error:


./util.sh: line 13: [: 0.16: integer expression expected




#!/bin/bash
 

LIMIT="50"

ADMINS=myemail@gmail.com

LOGFILE=/var/log/monitoring/cpu            
 

mkdir -p $LOGFILE
 

UTIL1=$(mpstat -u|grep -Ev "Linux|%" | sed '/^$/d' | cut -c 21-24)
 

#echo $UTIL1
 

if [ $UTIL1 -gt $LIMIT ]

then

    echo "Current CPU Utilization: $UTIL3" >> $LOGFILE/cpuutil.log

    echo "CPU Threshold: $LIMIT" >> $LOGFILE/cpuutil.log

#    mail -s "CPU Utilization on $hostname is over CPU Threshold" $ADMINS < $LOGFILE/cpuutil.log

#    scp $LOGFILE/cpuutil.log root@headnode:/mnt/disk01/alerts/cpu/

    rm -f $LOGFILE/cpuutil.log

fi

Open in new window

0
 
LVL 84

Expert Comment

by:ozo
ID: 24306905
can we see what
echo $UTIL1
and
echo $LIMIT
show?
you may need
if [ "$UTIL1" -gt "$LIMIT" ]
0
 
LVL 84

Expert Comment

by:ozo
ID: 24306966
sorry, I see that the error now is different
you might try
if awk "BEGIN{exit $UTIL1 < $LIMIT}"
then
0
 

Author Comment

by:dpoper1
ID: 24306985
take a look at the code, I have modified the if statement to reflect integers as well as the LIMIT VALUE with 2 decimals and I still get an error

0.16
50.01
./util.sh: line 14: [: 0.16: integer expression expected



#!/bin/bash
 

LIMIT="50.01"

ADMINS=myemail@gmail.com

LOGFILE=/var/log/monitoring/cpu
 

mkdir -p $LOGFILE
 

UTIL1=$(mpstat -u|grep -Ev "Linux|%" | sed '/^$/d' | cut -c 21-24)
 

echo $UTIL1

echo $LIMIT
 

if [ "$UTIL1" -gt "$LIMIT" ]

then 

    echo "Current CPU Utilization = $UTIL3" >> $LOGFILE/cpuutil.log

    echo "CPU Threshold = $LIMIT" >> $LOGFILE/cpuutil.log

#    mail -s "CPU Utilization on $hostname is over CPU Threshold" $ADMINS < $LOGFILE/cp

uutil.log

#    scp $LOGFILE/cpuutil.log root@headnode:/mnt/disk01/alerts/cpu/

    rm -f $LOGFILE/cpuutil.log

fi

Open in new window

0
 
LVL 84

Accepted Solution

by:
ozo earned 125 total points
ID: 24307195
-gt only compares integers, not values with 2 decimal places
you can use a different function for comparing, such as awk "BEGIN{exit $UTIL1 < $LIMIT}"
or, if it is always exactly 2 decimal places, you can convert it to an integer by removing the  .
0
 

Author Comment

by:dpoper1
ID: 24307226
It worked thanks a million, I have changed the LIMIT value to test out the script.

Thanks once again.

Regards,

Michael

#!/bin/bash
 

#LIMIT="50.01"

LIMIT="0.3"

ADMINS=myemail@gmail.com

LOGFILE=/var/log/monitoring/cpu
 

mkdir -p $LOGFILE
 

UTIL1=$(mpstat -u|grep -Ev "Linux|%" | sed '/^$/d' | cut -c 21-24)
 

#echo $UTIL1

#echo $LIMIT
 

#if [ "$UTIL1" -gt "$LIMIT" ]

if awk "BEGIN{exit $UTIL1 < $LIMIT}"

then 

    echo "Current CPU Utilization = $UTIL1" >> $LOGFILE/cpuutil.log

    echo "CPU Threshold = $LIMIT" >> $LOGFILE/cpuutil.log

    mail -s "CPU Utilization on $hostname is over CPU Threshold" $ADMINS < $LOGFILE/cpu

util.log

#    scp $LOGFILE/cpuutil.log root@headnode:/mnt/disk01/alerts/cpu/

    rm -f $LOGFILE/cpuutil.log

fi

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How many times have you wanted to quickly do the same thing to a list but found yourself typing it again and again? I first figured out a small time saver with the up arrow to recall the last command but that can only get you so far if you have a bi…
Fine Tune your automatic Updates for Ubuntu / Debian
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now