SQLServer

check_mssql_health

Description:

check_mssql_health is a plugin which checks several metrics of MS SQL Server.

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

Project Photos
Project Notes
$ 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) Add a Review
How does this work with Windows authentication?
by ReneKNAW, May 31, 2019

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?



Works fine but need more feature
by jdurand, October 31, 2018

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



Just 'ok' in returned values
by adum, December 31, 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.



confusing as hell
by celticpiping, May 31, 2017

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..



Error with nagios plugin check_mssql_health
by Ricardo27, November 30, 2016

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



--name option
by mad12, November 30, 2016

how can i check multiple databases with --name options ? , can i check all database but not system databases (tempdb,model ecc) ?



Problem with Download-Link on
by marc, June 30, 2015

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



I had to make a few small changes to get jobs_failed working.
by rhousand, March 31, 2014

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} "; } } } }



Excellent
by sampinar, November 30, 2011

Thank you very much. Works like a charm.



by mrtexasfreedom, October 31, 2011




Connecting to the SQL Server
by nicola.sarobba, July 31, 2010

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



Any how-to?
by Dario, April 30, 2010

The document is in german, I didn't found any how-to install :(



Review
by derekmorris7, June 30, 2009

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.



Add a Review

You must be logged in to submit a review.

Thank you for your review!

Your review has been submitted and is pending approval.

Recommend

To:


From:


Thank you for your recommendation!

Your recommendation has been sent.

Project Stats
Rating
4.3 (39)
Favorites
10
Views
1,452,809