Solved

script to get cpu utilization and compare it against a value

Posted on 2009-05-05
11
581 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Secure Your WordPress Site: 5 Essential Approaches

WordPress is the web's most popular CMS, but its dominance also makes it a target for attackers. Our eBook will show you how to:

Prevent costly exploits of core and plugin vulnerabilities
Repel automated attacks
Lock down your dashboard, secure your code, and protect your users

 
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
 

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

The Orion Papers

Are you interested in becoming an AWS Certified Solutions Architect?

Discover a new interactive way of training for the exam.

Question has a verified solution.

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

Utilizing an array to gracefully append to a list of EmailAddresses
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:

691 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