[Xymon] Netbackup client status script?

Nico nicolas at lienard.name
Thu Oct 25 20:40:49 CEST 2012


Hello

we got this one done recently but it is a bit ugly but it has been working fine.
you ll have to modify some variable like $bbdisp and maybe others.

it has to run on the netbackup server (ours is running on solaris).

let me know if you have questions.

cheers
Nico


#!/usr/bin/perl -w

#
# nlienard (with help of mward)
# 2012-08-01
# Retrieve netbackup status then publish it on hobbit
#

use Switch;
use strict;
use warnings;

# Fields output by the command are:

# 1 jobid               2 jobtype       3 state         4 status
# 5 class               6 schedule      7 client        8 server
# 9 started     10 elapsed      11 ended        12 stunit
# 13 try                14 operation    15 kbytes       16 files
# 17 pathlastwritten    18 percent      19 jobpid       20 owner
# 21 subtype    22 classtype    23 schedule_type        24 priority
# 25 group      26 masterserver 27 retentionunits       28 retentionperiod
# 29 compression        30 kbyteslastwritten    31 fileslastwritten     32 trystatus
# 33 trystatusdescription       34 parentjob    35 kbpersec     36 copy
# 37 robot      38 vault        39 profile      40 session
# 41 ejecttapes 42 srcstunit    43 srcserver    44 srcmedia
# 45 dstmedia   46 stream       47 suspendable  48 resumable
# 49 restartable        50 datamovement 51 snapshot     52 backupid
# 53 killable   54 controllinghost

# Hobbit variables
my $bb = "/opt/xymon/server/bin/xymon";
my $coltmon = "10.64.3.6";
my $test = "netbackup";

my( $jobid, $jobtype, $state, $status, $class, $schedule, $client, $server, $started, $ended, $kbytes);
my (%record, $rec);
my ($tmpfile, $self);

my $today = scalar localtime(time) ;
$today =~ s/\w+\s(\w+)\s+(\d+).*/$1  $2/;
my $yesterday = scalar localtime(time-86400) ;

$yesterday =~ s/\w+\s(\w+)\s+(\d+).*/$1  $2/;
my $yesterday2 = scalar localtime(time-172800) ;
$yesterday2 =~ s/\w+\s(\w+)\s(\d+).*/$1  $2/;

my $todayX = scalar localtime(time) ;
$todayX =~ s/\w+\s(\w+)\s+(\d+).*/$1 $2/;
my $yesterdayX = scalar localtime(time-86400) ;
$yesterdayX =~ s/\w+\s(\w+)\s+(\d+).*/$1 $2/;
my $yesterday2X = scalar localtime(time-172800) ;
$yesterday2X =~ s/\w+\s(\w+)\s(\d+).*/$1 $2/;


open(BPP, "/usr/openv/netbackup/bin/admincmd/bpdbjobs -all_columns 2>/dev/null |") || die "Cannot execute bpdbjobs command: $!";

while (<BPP>) {
        chomp;
        s/'/\'/g; # Escape any un-escaped single quotes.
        (
                $jobid,
                $jobtype,
                $state,
                $status,
                $class,
                $schedule,
                $client,
                $server,
                $started,
                undef,
                $ended,
                undef,
                undef,
                undef,
                $kbytes,
                undef
        ) = split(/,/);

        $record{$jobid}{jobid} = "$jobid";

        $record{$jobid}{jobtype} = "$jobtype";
        $record{$jobid}{state} = "$state";
        $record{$jobid}{status} = "$status";
        $record{$jobid}{class} = "$class";
        $record{$jobid}{schedule} = "$schedule";
        $record{$jobid}{client} = "$client";
        $record{$jobid}{server} = "$server";
        $record{$jobid}{started} = "$started";
        $record{$jobid}{ended} = "$ended";
        $record{$jobid}{kbytes} = "$kbytes";
}

close(BPP);

#
# %record now has all the data in it.
#


my @ignore = qw(ignore_host1 ignore_host2);

# Loop through the hash extracting entries
foreach $rec ( keys %record ) {
        # Set the hostname
        my $hostname = $record{$rec}{client};
        $hostname =~ s/(.*)\.oss.*/$1/;

        if (!($hostname)) {
                next;
        }

        if (grep { $_ eq $hostname } @ignore) {
        #if ( $hostname ~~ @ignore ) {
                next;
        }


        #print "checking " . scalar(localtime($record{$rec}{started})) . " with $yesterday and $today\n";
        #if ( (scalar(localtime($record{$rec}{started})) =~ /$yesterday/) || (scalar(localtime($record{$rec}{started})) =~ /$today/) ) {
        if ( (scalar(localtime($record{$rec}{started})) =~ /$yesterday/) || (scalar(localtime($record{$rec}{started})) =~ /$today/) || (scalar(localtime($record{$
rec}{started})) =~ /$yesterdayX/) || (scalar(localtime($record{$rec}{started})) =~ /$todayX/) ) {
                #if ($record{$rec}{class} =~ /Production/) {

                        # Set the color
                        my $color = "yellow";
                        my $state_color = "yellow";
                        my $msg = "&${color}This device is not correctly backuped";

                        my $state;
                        switch ( $record{$rec}{state} ) {
                                case 0 {  $state = "Queued";}
                                case 1 {  $state = "Active";}
                                case 2 {  $state = "Queued";}
                                case 3 {  $state = "Done";}
                                case 4 {  $state = "Suspended";}
                                case 5 {  $state = "Incomplete";}
                        }


                        # there are state and status.
                        # state is the general status
                        # status is the detail status

                        # state = 3 = Done = Green
                        if ( $record{$rec}{state} eq 3 ) {
                                $color = "green";
                                $state_color = "green";
                                $msg = "&${color}This device is correctly backuped";
                        }

                        # if state = 3 but status  != 0, then error => yellow
                        if ( $record{$rec}{status} ne 0 ) {
                                $color = "yellow";
                                $msg = "&${color}This device is backuped but with errors";
                        }



                        my $kbytes = "&yellow No data backuped";
                        if ($record{$rec}{kbytes}) {

                                $kbytes = "&green $record{$rec}{kbytes}";
                        }

                        my $ttl = "2d";
                        if ($record{$rec}{schedule} =~ /Weekly/ ) {
                                $ttl = "8d";
                        }


                        # build msg for hobbit
                        #my $line = "status+2d $hostname.$test $color";
                        my $line = "status+$ttl $hostname.$test $color";

                        $line .= "\n\t<H2>$msg</H2>\n";
                        $line .= "<table border=1>";
                        $line .= "<tr><th>State</th><td>&${state_color}" . $state . "</td></tr>";
                        $line .= "<tr><th>Status</th><td>&${color}" . $record{$rec}{status} . "</tr>";
                        $line .= "<tr><th>Jobid</th><td>" . $record{$rec}{jobid} . "</td></tr>";
                        $line .= "<tr><th>Class</th><td>" . $record{$rec}{class} . "</td></tr>";
                        $line .= "<tr><th>Schedule</th><td>" . $record{$rec}{schedule} . "</td></tr>";
                        $line .= "<tr><th>Client</th><td>" . $record{$rec}{client} . "</td></tr>";
                        $line .= "<tr><th>Server</th><td>" . $record{$rec}{server} . "</td></tr>";
                        $line .= "<tr><th>Started</th><td>" . scalar(localtime($record{$rec}{started})) . "</td></tr>";
                        $line .= "<tr><th>Ended</th><td>" . scalar(localtime($record{$rec}{started})) . "</td></tr>";
                        $line .= "<tr><th>kbytes</th><td>" . $kbytes . "</td></tr>";
                        $line .= "</table>";
                        $line .= "\nIf this check is purple, that means there is NO BACKUP anymore. Raise a ticket to BACKUP Team";

                        # debug
                        #print "\nPublishing status for $hostname to hobbit $bbdisp\n\n";



                        # publish status to hobbit central
                        #system "$bb $bbdisp \"$line\"";

                        # publish status to hobbit local
                        my $bbdisp  = `grep -i "$hostname " ~xymon/server/etc/hosts.d/LOCALDCS/* |cut -d/ -f9 |cut -d: -f1 | head -1`;
                        #print "debug1 bbdisp:[$bbdisp]\n";

                        chomp($bbdisp);
                        #print "debug2 bbdisp:[$bbdisp]\n";

                        if ($bbdisp) {
                                print "\nPublishing status for $hostname to hobbit $bbdisp";
                                #print "\n$bb $bbdisp \"$line\"";
                                #publish status to hobbit central
                                system "$bb $coltmon \"$line\"";
                                # publish status to hobbit local
                                system "$bb $bbdisp \"$line\"";
                        #} else {
                                #print "\nNOT Publishing status for $hostname to hobbit $bbdisp\n\n";
                        }

                        # debug
                        #print "jobid: ", $record{$rec}{jobid}, "\n";
                        #print "\tjobtype: ", $record{$rec}{jobtype}, "\n";
                        #print "\tstate: ", $record{$rec}{state}, "\n";
                        #print "\tstatus: ", $record{$rec}{status}, "\n";
                        #print "\tclass: ", $record{$rec}{class}, "\n";
                        #print "\tschedule: ", $record{$rec}{schedule}, "\n";
                        #print "\tclient: ", $record{$rec}{client}, "\n";
                        #print "\tstarted: ", scalar(localtime($record{$rec}{started})), "\n";
                        #print "\tended: ", scalar(localtime($record{$rec}{ended})), "\n";
                        #print "\tkbytes: ", $record{$rec}{kbytes}, "\n";
                }
        #}
}


Le 25 oct. 2012 à 20:01, KING, KEVIN a écrit :

> Ages ago I wrote a package for netbackup on the Big Brother system. It tacked a bunch of stuff and told you when the backup tapes could recycled and such. But all our stuff was on Sun equipment. I think your Idea of loading the binaries on a nix box may be a good way. Let me see if I can find my work. It used to be on deadcat long time ago.
>  
> From: xymon-bounces at xymon.com [mailto:xymon-bounces at xymon.com] On Behalf Of Ricardo Stella
> Sent: Thursday, October 25, 2012 11:14 AM
> To: xymon at xymon.com
> Subject: [Xymon] Netbackup client status script?
>  
> 
> We are finally migrating out of Tivoli to Symantec's Netbackup.  We currently have a backup tab for each client which would report some stats - number of files, number of bytes, and status.
> 
> Looking at doing something similar, however, it seems that most of the status commands are only available to be run on the netbackup master or media servers. 
> 
> I've found the following nagios script:  http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=2566&cf_id=24
> 
> But in order not to reinvent the wheel, does anyone have something similar?  Further, our master and media servers are running windows, which makes scripting a little more challenging.
> 
> If not, if I install the media server bits on a linux box (without registering it on the netbackup domain) would this be enough to query the DB and produce reports?  If so, perl or bash would do it.
> 
> Thanks in advance...
> 
> --
> °((( = (( ===°°° ((( ================================================
>  
> _______________________________________________
> Xymon mailing list
> Xymon at xymon.com
> http://lists.xymon.com/mailman/listinfo/xymon

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20121025/92745c55/attachment.html>


More information about the Xymon mailing list