[Xymon] Clariion monitoring

Vernon Everett everett.vernon at gmail.com
Fri Sep 21 01:46:15 CEST 2012


Hi Betsy

Thanks very much for that.
Looking at it, I think you knew a lot more perl then than I know now :-)
Even if it was the worst script you ever wrote, it's better than what I
have now, which is nothing.

Thanks again.

Cheers
    Vernon

On 20 September 2012 23:48, Betsy Schwartz <betsy.schwartz at gmail.com> wrote:

> There's this rather crude script
> I learned much more perl since I wrote it and looking at it now
> there's a bunch of stuff I want to fix, but you can play with it
> (I am going to clean it up, and add custom per-device storage levels,
> ask me in a while if I've done that :-)
>
> Assumes youv'e set up sshkey access for xymon user -> "nasadmin" on your
> devices
>
> #!/usr/bin/perl
> #
> # Script to test EMC storage devices in xymon
> #
> #  2011/11/08  1.0   - betsys - initial install
> #
> #
> use strict;
> use warnings;
> use DBI;
> use Time::Local;
>
> #use Net::SSH::Perl;
>
> use constant false => 0;
> use constant true  => 1;
>
> my $REDLEVEL    = 95;
> my $YELLOWLEVEL = 90;
>
> my $REDDOT    = '<IMG SRC="/xymon/gifs/red-recent.gif">';
> my $YELLOWDOT = '<IMG SRC="/xymon/gifs/yellow-recent.gif">';
>
> #-------- Configure
> my $BBHOME    = ENV{BBHOME};     # Path to the BBServer software.
> my $BBTMP     = "$BBHOME/tmp";
> my $BB         = $ENV{'BB'};
> my $BBDISP     = $ENV{'BBDISP'};
> my $BBDISPLAYS = $ENV{'BBDISPLAYS'};
> my $TESTNAME  = "temp";                        # Test name as
> displayed on the main page (bb.html).
>
> #-------- End Configure
>
> my $COLOR     = "clear";
> my $BBTMPLOG  = "$BBHOME/tmp/TESTNAME.tmp";
> my $BBSTATLOG = "$BBHOME/tmp/TESTNAME";
> my $epoch     = time();
> my $date      = localtime($epoch);
> my $status    = "clear";
> my $gored     = false;
> my $goyellow  = false;
> my $nasadmin   = "nasadmin";
>
> my $server = "";    # we're using strict
> my @serverlist = ( "server1.example.com", "server2.example.com",
> "server3.example.com" );
>
> foreach $server (@serverlist)
> {
>     test_uptime($server);
>     test_storage($server);
>     test_replication($server);
>
> }
>
> sub test_replication {
>     my ($serv) = @_;
>     $COLOR    = "green";
>     $gored    = false;
>     $goyellow = false;
>     my @warnings = ("\n");
>
>     my $TESTNAME = "nas_rep";    # Test name as displayed on the main
> page (bb.html).
>     my $nascmd = "export NAS_DB=/nas;/nas/bin/nas_replicate -list";
>     my $sshcmd = "ssh $nasadmin\@$serv \"$nascmd\"";
>
>     my @output   = `$sshcmd  >/tmp/$serv.nas_replicate.out `;
>     my @dataline = `cat /tmp/$serv.nas_replicate.out`;
>
>     open( FH, "< /tmp/$serv.nas_replicate.out" );
>     while (<FH>)
>     {
>         my @line = (split);
>         next if ( @line == 0 );    # skip blanks
>         next unless ( $line[1] =~ /filesystem/ );
>         if ( $line[5] ne "OK" )
>         {
>             $goyellow = true;
>             push( @warnings, "Problem with replication @line \n" );
>         }
>     }
>     if    ( $gored == true )    { $COLOR = "red"; }
>     elsif ( $goyellow == true ) { $COLOR = "yellow"; }
>     else
>     {
>         $COLOR = "green";
>         push( @warnings, "Replication looks OK on $serv\n\n" );
>     }
>
>     my $bbcmd = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR
> $date \n @warnings \n @dataline' ";
>
>     #    print "command is";
>     #    print $bbcmd;
>     #    print "\n";
>
>     system("$bbcmd");
>
> }
>
> sub test_uptime {
>     my ($serv) = @_;
>     $COLOR = "green";
>     my $TESTNAME = "uptime";                                        #
> Test name as displayed on the main page (bb.html).
>     my $nascmd   = "export NAS_DB=/nas;/nas/bin/server_uptime ALL";
>     my $sshcmd   = "ssh nasadmin\@$serv \"$nascmd\"";
>
>     #   my @output = `$sshcmd  >/tmp/$serv.uptime.out 2 >& /dev/null`;
>     my @output = `$sshcmd  >/tmp/$serv.uptime.out `;
>
>     #   print "$server uptime output is  @output \n";
>     open( FH, "< /tmp/$serv.uptime.out" );
>     while (<FH>)
>     {
>         $COLOR = "red" if /fault/;
>     }
>
>     my @dataline = `cat /tmp/$serv.uptime.out`;
>     my $bbcmd    = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR
> $date \n @dataline' ";
>
>     #    print "command is";
>     #    print $bbcmd;
>     #    print "\n";
>     system("$bbcmd");
> }
>
> sub test_storage {
>     my ($serv) = @_;
>     $COLOR    = "green";
>     $gored    = false;
>     $goyellow = false;
>     my @warnings = ("\n");
>     my $TESTNAME = "storage";    # Test name as displayed on the main
> page (bb.html).
>     my $scratch  = "";
>     my ( $fs, $kb, $used, $avail, $cap, $mount );
>
>     my $nascmd =
>       "export NAS_DB=/nas;/nas/bin/server_df ALL |grep -v iscsi| grep
> -v root_ | grep -v ckpt | grep -v automaticND";
>     my $sshcmd   = "ssh nasadmin\@$serv \"$nascmd\"";
>     my @output   = `$sshcmd  >/tmp/$serv.storage.out `;
>     my @dataline = `cat /tmp/$serv.storage.out`;
>
>     #       print "$serv storage output is  @dataline \n";
>     open( FH, "< /tmp/$serv.storage.out" );
>
>     while (<FH>)
>     {
>         next if /server_/;
>         next if /Filesystem/;
>         my @line = (split);
>         if ( @line == 0 ) { next }    # skip blanks
>         if ( @line == 1 )
>         {                             # we might be on the first line
> of a wrapped line
>             $scratch = $line[0];      # but some one-word lines are
> ckpts followed by real lines
>             next;
>         }
>         elsif ( ( @line >= 5 ) && ( $line[4] =~ /\%/ ) )
>         {                             # we have a filesystem data line
>             ( $fs, $kb, $used, $avail, $cap, $mount ) = @line;
>         }
>         elsif ( ( $scratch ne '' ) && ( $line[3] =~ /\%/ ) )
>         {                             # we have the second line of a wrap
>             $fs = $scratch;
>             ( $kb, $used, $avail, $cap, $mount ) = @line;
>         }
>         else
>         {
>             $scratch = "";
>             next;
>         }    #at the moment, not interested in non-data lines
>
>         my $full = $cap;    # number with pesky "%" appended
>         $full =~ s/%//;     # is there a more elegant way to do this?
>
>         #               print "used space is $full % \n";
>         if ( $full >= $REDLEVEL )
>         {
>             $gored = true;
>             push( @warnings,
>                 "$REDDOT  filesystem $fs ($cap used) has reached the
> PANIC level ($REDLEVEL%) on mountpoint $mount \n"
>             );
>         }
>         elsif ( $full >= $YELLOWLEVEL )
>         {
>             $goyellow = true;
>             push( @warnings,
> "$YELLOWDOT  filesystem $fs ($cap used) has reached the WARNING level
> ($YELLOWLEVEL%) on mountpoint $mount \n"
>             );
>         }
>
>         #               my $i=0;
>         #               for ( $i=0; $i<@line; $i++){
>         #                       print "element #$i is $line[$i]\n";
>         #               }
>     }
>
>     #!#     print "$serv output is  @output";
>     if    ( $gored == true )    { $COLOR = "red"; }
>     elsif ( $goyellow == true ) { $COLOR = "yellow"; }
>     else                        { $COLOR = "green"; }
>     my $bbcmd = "$BB $BBDISPLAY 'status+2h $serv.$TESTNAME $COLOR
> $date \n @warnings \n @dataline' ";
>
>     #    print "command is";
>     #    print $bbcmd;
>     #    print "\n";
>
>     system("$bbcmd");
>
> }
>



-- 
"Accept the challenges so that you can feel the exhilaration of victory"
- General George Patton
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xymon.com/pipermail/xymon/attachments/20120921/72d70f8b/attachment.html>


More information about the Xymon mailing list