As Bernd mentioned at last year’s OSMC, the Icinga for Windows team was heavy working on v1.14.0 which was going to be released in December. Well, we are off a couple of days, but we believe the wait was worth it!
Security Update
Let’s first get the elephant out of the room: The previously released security update for Icinga for Windows is of course also part of v1.14.0. If you haven’t seen the security release yet or were unable to update until now, you can upgrade directly to v1.14.0 to fix the issue.
Stability Improvements and Bugfixes
With the new version v1.14.0, we have fixed plenty of issues, starting from smaller issues with check execution to larger issues targeting installation failures or metric over time not collecting data. You can have a look on all the changes on the public Framework changelog and the plugins changelog.
Hashing Algorithm
Starting with Icinga for Windows v1.14.0, we fully got rid of MD5, which we previously used to determine if the binary of the Icinga for Windows service has the intended signature. We have now moved to SHA256 for this case. This not only improves reliability but also ensures that potential FIPS errors on Windows machines for no longer proposed hashing/encryption algorithm are resolved.
Installation and Check Execution crash fixes
In some edge cases, Icinga for Windows could fail during the installation because information from the registry were malformed by third party tools or the JEA compiler simply did not properly include the latest dependencies, causing Icinga for Windows failing to start.
We also fixed issues during check execution, which handled certain string values in a match request incorrectly or caused a crash of the plugin execution and simply throwing an exception.
Performance Counter Improvement
A long remaining issue with Icinga for Windows was handling of Performance Counters, especially of counters with instances which could change over time. To have access to values of certain Performance Counters, Icinga for Windows will build an internal cache map, containing all used counters for the lifetime of the service, to ensure plugins can fetch future updates without huge performance hit.
This caching system had however one flaw, which did not update changing instances. For example, if you started Icinga for Windows and run the disk health check, you will receive plenty of information of all connected disks. How ever, if you now add a new disk to your Windows machine, this new disk will only partially be checked by Icinga for Windows, because important Performance Counter values are not present, because the instance could not be fetched. Same goes for Hyper-V checks, which has a way higher chance to fail for virtual machines which are regulary moved to different hypervisors.
We have addressed all these issues by updating our Performance Counter library, which will now update all instances regulary and keep the current state correct – all without a performance impact!
Check Improvements
Since this is not only a bugfix release, but also ships with new features – let’s talk about these!
Improved Disk Monitoring
Our plugins Invoke-IcingaCheckPartitionSpace and Invoke-IcingaCheckDiskHealth received a huge update, making those more reliable in different environments. For starters, we now made it possible for the plugin to properly fetch the entire partition size in case quotas are in place – Icinga for Windows will now report the proper entire partition size.
In contrast, the plugin now also allows to check mount points properly for partitions and volumes, enabling proper MSSQL, Hyper-V and other data storage focused monitoring.
icinga> Invoke-IcingaCheckPartitionSpace -Verbosity 3;
[INFO] Free Partition Space: 6 Ok (All must be [OK])
\_ [INFO] Partition \\?\Volume{151b43fc-3f70-41b0-92eb-dff7c419ccc0}\: 287.20MiB
\_ [INFO] Partition \\?\Volume{8acb585d-fd6a-4a7d-a0a1-33d6544b01b0}\: 266.22MiB
\_ [INFO] Partition \\?\Volume{ffad7660-2b91-4988-b8f6-dcb98d8992c1}\: 115.72MiB
\_ [INFO] Partition C: 18.50GiB
\_ [INFO] Partition C:\mountpoint\: 71.21MiB
\_ [INFO] Partition C:\mountpoint2\: 5.21MiB
| volume151b43fc3f7041b092ebdff7c419ccc0::ifw_partitionspace::free=301146100B;;;0;314568700 volume8acb585dfd6a4a7da0a133d6544b01b0::ifw_partitionspace::free=279154700B;;;0;310378500 volumeffad76602b914988b8f6dcb98d8992c1::ifw_partitionspace::free=121339900B;;;0;756019200 c::ifw_partitionspace::free=19860020000B;;;0;273355400000 cmountpoint::ifw_partitionspace::free=74670080B;;;0;87027710 cmountpoint2::ifw_partitionspace::free=5464064B;;;0;15724540
For the disk health plugin, we have updated the information pipeline to not only include the drive letter of partitions for a disk, but also the assigned volume names. Most implementations do not require a drive letter, which made it harder to spot which volumes and partitions are affected by possible disk failures – now all drive letters and volume names are assigned to the disk!
[OK] Physical Disk Package: 3 Ok (All must be [OK]) \_ [INFO] Disk #_Total (All must be [OK]) \_ ... \_ [OK] Disk #0 (All must be [OK]) \_ [INFO] 0 Assigned Partitions: C: \_ [INFO] 0 Assigned Volumes: Local Disk ... \_ [OK] Disk #1 (All must be [OK]) \_ [INFO] 1 Assigned Partitions: None \_ [INFO] 1 Assigned Volumes: TestVolume; TestVolume2 ...
CPU Performance Counter Change (again)
For a long time, we used the % Processor Time Performance Counter for the CPU plugin which changed some years ago to % Processor Utility, ensuring Icinga for Windows reflects the data shown on the Task Manager. Since Microsoft changed the data used by the Task Manager back to % Processor Time, we have updated our solution as well to reflect this change.
On older systems, it can now happen that information displayed on the Task Manager is not on par with Icinga for Windows plugin output, but instead of analysing patch levels and Windows versions to match the information, we just moved back to the for now correct counter globally.
Small Memory Check Update
We have also implemented a small update to our Memory plugin, which now fetches in addition the \Memory\Pages/sec counter. This counter is basically used to indicate how heavy the page usage is on your environment. A high return value could result in a slower response of your system, which you can now have an easier eye on without having to add an additional custom check for this counter.
Meet the new INFO State
Last but not least, we would like to talk about the main feature introduced with Icinga for Windows v1.14.0: The new INFO state!
Let’s recap what Icinga is known for: OK, WARNING, CRITICAL and UNKNOWN
While Icinga for Windows is NOT introducing a new exit code, we added the new INFO state as a cosmetic choice. This new state is basically intended for two use cases:
Informational Check Results
We mentioned above, that our disk health plugin now also adds the volume labels to each disk besides the drive letter. These are perfect examples for values of check plugins, which have no real use besides providing information in case of errors.
Non-Threshold values now report INFO
The other use case are checks being added to a package, which have not received any thresholds. For example, many of our plugins provide a huge variety of checks, which often are not being used. Checks which are not evaluated during the plugin execution, will now report INFO insead of OK by default, to quickly get an eye on most important values or showing which data is not properly checked by the plugin.
How does this affect monitoring
In short: Very little
The new INFO state will still use exit code 0 (which represents OK in the Icinga context), which means the Icinga core and notification handling remain unchanged. This will just provide a better visualization, which checks are currently monitored and which do report an actual value that could change the Icinga state.
CPU check without thresholds
icinga> Invoke-IcingaCheckCPU -Verbosity 3; [INFO] CPU Load (All must be [OK]) \_ [INFO] Overall Load: 14.617416% \_ [INFO] Socket #0 (All must be [OK]) \_ [INFO] Core 0: 24.96682% \_ [INFO] Core Total: 24.96682% \_ [INFO] Socket #1 (All must be [OK]) \_ [INFO] Core 1: 19.79212% \_ [INFO] Core Total: 19.79212% \_ [INFO] Socket #2 (All must be [OK]) \_ [INFO] Core 2: 6.855362% \_ [INFO] Core Total: 6.855362% \_ [INFO] Socket #3 (All must be [OK]) \_ [INFO] Core 3: 6.855362% \_ [INFO] Core Total: 6.855362% | totalload::ifw_cpu::load=14.617416%;;;0;100 0_0::ifw_cpu::load=24.96682%;;;0;100 0_total::ifw_cpu::load=24.96682%;;;0;100 1_1::ifw_cpu::load=19.79212%;;;0;100 1_total::ifw_cpu::load=19.79212%;;;0;100 2_2::ifw_cpu::load=6.855362%;;;0;100 2_total::ifw_cpu::load=6.855362%;;;0;100 3_3::ifw_cpu::load=6.855362%;;;0;100 3_total::ifw_cpu::load=6.855362%;;;0;100 0
Memory check only for Pages/sec
icinga> Invoke-IcingaCheckMemory -Verbosity 3 -MemoryPagesSecWarning 100; [OK] Memory Usage (All must be [OK]) \_ [OK] Memory pages/sec: 0c \_ [INFO] PageFile Usage (All must be [OK]) \_ [INFO] c:\pagefile.sys: 323.00MiB \_ [INFO] Used Memory: 5.44GiB | memory::ifw_memory::pagessec=0c;100;;; cpagefilesys::ifw_pagefile::used=338690000B;;;0;34359740000 memory::ifw_memory::used=5844870000B;;;0;8583315000 0
What’s next?
The Icinga for Windows team is already heavily invested in cooking the next big thing. Stay tuned for announcements during the year and keep your schedule clear for this year’s OSMC – we can’t wait to share everything we have in the pipeline!
Stay healthy and have a great time!






