After weeks of rewriting the core aspect of Icinga for Windows – executing checks – we are happy to announce version 1.5.0 today. Why we changed the check handling? We are glad you asked and happy to share the new features!
Before you update
Please read the Icinga PowerShell Framework upgrading docs and Icinga PowerShell Plugins upgrading docs carefully, to experience a smooth update. We did some changes to plugins and arguments, which requires some updates inside the Icinga Director, before you apply new configuration baskets for example.
New and reworked Plugins
This plugin will allow you to check web services directly from your Windows machine and add thresholds for response time, status code and content checks. If the web service requires authentication or is only available through a proxy, simply configure the required plugin arguments and you are good to go!
Invoke-IcingaCheckHTTPStatus -Warning '100ms' -Critical '200ms' -Url 'https://icinga.com' -Timeout '5' -Content 'icinga' -Verbosity 3; [WARNING] HTTP Status Check: 1 Warning [WARNING] HTTP Status Check https://icinga.com (All must be [OK]) \_ [WARNING] HTTP Status Check https://icinga.com (All must be [OK]) \_ [OK] HTTP Content Check (Atleast 1 must be [OK]) \_ [OK] HTTP Content "icinga": Found \_ [WARNING] HTTP Response Time: 142ms is greater than threshold 100ms \_ [OK] HTTP Status Code: 200 | 'https_icinga_com.http_status'=200;; 'https_icinga_com.http_content_icinga'=1;; 'https_icinga_com.http_content_size'=89238B;; 'https_icinga_com.http_response_time'=0.141611s;0.1;0.2
With this plugin you can check your MPIO Path for disks in case this feature is installed and configured. It will allow you to check the number of MPIO Paths assigned to the disks and print alert in case they are below the defined threshold.
Invoke-IcingaCheckMPIO -Verbosity 2 -Warning '9:' -Critical '7:'; [CRITICAL] Check package "Multipath-IO Package" (Match All) - [CRITICAL] MPIO Disk0 Number Paths, MPIO Disk1 Number Paths \_ [CRITICAL] Check package "ROOT\MPIO\0000_0 Package" (Match All) \_ [OK] ROOT\MPIO\0000_0 Active: True \_ [CRITICAL] Check package "ROOT\MPIO\0000_0 Drivers Package" (Match All) \_ [WARNING] MPIO Disk0 Number Paths: Value "8c" is lower than threshold "9c" \_ [CRITICAL] MPIO Disk1 Number Paths: Value "6c" is lower than threshold "7c" \_ [OK] ROOT\MPIO\0000_0 NumberDrives: 2c | 'mpio_disk0_number_paths'=8c;9;7 'mpio_disk1_number_paths'=6c;9;7 'rootmpio0000_0_numberdrives'=2c;;
Other Plugin Updates
In addition, we updated Invoke-IcingaCheckNetworkInterface by removing some no longer required arguments, reworked Invoke-IcingaCheckMemory to include page files and redesigned Invoke-IcingaCheckUsedPartitionSpace to fix some minor issues and ensure drives are always properly displayed.
Last but not least we updated Invoke-IcingaCheckEventLog which increased the performance a lot, as we are now using another method to fetch event log entries. In addition to this, we added a new argument -MaxEntries, allowing to configure on how much eventlog entries are actually loaded. If you want to modify this value besides the configured default, you can use Show-IcingaEventLogAnalysis to get an idea on how many logs are generated in different time frames.
Increased Monitoring Flexibility
With the entire rewrite of the current check execution handling, we are able to add many additional features for developers and users using Icinga for Windows for monitoring. By doing so, developers will require less time to write new plugins, especially when it comes to %-Values, but also decreases the effort for normalizing your metrics or allow users the monitoring of threshold intervals natively.
Know Your Metrics
Imagine you are running a certain plugin and as result, the basic unit is simply Bytes. You would want that inside your Performance Data, the metric is displayed correctly, but in addition, you would assume that your plugin output will translate the plain Byte value properly, to give you an easier overview on how much space your disks are using for example. Icinga for Windows 1.5.0 does exactly this and will convert all Byte and Time units to easily readable output values with dynamic adjustment, to get the best match for the next unit available.
Invoke-IcingaCheckUsedPartitionSpace -Warning '1TB' -Critical '1.5TB' -Verbosity 3; [CRITICAL] Used Partition Space: 1 Critical 1 Warning 1 Ok [CRITICAL] Partition G: (1.37TiB) [WARNING] Partition R: (1.13TiB) (All must be [OK]) \_ [OK] Partition C: 785.27GiB \_ [CRITICAL] Partition G: 1.37TiB is greater than threshold 1.36TiB \_ [WARNING] Partition R: 1.13TiB is greater than threshold 931.32GiB | 'partition_c'=843179600000B;1000000000000;1500000000000;0;999527800000 'partition_g'=1501377000000B;1000000000000;1500000000000;0;2000381000000 'partition_r'=1245040000000B;1000000000000;1500000000000;0;4000768000000
With Icinga for Windows v1.5.0 we also improved the unit conversion and use GiB instead of GB for example, as this is the correct representation in case you want to compare your Windows disk overview with the plugin output for example. The same improvement now also applies to checks like Uptime:
Invoke-IcingaCheckUptime -Warning '5h:' -Critical '1h:' -Verbosity 3; [OK] System Uptime: 18.32d (All must be [OK]) \_ [OK] Last Boot: 05/13/2021 10:17:50 \_ [OK] System Uptime: 18.32d | 'system_uptime'=1583238s;18000:;3600:
Time values are, like Byte values, dynamically converted to the next best matching unit to easier identify the current values and outputs.
Use Dynamic %-Values
Most plugins will support out-of-the-box %-Values for used thresholds. For this, developers simply need to add the new -BaseValue argument to New-IcingaCheck. The base value is the value, which is compared to the current input value to calculate the %-Value from it. By doing so, simply adding % behind the argument will move the plugin from comparing Byte values for %-Values:
Invoke-IcingaCheckUsedPartitionSpace -Warning '70%' -Critical '80%' -Verbosity 3 [CRITICAL] Used Partition Space: 1 Critical 1 Warning 1 Ok [CRITICAL] Partition C: (84.36% (785.28GiB)) [WARNING] Partition G: (75.05% (1.37TiB)) (All must be [OK]) \_ [CRITICAL] Partition C: 84.36% (785.28GiB) is greater than threshold 80% (744.71GiB) \_ [WARNING] Partition G: 75.05% (1.37TiB) is greater than threshold 70% (1.27TiB) \_ [OK] Partition R: 31.12% (1.13TiB) | 'partition_c'=843192100000B;699669460000;799622240000;0;999527800000 'partition_g'=1501377000000B;1400266700000;1600304800000;0;2000381000000 'partition_r'=1245098000000B;2800537600000;3200614400000;0;4000768000000
As you can see, by using %-Values arguments, the plugin now compares the partition size against this value instead of given Byte values. In addition, Performance Data is based on these threshold values and the plugin output not only prints the %-Value but also the corresponding partition size out-of-the-box, without having to do any effort for calculating values inside the plugin by yourself.
Check With Threshold-Intervals
Since Icinga for Windows v1.0.0, we support a background daemon which is running as Windows service, allowing to register Icinga for Windows daemons. These daemons will then run in the background and do defined tasks. One core daemon is the Start-IcingaServiceCheckDaemon, which can be used to register service checks, allowing to collect metrics over time, like CPU load in 1,3,5,15-minute intervals for example.
Prior to Icinga for Windows 1.5.0, these collected values were only useable with graphing solutions, like InfluxDB or Graphite. Our new version adds a generic argument -ThresholdInterval to every available plugin. You simply have to update your Icinga Director with the latest baskets or update your Icinga configuration files with the latest version. Afterwards, you can add one interval to this argument, which will tell the check plugin to not use the current value of the CPU for example, but the 15m value:
Invoke-IcingaCheckCPU -Core '_Total' -Warning 40% -Critical 70% -ThresholdInterval '15m' -Verbosity 3; [OK] CPU Load (All must be [OK]) \_ [OK] Core Total: 29.148177% (15m avg.) | 'core_total_1'=31.545677%;;;0;100 'core_total_15'=29.148177%;40;70;0;100 'core_total_5'=28.827410%;;;0;100 'core_total_20'=30.032942%;;;0;100 'core_total_3'=27.731669%;;;0;100 'core_total'=29.148177%;;;0;100
To give the user feedback if a Threshold Interval argument was used, behind the line of the value the interval is listed, in this case (15m avg.). In case you are wondering what happens if you specify an interval you did not collect metrics for, we thought of this as well:
Invoke-IcingaCheckCPU -Core '_Total' -Warning 40% -Critical 70% -ThresholdInterval '14m' -Verbosity 3; [UNKNOWN] CPU Load [UNKNOWN] Core Total (27.41305%) (All must be [OK]) \_ [UNKNOWN] Core Total: The provided time interval "14m" which translates to "14m" in your "-ThresholdInterval" argument does not exist | 'core_total_1'=31.545677%;;;0;100 'core_total_15'=29.148177%;;;0;100 'core_total_5'=28.827410%;;;0;100 'core_total_20'=30.032942%;;;0;100 'core_total_3'=27.731669%;;;0;100 'core_total'=27.41305%;40%;;0;100
In addition to the mentioned topics above, we added minor tweaks and improvements to the Icinga PowerShell Plugins and the Icinga PowerShell Framework itself, including a bunch of small and important bugfixes. You can read every single change on the Framework Changelog and Plugins Changelog.
You can download all new releases for Icinga for Windows v1.5.0, Icinga PowerShell Plugins v1.5.0 and Icinga PowerShell MSSQL v1.2.0 directly from GitHub or by using PowerShell Gallery. Within the next days we will also update our Roadmap, giving an overview on what is going to happen next.
We hope you enjoy this new release and would love to hear your feedback!