• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 589
  • Last Modified:

script to get cpu utilization and compare it against a value

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
dpoper1
Asked:
dpoper1
  • 6
  • 5
1 Solution
 
ozoCommented:
what did you get in  $UTIL3 ?
0
 
dpoper1Author Commented:
cut -c 21-24 $UTIL2
./util.sh: line 22: [: too many arguments
0
 
dpoper1Author Commented:
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
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

 
ozoCommented:
did you mean to use ` instead of ' ?
0
 
ozoCommented:
and you may have wanted
UTIL3=`mpstat -u | grep -Ev "Linux|%" | sed '/^$/d' | cut -c 21-24`
note `
 not  '

0
 
dpoper1Author Commented:
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
 
ozoCommented:
can we see what
echo $UTIL1
and
echo $LIMIT
show?
you may need
if [ "$UTIL1" -gt "$LIMIT" ]
0
 
ozoCommented:
sorry, I see that the error now is different
you might try
if awk "BEGIN{exit $UTIL1 < $LIMIT}"
then
0
 
dpoper1Author Commented:
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
 
ozoCommented:
-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
 
dpoper1Author Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now