Solved

script to get cpu utilization and compare it against a value

Posted on 2009-05-05
11
573 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
Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

 

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

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

I am a long time windows user and for me it is normal to have spaces in directory and file names. Changing to Linux I found myself frustrated when I moved my windows data over to my new Linux computer. The problem occurs when at the command line.…
SSH (Secure Shell) - Tips and Tricks As you all know SSH(Secure Shell) is a network protocol, which we use to access/transfer files securely between two networked devices. SSH was actually designed as a replacement for insecure protocols that sen…
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

759 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