微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nagios监控sqlserver2005镜像

 more /opt/nagios/nagiosweb/libexec/@H_502_7@check_mirror
@H_502_7@#!/bin/bash
export LD_LIBRARY_PATH=/usr/local/lib
/opt/nagios/nagiosweb/libexec/check_dbmirroringbk  -H $1 -o $2 -d $3 -u $4 -p $5

 

[root@localhost libexec]# more /opt/nagios/nagiosweb/libexec/check_dbmirroringbk
@H_502_7@#!/usr/bin/perl -w

use strict;
use Getopt::Long;
use DBI;

# Nagios specific

use lib "/opt/nagios/nagiosweb/libexec/";-----结合nagios安装目录修改
@H_502_7@#use lib "/usr/lib/nagios/plugins";
use utils qw(%ERRORS $TIMEOUT);
#my $TIMEOUT = 15;
#my %ERRORS=('OK'=>0,'WARNING'=>1,'CRITICAL'=>2,'UNKNowN'=>3,'DEPENDENT'=>4);


my $o_host;
my $o_db;
my $o_port;
my $o_user="sa";
my $o_pw="";
my $name="";
my $state="";
my $role="";

sub print_usage {
    print "\n";
    print "Usage: check_dbmirroring.pl -H <host> -d <database> [-u <username>] [-p <password>] [-o <port>]\n";
    print "\n";
    print "\tDefault Username is 'sa' without a password\n\n";
    print "\tScript should be run on the PRINCIPAL with a read-only user\n";
    print "\tIf you want to run it on the MIRROR,the user MUST have SYSADMIN rights on the sql-Server\n";
    print "\totherwise you get NULL\n";
    print "\n";
}

sub check_options {
    Getopt::Long::Configure ("bundling");
    Getoptions(
        'H:s'   => \$o_host,
        'd:s'   => \$o_db,
        'u:s'   => \$o_user,
        'p:s'   => \$o_pw,
        'o:s'   => \$o_port
@H_502_7@        );
    if (!defined ($o_host) || !defined ($o_db)) { print_usage(); exit $ERRORS{"UNKNowN"}};
}

########## MAIN #######

check_options();

my $exit_val;

# Connect to database
my $dbh =DBI->connect("dbi:Sybase:server=$o_host:$o_port","$o_user","$o_pw") or exit $ERRORS{"UNKNowN"};
my $sth=$dbh->prepare("SELECT d.name,m.mirroring_role_desc,m.mirroring_state_desc
                       FROM sys.database_mirroring m
                       JOIN sys.databases d ON m.database_id = d.database_id
                       WHERE mirroring_state_desc IS NOT NULL AND name = '$o_db'");
$sth->execute;

while (my @row = $sth->fetchrow_array) {
         $name=$row["0"];
         $role=$row["1"];
        $state=$row["2"];
}

$exit_val=$ERRORS{"CRITICAL"};
$exit_val=$ERRORS{"OK"} if ( $role eq "PRINCIPAL" ) && ( $state eq "SYNCHRONIZED" );


print "OK - $name - $role - $state\n"        if ($exit_val eq $ERRORS{"OK"});
print "CRITICAL - Check your mirroring settings\n" if ($exit_val eq $ERRORS{"CRITICAL"});
exit $exit_val;

 

添加监控命令@H_502_7@

define command{
        command_name    check_sqlserver_mirroring
        command_line    $USER1$/check_mirror $HOSTADDRESS$ $_HOSTPORT$ $_SERVICEdbnAME$ $_HOSTDBUSER$ $_HOSTDBPASSWORD$
        }

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

添加监控主机和监控服务@H_502_7@

define host{
        use             windows-server  ;
        host_name       sql186    ;
        alias           sql186    ;
        address         xxx..xx.xx186;
        _port           XXXX
        _dbuser         XXXXXXXXXXXX
        _dbpassword     XXXXXXXXXXXXXXX
        }

 

define service{
        use                     generic-service
        host_name               sql186    ; The name we're giving to this host
        _dbname                 user
        normal_check_interval   2
        service_description     sqlmirror_186_card
        check_command           check_sqlserver_mirroring
        }

 

 

参考文献

http://labs.consol.de/nagios/check_mssql_health/

 

http://www.voidcn.com/article/p-bquiwaer-bbr.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐