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&...
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...
-- °((( = (( ===°°° ((( ================================================
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&...
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...
°((( = (( ===°°° ((( ================================================
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&...
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
Have you considered adding it to xymonton.org?
=G=
From: xymon-bounces at xymon.com [xymon-bounces at xymon.com] on behalf of Nico [nicolas at lienard.name] Sent: Thursday, October 25, 2012 2:40 PM To: KING, KEVIN Cc: xymon at xymon.com Subject: Re: [Xymon] Netbackup client status script?
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> [mailto:xymon-bounces at xymon.com] On Behalf Of Ricardo Stella Sent: Thursday, October 25, 2012 11:14 AM To: xymon at xymon.com<mailto: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&...
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<mailto:Xymon at xymon.com> http://lists.xymon.com/mailman/listinfo/xymon
participants (4)
-
Galen.Johnson@sas.com
-
KK1051@att.com
-
nicolas@lienard.name
-
stella@rider.edu