[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