https://community.icinga.com/t/monitoring-windows-remotely-through-wmi/2007
Below is an example document that explains how to set up and use remote Windows monitoring through WMI with Icinga. You can adjust paths, usernames, and parameters as needed for your environment.
This guide details how to monitor Windows machines without installing an agent by leveraging the Windows Management Instrumentation (WMI) layer. It focuses on using the check_wmi_plus plugin with Icinga, along with the WMIC client on Linux. Although other methods (e.g. PowerShell, SSH, SNMP) exist, this guide covers the WMI solution primarily for legacy environments (Windows Server 2012 and later).
Tested With:
- Icinga 2 v2.10.x
- Icinga Web 2 v2.6.x
- Windows Server 2012 and later
- Prerequisites & Requirements
- Linux Setup: Installing WMIC
- Icinga/Nagios Plugin: Installing check_wmi_plus
- Windows Configuration
- Icinga Configuration
- Conclusion & FAQ
Before beginning the installation, ensure you have the following:
-
On Linux:
- A working WMIC client.
- Perl installed along with required modules (see Icinga/Nagios Plugin section for details).
-
On Windows:
- WMI enabled (usually on by default).
- A dedicated Windows user with minimal privileges but granted WMI access.
- (Recommended) WinRM and Remote Desktop enabled on the Windows node.
The WMIC tool (WMI client for Linux) is needed to query Windows systems. You can either compile it from source or use pre-packaged binaries.
-
Download the Source Code:
Visit:
http://edcint.co.nz/checkwmiplus/download/zenoss-wmi-source-v1-3-14/
Save the archive in a directory such as/usr/local/src/
. -
Extract and Build:
cd /usr/local/src/ tar -xzf zenoss-wmi-source-v1-3-14.tar.gz cd Samba/source ./autogen.sh ./configure make # Optionally run "make install" if needed
-
Troubleshooting Compilation Issues:
-
If you encounter an error like:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at ./pidl/pidl line 583.
edit the indicated line to comment out the use of
defined()
, then re-runmake
. -
You might also see a message such as:
make: *** No rule to make target `wmi/wmiq.o', needed by `bin/wmiq'. Stop.
This can be safely ignored.
-
If further errors occur, try adjusting compiler directives, for example:
make "CPP=gcc -E -ffreestanding"
-
-
Test the Installation:
Run a basic WMIC query:
wmic -U [domain/]adminuser%password //host_or_IP "select TotalPhysicalMemory from Win32_ComputerSystem"
Expected output:
CLASS: Win32_ComputerSystem Name|TotalPhysicalMemory hostname|412180664
If compiling is problematic, you may consider using available RPMs or DEBs. Examples include:
-
DEB:
Debian: Inverse.ca Debian packages
Ubuntu: Inverse.ca Ubuntu packages
The plugin check_wmi_plus is written in Perl. It requires several Perl modules which can be installed either via your distribution’s package manager or CPAN.
Here is an example of the modules and the desired versions:
Module Name | Installed Version | Desired Version |
---|---|---|
Config::IniFiles | 2.79 | 2.58 |
Getopt::Long | 2.4 | 2.38 |
DateTime | 1.04 | 0.66 |
Number::Format | 1.73 | 1.73 |
Data::Dumper | 2.145 | 2.125 |
Scalar::Util | 1.27 | 1.22 |
Storable | 2.45 | 2.22 |
Perl Version | 5.016003 | 5.01 |
-
Install Required Perl Modules:
For example, to install a module from CPAN:
cpan install Number::Format
If you require a specific version, provide the full module distribution filename:
cpan SHLOMIF/Config-IniFiles-2.58.tar.gz
-
Download and Unpack check_wmi_plus:
Obtain the latest release from the plugin Releases page and unpack it in a directory accessible by Icinga (ideally under your custom plugin directory).
-
Adjust the Plugin Configuration:
Edit the main Perl script
check_wmi_plus.pl
and update:-
Location of
utils.pm
:
Adjust the path if it is not in/usr/lib/nagios/plugins
. -
Base Directory:
Set the$base_dir
variable to the installation directory ofcheck_wmi_plus.pl
. -
WMIC Binary Path:
Update$wmic_command
with the full path to your WMIC executable. -
Optional Settings:
Configure$wmi_ini_dir
(path for INI files) and$tmp_dir
(for temporary files, default/tmp/
).
-
To allow remote monitoring, configure WMI on the Windows server:
-
Create a Dedicated User:
-
Open the WMI Control console:
- Press Start → Run, type
wmimgmt.msc
, and click OK.
- Press Start → Run, type
-
In the console tree, right-click WMI Control and select Properties.
-
Navigate to the Security tab.
-
Select the desired namespace and click Security.
-
Click Add, enter the username (or group), verify with Check Names, and click OK.
-
In the Permissions list, adjust the following (as needed):
- Execute Methods: Enable
- Remote Enable: Enable
- Enable Account: Enable
- Read Security: Enable
- Disable write permissions (Full Write, Partial Write, Provider Write, Edit Security).
-
-
Enable WinRM and Remote Desktop in the Firewall:
Open a command prompt (with administrative privileges) and run:
netsh advfirewall firewall set rule group="remote desktop" new enable=Yes winrm quickconfig
When prompted, confirm the changes. You should see output confirming that WinRM is set up with a listener on HTTP.
-
Further Reading:
Refer to WMI for Windows Server documentation for additional details.
Once the Linux and Windows sides are ready, you need to configure Icinga to use the WMI plugin.
Create an authentication file (e.g., /etc/icinga2/wmi.auth
) with the following content:
username=myusername
password=mypassword
domain=mydomain
Set proper permissions to secure the file:
chown root:root /etc/icinga2/wmi.auth
chmod 0400 /etc/icinga2/wmi.auth
Add the following command definition (e.g., in your commands.conf
file):
object CheckCommand "check_wmi" {
import "plugin-check-command"
command = [ PluginDir + "/check_wmi_plus.pl" ]
arguments = {
"-H" = {
value = "$host.address$"
description = "Name or IP address of host to monitor"
}
"-A" = {
value = "$wmi_authfile_path$"
description = "Authentication file path"
}
"-m" = {
value = "$check_mode$"
description = "WMI mode to use for specific check"
}
"-s" = {
value = "$wmi_submode$"
description = "Optional WMI submode"
}
"-a" = {
value = "$wmi_arg1$"
description = "First argument to WMI"
}
"-o" = {
value = "$wmi_arg2$"
description = "Second argument to WMI"
}
"-3" = {
value = "$wmi_arg3$"
description = "Third argument to WMI"
}
"-4" = {
value = "$wmi_arg4$"
description = "Fourth argument to WMI"
}
"-y" = {
value = "$wmi_delay$"
description = "Delay between consecutive WMI queries"
}
"-w" = {
value = "$wmi_warn$"
description = "Warning threshold"
}
"-c" = {
value = "$wmi_crit$"
description = "Critical threshold"
}
"--nodatamode" = {
set_if = "$wmi_nodatamode$"
}
"--inidir" = {
value = "$wmi_inidir$"
description = "Path to the INI directory"
}
}
vars.wmi_authfile_path = "/etc/icinga2/wmi.auth"
vars.wmi_inidir = "/opt/icinga/plugins/check_wmi_plus.d"
vars.wmi_nodatamode = false
}
Create a service template specifically for WMI-based checks (for example, in templates.conf
):
template Service "wmi-service" {
import "generic-service"
check_command = "check_wmi"
check_interval = 1m
retry_interval = 1m
}
Then define service apply rules in a file (e.g., wmi-services.conf
). Below are some sample rules:
apply Service "Free Disk Space" {
import "generic-service"
vars.check_mode = "checkvolsize"
vars.wmi_arg1 = "."
vars.wmi_arg2 = "1"
vars.wmi_arg3 = "1"
vars.wmi_warn = "88"
vars.wmi_crit = "92"
check_command = "check_wmi"
assign where host.vars.os == "Windows"
ignore where host.vars.disable_wmi
}
apply Service "CPU Utilization" {
import "generic-service"
vars.check_mode = "checkeachcpu"
vars.wmi_warn = "95"
vars.wmi_crit = "99"
vars.wmi_timeout = "160"
check_command = "check_wmi"
assign where host.vars.os == "Windows" && host.vars.cpu_utilz
ignore where host.vars.disable_wmi
}
apply Service "IIS: Connections" {
import "generic-service"
vars.check_mode = "checkiis"
vars.wmi_submode = "connections"
vars.wmi_arg1 = "_Total"
vars.wmi_timeout = "190"
check_command = "check_wmi"
assign where host.vars.iis_server
ignore where host.vars.disable_wmi
}
apply Service "MSSQL: General Statistics" {
import "generic-service"
vars.check_mode = "checksql"
vars.wmi_submode = "general"
if (host.vars.mssql_edition == "Express") {
vars.wmi_arg1 = "MSSQLSQLEXPRESS_MSSQLSQLEXPRESS"
}
check_command = "check_wmi"
assign where host.vars.mssql_server
ignore where host.vars.disable_wmi
}
apply Service "Event Log: Application" {
import "generic-service"
vars.check_mode = "checkeventlog"
vars.wmi_arg1 = "application"
vars.wmi_arg2 = "2"
vars.wmi_arg3 = "1"
vars.wmi_warn = "50"
vars.wmi_crit = "100"
check_command = "check_wmi"
assign where host.vars.os == "Windows" && host.vars.event_log_application
ignore where host.vars.disable_wmi
}
Additional services or specific process checks (e.g., monitoring a Jenkins process) can be added following the above examples.
While using WMI via the check_wmi_plus plugin may not be the most future-proof solution (especially with enhanced PowerShell and SSH support in newer Windows versions), it remains a robust method for monitoring legacy environments. This guide should help you set up both the Linux side (WMIC and plugin) and the necessary Windows configurations, as well as integrate the checks into your Icinga setup.
-
Q: What types of services can I monitor using WMI?
A: You can monitor uptime, disk usage, CPU load, Active Directory, RDP sessions, IIS, MSSQL, Event Logs, and process statuses. -
Q: Can I create my own custom scripts?
A: Yes, you can. However, many find that PowerShell (or SSH for Windows Server 2019 and later) offers a more versatile, future-proof approach. -
Q: Need help with configuration files?
A: The Icinga community forum is an excellent resource for support and discussion.
This document provides a comprehensive overview of setting up and using remote Windows monitoring through WMI with Icinga. Adapt the instructions as necessary for your infrastructure and security policies.
Installation Guide for Check WMI Plus Plugin
Check WMI Plus is an agent-less Windows monitoring plugin for Nagios/Icinga written in Perl. This guide details the installation and configuration steps on a Linux system.
Table of Contents
Introduction
Check WMI Plus allows you to monitor Windows machines without installing an agent by using WMI queries. It relies on a WMIC Server from the aiowmi project that forwards WMI queries from the plugin to a target Windows host. This plugin is written in Perl and depends on several Perl modules with specific version requirements.
Prerequisites
Installing the WMIC Server (aiowmi)
Check WMI Plus requires the WMIC Server component provided by the aiowmi project.
Select an Installation Directory:
For example, use
/opt
:Clone the Repository:
Build and Configure:
Follow the instructions in the aiowmi repository's README. This may involve compiling the WMIC Server and setting it up as a long-running API service.
Test the WMIC Server:
Use the sample commands provided in the aiowmi documentation to verify that WMI queries are correctly forwarded to your target Windows host.
Installing Required Perl Modules
The plugin depends on several Perl modules, with certain versions required. Below is a sample table of key modules:
Installing via APT (Debian/Ubuntu/Kali)
Installing via CPAN
For modules that require a specific version, use CPAN. For example:
To install a specific version:
You can verify module versions by running:
This diagnostic output will list the installed module versions against the expected versions.
Downloading and Installing Check WMI Plus
Download the Plugin Bundle:
Visit the Releases page to download the latest release (e.g.,
check_wmi_plus.v1.68.tar.gz
).Extract the Bundle:
Copy Executable Files:
The bundle contains executables at the top level. Copy them to a directory such as
/usr/local/bin
:Copy the Configuration Files:
The bundle includes an
etc
directory. Copy it to/etc
(or another location of your choice):Rename the Sample Configuration File:
Configuring Check WMI Plus
Edit the Configuration File:
Adjust Plugin Script Paths:
The plugin expects to find
utils.pm
in your Nagios plugins directory. Modify these paths incheck_wmi_plus.pl
if necessary.Set the WMIC Binary Location:
In
check_wmi_plus.pl
, update the$wmic_command
variable with the full path to your WMIC binary.Set the Base Directory:
In
check_wmi_plus.pl
, set the$base_dir
variable to the directory where the plugin is installed.Testing the Installation
Run the Diagnostic Command:
Perform a Sample WMI Query:
With the WMIC Server running and configured, test a sample query to ensure data is being retrieved from your Windows host.
Troubleshooting
Module Version Mismatches:
Reinstall modules via CPAN if diagnostic output shows mismatches.
Errors Regarding
utils.pm
:Verify and update the Perl library paths in
check_wmi_plus.pl
.Configuration Issues:
Double-check all paths and parameters in
/etc/check_wmi_plus/check_wmi_plus.conf
.Further Assistance:
Visit the Check WMI Plus Forums for additional help.
Conclusion
You have successfully installed and configured Check WMI Plus. This plugin enables agentless monitoring of Windows hosts by forwarding WMI queries through a WMIC Server, integrating seamlessly with Nagios/Icinga.
For further details, community support, or troubleshooting tips, refer to the official documentation and forums.
# Installation Guide for Check WMI Plus PluginCheck WMI Plus is an agent-less Windows monitoring plugin for Nagios/Icinga written in Perl. This guide details the installation and configuration steps on a Linux system.
Table of Contents
Introduction
Check WMI Plus allows you to monitor Windows machines without installing an agent by using WMI queries. It relies on a WMIC Server from the [aiowmi project](https://github.com/cesbit/aiowmi) that forwards WMI queries from the plugin to a target Windows host. This plugin is written in Perl and depends on several Perl modules with specific version requirements.
Prerequisites
Installing the WMIC Server (aiowmi)
Check WMI Plus requires the WMIC Server component provided by the aiowmi project.
Select an Installation Directory:
For example, use
/opt
:cd /opt
Clone the Repository:
Build and Configure:
Follow the instructions in the aiowmi repository's README. This may involve compiling the WMIC Server and setting it up as a long-running API service.
Test the WMIC Server:
Use the sample commands provided in the aiowmi documentation to verify that WMI queries are correctly forwarded to your target Windows host.
Installing Required Perl Modules
The plugin depends on several Perl modules, with certain versions required. Below is a sample table of key modules:
Installing via APT (Debian/Ubuntu/Kali)
Installing via CPAN
For modules that require a specific version, use CPAN. For example:
To install a specific version:
You can verify module versions by running:
./check_wmi_plus.pl -d -d | head -n 25
This diagnostic output will list the installed module versions against the expected versions.
Downloading and Installing Check WMI Plus
Download the Plugin Bundle:
Visit the [Releases](https://github.com/) page to download the latest release (e.g.,
check_wmi_plus.v1.68.tar.gz
).Extract the Bundle:
Copy Executable Files:
The bundle contains executables at the top level. Copy them to a directory such as
/usr/local/bin
:Copy the Configuration Files:
The bundle includes an
etc
directory. Copy it to/etc
(or another location of your choice):sudo cp -r /tmp/check_wmi_plus-*/etc /etc/check_wmi_plus
Rename the Sample Configuration File:
Configuring Check WMI Plus
Edit the Configuration File:
Adjust Plugin Script Paths:
The plugin expects to find
utils.pm
in your Nagios plugins directory. Modify these paths incheck_wmi_plus.pl
if necessary.Set the WMIC Binary Location:
In
check_wmi_plus.pl
, update the$wmic_command
variable with the full path to your WMIC binary.Set the Base Directory:
In
check_wmi_plus.pl
, set the$base_dir
variable to the directory where the plugin is installed.Testing the Installation
Run the Diagnostic Command:
/usr/local/bin/check_wmi_plus.pl -d -d | head -n 25
Perform a Sample WMI Query:
With the WMIC Server running and configured, test a sample query to ensure data is being retrieved from your Windows host.
Troubleshooting
Module Version Mismatches:
Reinstall modules via CPAN if diagnostic output shows mismatches.
Errors Regarding
utils.pm
:Verify and update the Perl library paths in
check_wmi_plus.pl
.Configuration Issues:
Double-check all paths and parameters in
/etc/check_wmi_plus/check_wmi_plus.conf
.Further Assistance:
Visit the [Check WMI Plus Forums](https://github.com/) for additional help.
Conclusion
You have successfully installed and configured Check WMI Plus. This plugin enables agentless monitoring of Windows hosts by forwarding WMI queries through a WMIC Server, integrating seamlessly with Nagios/Icinga.
For further details, community support, or troubleshooting tips, refer to the official documentation and forums.