I’ve been playing with Nagios recently and have been using NSClient++ to monitor Windows machines. In some places the documentation wasn’t too great so I thought I’d outline some service checks I’ve got working here. The service definitions here would normally be defined on the Nagios host not on the Windows box itself.

Check Windows Memory Usage with NSClient++

Warn if memory usage reaches 85%, critical if 90%.

define service {
        use generic-service
        host_name windoze
        service_description Memory Usage
        check_command check_nt!MEMUSE!-w 85 -c 90
        servicegroups windows
}

Check Windows Disk Usage with NSClient++

Warn if the disk is 85% full, critical at 90%. It seems there’s no way to check all disks at once. You have to setup a check for each one separately.

define service {
        use generic-service
        host_name windoze
        service_description C:\ Drive Space
        check_command check_nt!USEDDISKSPACE!-l c -w 85 -c 90
        servicegroups windows
}

Check Windows Service is running with NSClient++

This will alert if the MSSQLSERVER service is not running.

define service {
        use generic-service
        host_name windoze
        service_description SQL Server Engine
        check_command check_nt!SERVICESTATE!-d SHOWALL -l MSSQLSERVER
        servicegroups sql-server
}

Check a Windows Executable is running with NSClient++

This will check that the process sqlservr.exe is running.

define service {
        use generic-service
        host_name windoze
        service_description Process Check Test
        check_command check_nt!PROCSTATE!-d SHOWALL -l sqlservr.exe=started
        servicegroups windows
}

Check SQL Server CPU Time with NSClient++

This check accesses Windows performance counters. Documentation on this wasn’t great. Consult the list of counters in perfmon.exe for what’s available. Two backslahes are needed.

define service {
        use generic-service
        host_name windoze
        service_description Perf CPU Counter Test
        check_command check_nt!COUNTER!-l "\\Process(sqlservr)\\% Processor Time","CPU Time for sqlservr is %.f.0 %%","Processor Time"
        servicegroups windows
}

 Check SQL Server Memory Working Set with NSClient++

Virtually the same setup as the previous check. Just a different counter is accessed to return the memory used by SQL Server.

define service {
        use generic-service
        host_name windoze
        service_description Perf Mem Counter Test
        check_command check_nt!COUNTER! -d SHOWALL -l "\\Process(sqlservr)\\Working Set","Mem Working Set for sqlservr is %.f.0","Working Set"
        servicegroups windows
}

Check SQL Server User Connections with NSClient++

Another performance monitor counter check. This one returns the number of user connections to the SQL Server instance.

define service {
        use generic-service
        host_name windoze
        service_description SQL Server User Connections
        check_command check_nt!COUNTER!-d SHOWALL -l "\\SQLServer:General Statistics\\User Connections","Number of Users: %.f",Users
        servicegroups sql-server
}