Very nice! I think we can make that work.

Thanks for that!!!
chakkerz

On Aug 26, 8:44 pm, Gerard Bernabeu <berna...@pic.es> wrote:
> Hi,
>
> I'm using nagios to monitor puppet by runing the script below in each host.
> The script looks at the log file, it returns 0 if everything is OK or 1 if
> there's some error.
>
> Cheers,
> -------------------------------------------------------------------------
> Gerard Bernabeu
> Port d'Informació Científica (PIC)              e_mail: berna...@pic.es
> Campus UAB - Edificio D                           Tel: +34 93 581 33 22
> 08193 Bellaterra (Barcelona), Spain               Fax: +34 93 581 41 10
> -------------------------------------------------------------------------
>
> <SCRIPT>
> cat check_puppet_log.sh
> #!/bin/bash
> # This senseror checks if puppet is running successfully and logging it
>
> LOGFILE=/var/log/puppet/puppet.log
> rc=0
> message=""
>
> awk=awk
> if [ "`uname`" = "SunOS" ]; then
>    awk=/opt/csw/bin/gawk
> fi
>
> #1st we check if the logfile exists, if not we'll raise an error
>
> if [ ! -f $LOGFILE ]; then
>     puppetversion=""
>     puppetversion=`puppetd --version`
>
>     if [ "$puppetversion" = "" ]; then
>         echo "Puppet is not even installed in this host"
>     else
>         echo "Puppet $puppetversion log file does not exist $LOGFILE"
>     fi
>     exit 1
> fi
>
> #we check if the last line in the log is newer than 1 hour and is a clean
> finish
> linia=`tail -1 $LOGFILE | $awk '{print $3 " " $4}' | cut -d: -f1`
> date=`date +"%a %b %e %T %Z %Y" | $awk '{print $3 " " $4}' | cut -d: -f1`
>
> i=0
> for x in $linia; do
>     let i++
>     y="`echo $date | $awk -v i=$i '{print $i}'`"
>     if [ $i -eq 1 ]; then
>                 #Day num comparition
>         let dif="10#$y-10#$x"
>         if [ $dif -gt 1 ]; then  #If we've more than 1 day difference...
>             message="$message WARN: Last log is $dif days old, check if
> puppet is running."
>             rc=1
>         fi
>     else
>         if [ $i -eq 2 ]; then
>             #Hour comparition
>             if [ $y -gt 2 ]; then #We make sure that its later than 2
> because we dont want to deal with the day change "issue"
>                 let dif="10#$y-10#$x"
>                 if [ $dif -gt 2 ]; then #And we've more than 2 hours
> difference
>                     message="$message WARN: Last log is $dif hours old,
> check if puppet is running."
>                     rc=1
>                 fi
>             fi
>         fi
>         fi
> done
>
> #In case a problem has been detected we quit to avoid loading the server....
> if [ "$rc" != "0" ]; then
>     echo $message
>     exit $rc
> fi
>
> #we check if the last line of the log is a successful finish, if not we'll
> check if puppet is running, and since when....
>
> missatgeOK="`tail -1 $LOGFILE | grep "Puppet (notice): Finished catalog run
> in"`"
> if [ $? -eq 1 ]; then #This means that message has not been found and we
> should look further
>     procsdate=`ps -ef | grep puppet | grep -v grep | $awk '{print $5}'`
>     for i in $procsdate;
>     do
>         if [ "$i" != "`date +"%a %b %e %T %Z %Y" | $awk '{print $2$3}'`" ];
> then #This means that the process is old
>             message="$message CRIT: there are puppet procs running since $i"
>             rc=1
>         fi
>     done
> fi
>
> #We analyze the last run log
> tac=tac
> if [ "`uname`" = "SunOS" ]; then
>    tac=/opt/csw/bin/gtac
> fi
>
> finish=0
> $tac $LOGFILE | while read line; do
>     if [ `echo $line | grep 'Puppet (notice): Finished catalog run in' >
> /dev/null; echo $?` -eq 0 ]; then
>         if [ $finish -eq 0 ]; then #we discard the first finish.
>             finish=1
>         else
>         #We finished processing the last run log
>             if [ "$rc" != "0" ]; then
>                     echo $message
>                     exit $rc
>             else
>                     echo $missatgeOK
>                     exit 0
>             fi
>         fi
>     #We'll process each line grepping for possible errors. To add a new
> error just add a new || condition to the following line:
>     elif [ `echo $line | grep '(err)' > /dev/null; echo $?` -eq 0 ] || [
> `echo $line | grep 'skipping catalog run' > /dev/null; echo $?` -eq 0 ];
> then
>         echo "$message ERROR: $line"
>         exit 1
>     fi
> done
>
> </SCRIPT>
>
> On Wed, Aug 26, 2009 at 5:57 AM, Robin Sheat <ro...@kallisti.net.nz> wrote:
> > Op woensdag 26 augustus 2009 15:44:21 schreef chakkerz:
> > > Yeah, the timestamp is useful but only shows a complete failure, that
> > > is one in which the host didn't make contact (i could be wrong).
>
> > It has alerted me to faults where the catalogue wouldn't compile due to
> > syntax
> > errors or whatever (it's probably about time I put the syntax checker onto
> > SVN
> > really.) However I suspect it wouldn't notify errors where the syntax is
> > fine,
> > but an operation can't be performed for some reason.
>
> > --
> > Robin <ro...@kallisti.net.nz> JabberID: <eyth...@jabber.kallisti.net.nz>
> >http://www.kallisti.net.nz/blog      |||      http://identi.ca/eythian
>
> > PGP Key 0xA99CEB6D = 5957 6D23 8B16 EFAB FEF8  7175 14D3 6485 A99C EB6D
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-users@googlegroups.com
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to