We also use this one to summarily check (with nagios) the backups.
If it can be of any use to someone else...

Ludovic.

Kern Sibbald a écrit :
On Friday 07 July 2006 08:17, Ludovic Strappazon wrote:
  
Hello Kern,

Is it correctly attached now ?
    

Yes, thanks.  I put it in the 1.39 source in examples/database ...

Thanks.

  
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.uph
s. 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=121
64 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=1216
42


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

_______________________________________________
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_backup.sh
Description: application/shellscript

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