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
39 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
1414991

Help Support Ethan Galstad's New Project:

Help Support Ethan

A Message From The Founder...

As the founder of Nagios, I'm asking for your help in a cause that's dear to my heart.

I'm launching a new project to help better the world by providing the information, ideas, and inspiration that I believe can improve the lives of people everywhere.

I know you're busy managing networks, but I would appreciate it if you would consider liking my Facebook page and showing your support for the content and messages I produce by sharing them with your friends and family.

You can learn more about my project by visiting ethangalstad.me/nagios. Thank you for your time. I wish you all the best in your endeavors, whatever they may be.

- Ethan

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 (13)
Call me noob but I don't get it. The documentation states the following...

Please keep in mind that check_mssql_health’s functionality is limited when using SQL Server authentication. This method is strongly discouraged . Normally there is already a Nagios-(Windows-)-user which can be used for the Windows authentication method.

So how is this possible on a Linux server? With an NRPE plugin on the remote machine? But how? What am I missing?
Hi,
This script works fine for what I needed. Except for mode failed-job. Many error about uninitialized value and there is no way to filter on the job name.
So, I've debugged the script for this part and added a --filter parameter that take a regex and filter on the job name.
You can find my version of the script here : https://pastebin.com/1VvwuSfa
byadum, December 20, 2017
Plugin is working without error but only the connection-time mode seems to return some values. The others just return "OK"
Connecting to database with sa so I don't think it's permission related.
I say average because:
1) It obviously works for SOMEONE here
2) My experience mirrors the user from 2009, who said:
"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."
It's a pity that linux software/tool config&install details have to remain cryptic and/or non-existent.
I'm not a newbie, but just trying to get this thing up & running is fairly painful..
;(
I REALLY want(ed) it to work..
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.