Search Exchange

Search All Sites

Nagios Live Webinars

Let our experts show you how Nagios can help your organization.

Contact Us

Phone: 1-888-NAGIOS-1
Email: sales@nagios.com

Login

Remember Me

check_mssql_health Popular

Rating
34 votes
Favoured:
10
Current Version
1.5.8
Last Release Date
2010-12-20
Compatible With
  • Nagios 1.x
  • Nagios 2.x
  • Nagios 3.x
  • Nagios XI 2009R1
  • Nagios Fusion 2010R1
Owner
Hits
1387380
Network Monitoring Software - Download Nagios XI
Log Management Software - Nagios Log Server - Download
Netflow Analysis Software - Nagios Network Analyzer - Download
check_mssql_health
check_mssql_health is a plugin which checks several metrics of MS SQL Server.
$ check_mssql_health --help

Copyright (c) 2009 Gerhard Lausser


Check various parameters of MSSQL databases

Usage:
check_mssql_health [-v] [-t ] --hostname=
--username= --password= [--port ]
--mode=
check_mssql_health [-v] [-t ] --server=
--username= --password=
--mode=
check_mssql_health [-h | --help]
check_mssql_health [-V | --version]

Options:
--hostname
the database server
--port
the database server's port
--server
the name of a predefined connection
--currentdb
the name of a database which is used as the current database
for the connection. (don't use this parameter unless you
know what you're doing)
--username
the mssql user
--password
the mssql user's password
--warning
the warning range
--critical
the critical range
--mode
the mode of the plugin. select one of the following keywords:
connection-time (Time to connect to the server)
cpu-busy (Cpu busy in percent)
io-busy (IO busy in percent)
full-scans (Full table scans per second)
connected-users (Number of currently connected users)
transactions (Transactions per second (per database))
batch-requests (Batch requests per second)
latches-waits (Number of latch requests that could not be granted immediately)
latches-wait-time (Average time for a latch to wait before the request is met)
locks-waits (The number of locks per second that had to wait)
locks-timeouts (The number of locks per second that timed out)
locks-deadlocks (The number of deadlocks per second)
sql-recompilations (Re-Compilations per second)
sql-initcompilations (Initial compilations per second)
total-server-memory (The amount of memory that SQL Server has allocated to it)
mem-pool-data-buffer-hit-ratio (Data Buffer Cache Hit Ratio)
lazy-writes (Lazy writes per second)
page-life-expectancy (Seconds a page is kept in memory before being flushed)
free-list-stalls (Requests per second that had to wait for a free page)
checkpoint-pages (Dirty pages flushed to disk per second. (usually by a checkpoint))
database-free (Free space in database)
database-backup-age (Elapsed time (in hours) since a database was last backupped)
sql (any sql command returning a single number)
list-databases (convenience function which lists all databases)
list-datafiles (convenience function which lists all datafiles)
list-locks (convenience function which lists all locks)

--name
the name of the database etc depending on the mode.
--name2
if name is a sql statement, this statement would appear in
the output and the performance data. This can be ugly, so
name2 can be used to appear instead.
--regexp
if this parameter is used, name will be interpreted as a
regular expression.
--units
one of %, KB, MB, GB. This is used for a better output of mode=sql
and for specifying thresholds for mode=tablespace-free

Database-related modes check all databases in one run by default.
If only a single database should be checked, use the --name parameter.
The same applies to datafile-related modes.

In mode sql you can url-encode the statement so you will not have to mess
around with special characters in your Nagios service definitions.
Instead of
--name="select count(*) from master..sysprocesses"
you can say
--name=select%20count%28%2A%29%20from%20master%2E%2Esysprocesses
For your convenience you can call check_mssql_health with the --encode
option and it will encode the standard input.

Reviews (9)
byRicardo27, November 29, 2016
1 of 1 people found this review helpful
Hello!
I want to ask you about the check_mssql_health plug in. The plug in works properly in the server in any mode but this does not happen in Nagios web version. Could you help me with this please?

Error: UNKNOWN - cannot create status dir /var/tmp/check_mssql_health! check your filesystem (permissions/usage/integrity) and disk devices, cannot write status file /var/tmp/check_mssql_health/cpu-busy_secs_busy_ip-server
bymad12, November 8, 2016
how can i check multiple databases with --name options ? , can i check all database but not system databases (tempdb,model ecc) ?
Hi there

Unfortunately on the labs.consol.de page there is an issue with the download link to the plugins. The links are pointing to "download/nagios/check_mssql_health-1.5.20.6.tar.gz" which is not working.

Regards

Marc
Script errored due to empty $minutessincestart:

sub nagios {
my $self = shift;
my %params = @_;
if (! $self->{nagios_level}) {
if ($params{mode} =~ /server::jobs::failed/) {
if ($self->{lastrunstatus} ne "succeeded") {
if ($self->{lastrunstatus} eq "failed") {
$self->add_nagios_critical(
sprintf "%s failed: %s", $self->{name}, $self->{lastrunstatusmessage});
} elsif ($self->{lastrunstatus} eq "retry" || $self->{lastrunstatus} eq "canceled") {
$self->add_nagios_warning(
sprintf "%s %s: %s", $self->{name}, $self->{lastrunstatus}, $self->{lastrunstatusmessage});
} else {
if ($self->{lastrunstatus}) {
print "else: $params{mode} $self->{name} $self->{lastrunstatus}
";
$self->add_nagios(
$self->check_thresholds($self->{lastrundurationseconds}, 60, 300),
#sprintf("job %s ran for %d seconds (started %s)
", $self->{name},
sprintf("job %s ran for %d seconds (started %s)", $self->{name},
$self->{lastrundurationseconds}, $self->{lastrundatetime}));
}
}
} else {
print "OK - $self->{name}, $self->{lastrundurationseconds}, $self->{lastrundatetime}
";
}
}
}
}


Script alerted if lastrunstatus was not set:

sub nagios {
my $self = shift;
my %params = @_;
if (! $self->{nagios_level}) {
if ($params{mode} =~ /server::jobs::failed/) {
if ($self->{lastrunstatus} ne "succeeded") {
if ($self->{lastrunstatus} eq "failed") {
$self->add_nagios_critical(
sprintf "%s failed: %s", $self->{name}, $self->{lastrunstatusmessage});
} elsif ($self->{lastrunstatus} eq "retry" || $self->{lastrunstatus} eq "canceled") {
$self->add_nagios_warning(
sprintf "%s %s: %s", $self->{name}, $self->{lastrunstatus}, $self->{lastrunstatusmessage});
} else {
if ($self->{lastrunstatus}) {
print "else: $params{mode} $self->{name} $self->{lastrunstatus}
";
$self->add_nagios(
$self->check_thresholds($self->{lastrundurationseconds}, 60, 300),
#sprintf("job %s ran for %d seconds (started %s)
", $self->{name},
sprintf("job %s ran for %d seconds (started %s)", $self->{name},
$self->{lastrundurationseconds}, $self->{lastrundatetime}));
}
}
} else {
print "OK - $self->{name}, $self->{lastrundurationseconds}, $self->{lastrundatetime}
";
}
}
}
}
bysampinar, November 17, 2011
Thank you very much. Works like a charm.
bymrtexasfreedom, October 13, 2011
bynicola.sarobba, July 11, 2010
1 of 1 people found this review helpful
There is an english translation on the project site.

Connecting with the perl Sybase module can be somewhat tricky.
I finally got a succesfull connection this way:

1 - Edit /etc/freetds/freetds.conf

[sqlhost1]
host = 192.168.1.1
port = 1433
tds version = 8.0

2 - Use the --server command line option instead of the --hostname option:

check_mssql_health --server=sqlhost1 --username=nagiosuser --password=nagiospass --mode connected-users
byDario, April 23, 2010
0 of 2 people found this review helpful
The document is in german, I didn't found any how-to install :(
byderekmorris7, June 22, 2009
2 of 2 people found this review helpful
Not easy to get working, still having hell of a time getting DBD::Sybase to install. Really would like to have this but most likely wont due to sybase requirement.