Hello Kern,

Is it correctly attached now ?

Ludovic.

Kern Sibbald wrote:
Hello Ludovic,

Could you send the script as an attachment.  As it came, it was line 
wrapped ...

Regards,

Kern

On Thursday 06 July 2006 20:22, Ludovic Strappazon wrote:
  
Hello Arno,

This is the script :

#! /bin/sh
# Author : Ludovic Strappazon. [EMAIL PROTECTED]
# Copyright : Kern Sibbald
# Any comment, advice or enhancement are welcome :-)

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MYSQL="/usr/bin/mysql -u bacula --password=XXXXX"
TMP=/tmp
BACULA=/usr/local/bacula

PROGNAME=`basename $0`
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
STATUS=""

. $PROGPATH/utils.sh

print_usage() {
        echo "Usage: $PROGNAME -P <pool> -M <media-type> -w <warning
threshold> -c <critical threshold> [-S]"
}

print_help() {
        echo ""
        print_usage
        echo ""
        echo "This plugin checks the space available in the pool against
the space required for the next scheduled backups"
        echo "Example : $PROGNAME -P default -M LTO -w 20 -c 10 will
check the default pool, return OK if (available space) > 1,20*(required
space), WARNING if 1,20*(required space) > (available space) >
1,10*(required space), and CRITICAL else."
    echo ""
    echo "With the -S option, it will check the pool named Scratch and
return WARNING instead of CRITICAL if the Scratch pool can save the
situation."
    echo "Example : $PROGNAME -P default -M LTO -w 20 -c 10 -S will
check the default pool, return OK if (available space) > 1,20*(required
space), WARNING if 1,20*(required space) > (available space) >
1,10*(required space) or if (available space in default and Scratch) >
1,10*(required space) > (available space in default), and CRITICAL else."
    echo ""
    echo "The evaluation of the space required is done by adding the
biggest backups of the same level than the scheduled jobs"
    echo "The available space is evaluated by the number of out of
retention tapes and the average VolBytes of these Full tapes"
    echo ""
    echo "The Information Status are : \"Required, Available, Volume
Errors\" and \"Will use Scratch pool\" if necessary."
    echo ""
    echo "I think this plugin should be used in passive mode, and ran by
a RunAfterJob"
    exit 3
}

NB_ARGS=$#
SCRATCH=0
while getopts :P:M:w:c:hS OPTION
do
  case $OPTION in
    P) POOL="$OPTARG"
       ;;
    M) MEDIA_TYPE="$OPTARG"
       ;;
    S) SCRATCH=1
       ;;
    w) WARNING="$OPTARG"
       ;;
    c) CRITICAL="$OPTARG"
       ;;
    h) print_help
       exit 3
       ;;
    *) print_usage
       exit 3
       ;;
  esac
done
shift $(($OPTIND - 1))

if [ "$NB_ARGS" -ne 8 -a "$NB_ARGS" -ne 9 ]; then
    print_revision $PROGNAME 13/06/2006
    print_usage
        exit 3
fi

LAST_CHECK=`ps -ef | grep check_ba[Cc]ula_pools.sh | awk {'print $5'} |
uniq | wc -l`
if [ "$LAST_CHECK" -gt 1 ]; then
    echo "The last check was not complete, you should increase the
check_period."
    exit 3
fi

NB_VOLUMES=`$MYSQL << EOF
USE bacula
SELECT COUNT(MediaId) from Media, Pool where Media.PoolId=Pool.PoolId
and Pool.Name="$POOL" AND Inchanger = "1";
EOF`

NB_VOLUMES=`echo $NB_VOLUMES | cut -f 2 -d ' '`

echo "st
1
q" | $BACULA/etc/bconsole | sed -n /Scheduled/,/Running/p | grep Backup

| tr -s [:blank:] | tr '[:blank:]' '@' > ${TMP}/Scheduled.txt

CAPA_REQUIRED=0
for LINE in `cat ${TMP}/Scheduled.txt`
do
  SCHEDULED_JOB=`echo $LINE | awk -F@ '{print $6}'`
  LEVEL=`echo $LINE | awk -F@ '{print $1}' | cut -c 1`

MAX_VOLUME_JOB_FOR_LEVEL=`$MYSQL << EOF
USE bacula
SELECT MAX(JobBytes) from Job, Pool where Level="$LEVEL" AND
Job.Name="$SCHEDULED_JOB" AND Job.PoolId=Pool.PoolId AND Pool.Name="$POOL";
EOF
`
MAX_VOLUME_JOB_FOR_LEVEL=`echo $MAX_VOLUME_JOB_FOR_LEVEL | cut -f 2 -d ' '
`

CAPA_REQUIRED=$[CAPA_REQUIRED+MAX_VOLUME_JOB_FOR_LEVEL]
done

rm ${TMP}/Scheduled.txt


if [ $NB_VOLUMES -gt 0 ]
then

  NB_VOLUMES_OUT_OF_RETENTION=`$MYSQL << EOF
USE bacula
SELECT COUNT(MediaId) from Media, Pool where Media.PoolId=Pool.PoolId
and Pool.Name="$POOL" AND LastWritten <> "0000-00-00 00:00:00" AND
UNIX_TIMESTAMP()-UNIX_TIMESTAMP(LastWritten)>Media.VolRetention AND
Inchanger = "1";
EOF
`
  NB_VOLUMES_OUT_OF_RETENTION=`echo $NB_VOLUMES_OUT_OF_RETENTION | cut
-f 2 -d ' '`

NB_VOLUMES_ERROR=`$MYSQL << EOF
USE bacula
SELECT COUNT(MediaId) from Media, Pool where Media.PoolId=Pool.PoolId
and Pool.Name="$POOL" AND VolStatus="Error" AND Inchanger = "1";
EOF
`
NB_VOLUMES_ERROR=`echo $NB_VOLUMES_ERROR | cut -f 2 -d ' '`

AVERAGE_CAPA_VOLUME=`$MYSQL << EOF
USE bacula
SELECT SUM(VolBytes)/COUNT(MediaId) FROM Media where VolStatus="Full"
AND MediaType="$MEDIA_TYPE";
EOF
`
AVERAGE_CAPA_VOLUME=`echo $AVERAGE_CAPA_VOLUME | cut -f 2 -d ' ' | cut
-f 1 -d '.'`

CAPA_VOLUMES_APPEND=`$MYSQL << EOF
USE bacula
SELECT SUM("$AVERAGE_CAPA_VOLUME"-VolBytes) from Media, Pool where
Media.PoolId=Pool.PoolId and Pool.Name="$POOL" AND (VolStatus = "Append"
OR VolStatus = "Recycle" OR VolStatus = "Purge") AND Inchanger = "1" AND
MediaType="$MEDIA_TYPE";
EOF
`
CAPA_VOLUMES_APPEND=`echo $CAPA_VOLUMES_APPEND | cut -f 2 -d ' '`

if [ $SCRATCH -eq 1 ]
then
CAPA_VOLUMES_SCRATCH=`$MYSQL << EOF
USE bacula
SELECT SUM("$AVERAGE_CAPA_VOLUME"-VolBytes) from Media, Pool where
Media.PoolId=Pool.PoolId and Pool.Name="Scratch" AND VolStatus =
"Append" AND Inchanger = "1" AND MediaType="$MEDIA_TYPE";
EOF
`
CAPA_VOLUMES_SCRATCH=`echo $CAPA_VOLUMES_SCRATCH | cut -f 2 -d ' '`
else
CAPA_VOLUMES_SCRATCH=0
fi

CAPA_WARNING=`echo $[(WARNING+100)*CAPA_REQUIRED]/100 | bc | cut -f 1 -d
'.'`
CAPA_CRITICAL=`echo $[(CRITICAL+100)*CAPA_REQUIRED]/100 | bc | cut -f 1
-d '.'`
CAPA_DISP=$[NB_VOLUMES_OUT_OF_RETENTION*AVERAGE_CAPA_VOLUME+CAPA_VOLUMES_AP
PEND] CAPA_DISP_INCLUDING_SCRATCH=$[CAPA_DISP+CAPA_VOLUMES_SCRATCH]

MESSAGE="Required : $[CAPA_REQUIRED/1000000000] Go, available :
$[CAPA_DISP/1000000000] Go, Volumes Error : $NB_VOLUMES_ERROR"

if [ "$CAPA_DISP" -gt $CAPA_WARNING ]; then
   echo $MESSAGE
   exit 0
elif [ "$CAPA_DISP" -gt $CAPA_CRITICAL ];then
   echo $MESSAGE
   exit 1
elif [ "$CAPA_DISP_INCLUDING_SCRATCH" -gt $CAPA_CRITICAL ];then
   MESSAGE="${MESSAGE}. Will use Scratch Pool !"
   echo $MESSAGE
   exit 1
else
   exit 2
fi
exit 3

else
  echo "No volume in pool ${POOL}"
  if [ "$CAPA_REQUIRED" -gt 0 ]
     then exit 2
     else exit 0
  fi
fi

Arno Lehmann wrote:
    
Hello,

On 7/6/2006 5:10 PM, Ludovic Strappazon wrote:
      
Hi Mark,

I've written a nagios shell script to check my pools in the way you
describe.
I also remember that Arno Lehmann did something similar in perl (it is
distibuted with the bacula sources)
        
Erm, no, not really.
I considered adding such a function to the baculareport scrip I created,
but never actually found it necessary. But I really like to see what
you've got :-)

      
Regards,
Ludovic Strappazon.

[EMAIL PROTECTED] a écrit :
        
Is there any way to have bacula predict how many volumes will be
needed for the next night's backup?
My goal is to make sure that the autochanger is always loaded with
enough tapes
to handle the next night's backup, without changing tapes every day.

I'm interested in having bacula notify me in advance that it guesses
that the
following night's backup will require "N" volumes. I don't want to run
"estimate" for each client (which is a time-consuming and resource
intensive
action), and then sum the results. It would be great if bacula made
use of
information that's in the database to get the average of the sizes of
the last
"X" backups of the same level that's scheduled for the next backup
(ie., full,
incremental, differential) for each client, and then added a
user-defined fudge-factor (maybe 10%) to guess at the size of the
upcoming backup for all
scheduled jobs.
          
I would even try to estimate the expected growth (does *anybody* have
backup sets that become smaller over time?) from the existing backups.
Simply assume a linear growth and add the observed error to your result.
Or something. I would need to brush up my mathematical / statistical
knowledge a bit :-)

      
For example, most of our non-full backups are under 100GB for all
clients combined, so our autochanger can run for a long time without
manually removing
full tapes and putting in new ones. However, full backups can be
anywhere from
40GB to over 2TB (depending on the client). To reduce contention, full
backups
are set up with a staggered schedule--each client does a "full" on a
different
night. It would be nice to get some warning from bacula that the next
night's
backup will "probably" take 6 volumes, so that I can make sure the
enough empty
(or over-writeable) tapes are loaded.


Any suggestions about scripting such an "early warning system"? I'm
thinking of something like:

----------- bad pseudo-code ---------------------------
    foreach $client sqlquery("Get list of clients scheduled to backup
tonight")
    {
        $backup_level=sqlquery("Get level of next backup for $client");
          
One problem might be to get the pool the next backup goes to.

      
        $size=average(sqlquery "size in GB of all backups for
                $client of $backup_level");

        $predictedsize=$total + $size;
    }

    $predictedsize=$predictedsize * $fudgefactor;
          
This would need to be calculated per pool, IMO.

      
    foreach $volsize (sqlquery("Select VolumeSize in GB
                    where VolumeStatus='Full'"))
    {
        $volsizetotal=$volsize + $volsizetotal;
        $volcount++;     }

    $average_GB_to_fill_volume=$volsizetotal/$volcount;
          
I do have some function to estimate volume capacity in baculareport.pl
which is a little more complicated, but still gives reasonable results
:-)

      
    $volumes_needed=$predictedsize / $average_GB_to_fill_volume;

    roundup($volumes_needed);

    print "There will be $volumes_needed needed for tonight's backup";
------------ EO bad pseudo-code
-------------------------------------------
          
Apart from my obsession with with putting backups of different levels to
different pools and storage devices, I fully agree - such a script would
be a nice addition.

Arno

      
Thanks,

Mark
----
Mark Bergman                      [EMAIL PROTECTED]
System Administrator
Section of Biomedical Image Analysis             215-662-7310
Department of Radiology,           University of Pennsylvania

http://pgpkeys.pca.dfn.de:11371/pks/lookup?search=mark.bergman%40.uphs.
upenn.edu




The information contained in this e-mail message is intended only for
the personal and confidential use of the recipient(s) named above. If
the reader of this message is not the intended recipient or an agent
responsible for delivering it to the intended recipient, you are
hereby notified that you have received this document in error and that
any review, dissemination, distribution, or copying of this message is
strictly prohibited. If you have received this communication in error,
please notify us immediately by e-mail, and delete the original
message.

Using Tomcat but need to do more? Need to support web services,
security? Get stuff done quickly with pre-integrated technology to make
your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache
Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=12164
2 _______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users
          
------------------------------------------------------------------------

Using Tomcat but need to do more? Need to support web services,
security? Get stuff done quickly with pre-integrated technology to make
your job easier Download IBM WebSphere Application Server v.1.0.1 based
on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642


------------------------------------------------------------------------

_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users
        

  

Attachment: check_bacula_pools.sh
Description: Bourne shell script

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Bacula-users mailing list
Bacula-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bacula-users

Reply via email to