Information
During the development of version 0.30, the windows_exporter
underwent significant modernization. We plan to deliver a stable release by mid-2025, with upcoming changes—including a newly designed Hyper-V collector—enhancing the value of the official 1.0 stable release.
✨ Breaking Changes
windows_exporter
introduced another wave of breaking changes due to limited maintainer capacity to maintain backward compatibility. Please note that windows_exporter
uses Semantic Versioning (semver), and backward compatibility is not guaranteed for versions below 1.0.
Windows Management Infrastructure (MI) as a Replacement for Windows Management Instrumentation (WMI)
As of version 0.30.0, windows_exporter
no longer uses WMI directly. Instead, it leverages its successor, Windows Management Infrastructure (MI), available since Windows Server 2012. MI provides several advantages, such as the ability to run queries in parallel.
New Hyper-V collector
The Hyper-V collector got a full rewrite and now using Performance Data API instead WMI. This should result into a faster collect time. However, a lot metric names has been changed.
Performance Data Helpers
windows_exporter
0.30 uses Performance Data Helpers instead of parsing binary data directly from the registry. This update also introduces support for Process V2, which is enabled by default on Windows Server 2022. Due to known issues with the Process V1 collector, the registry-based collector remains in use.
Windows Server 2025
In version 0.30, windows_exporter
adopts a new Docker base image: mcr.microsoft.com/oss/kubernetes/windows-host-process-containers-base-image. This new Docker image eliminates the need to build dedicated images for each version of Windows OS.
performancecounter Collector
windows_exporter
now supports a generic performancecounter collector. This new collector allows users to extend monitoring capabilities independently. Please note that the performancecounter
collector is still in an experimental state.
What's Changed
💥 Breaking Changes
- replace
--collectors.[name].*
with--collector.[name].*
flags (click PR number for more information) by @jkroepke in #1659 - remove
teradici_pcoip
andvmware_blast
collector by @jkroepke in #1686 - logon: BREAKING: replace wmi query by Win32 API calls and expose detailed logon sessions. (click PR for more information) by @jkroepke in #1687
- chore: Switch to hostprocess base image and add support for Windows Server 2025 on Kubernetes (click PR number for more information) by @jkroepke in #1731
- pagefile: BREAKING: move paging metrics from os to dedicated collector (click PR for more information) by @jkroepke in #1735
- chore: Remove registry based perfdata collector by @jkroepke in #1742
- hyperv: Refactor collector, added DataStore, Virtual SMB and Dynamic Memory Balancer metrics (click PR number for more information) by @jkroepke in #1712
- system: BREAKING rename
windows_system_system_up_time
towindows_system_boot_time_timestamp_seconds
by @jkroepke in #1784
✨ Exciting New Features
- updates: add windows update collector by @jkroepke in #1652
- tcp: use GetExtendedTcpTable to display states Closed, Listening, SynSent, SynRcvd, CloseWait, TimeWait ... by @astigmata in #1638
- net: expose network interfaces address by @jkroepke in #1635
- chore: Move private packages to internal by @jkroepke in #1664
- process: Implement PDH collector and add support for Process V2 by @jkroepke in #1666
- exchange: Use new collector interface by @jkroepke in #1685
- mi: replace all WMI calls with MI calls by @jkroepke in #1714
- feat: add perfcounter.engine CLI option as alternative to WINDOWS_EXPORTER_PERF_COUNTERS_ENGINE env by @jkroepke in #1723
- udp: Added UDP collector by @jkroepke in #1725
- vmware: refactor collector by @jkroepke in #1727
- time: refactor collector by @jkroepke in #1728
- terminal_services: refactor collector by @jkroepke in #1729
- system: refactor collector by @jkroepke in #1730
- physical_disk: refactor collector by @jkroepke in #1734
- remote_fx: refactor collector by @jkroepke in #1738
- smtp: refactor collector by @jkroepke in #1739
- smb: refactor collector by @jkroepke in #1740
- service: parallelize api calls by @jkroepke in #1744
- mssql: expose server version info by @jkroepke in #1741
- exchange: Extend Transport Queue metrics by @jkroepke in #1749
- nps: refactor collector by @jkroepke in #1764
- msmq: Use Performance Counter instead WMI by @jkroepke in #1766
- feat: Support OpenMetrics by @jkroepke in #1772
- performancecounter: rename collector by @jkroepke in #1787
- performancecounter: support yaml documents and tolerate collector errors by @jkroepke in #1809
- performancecounter: Add the possibility to request formatted values by @jkroepke in #1830
🐞 Bug Fixes
- scheduled_task: fix memory leaks by @jkroepke in #1649
- collector: add stack trace, if collector panics by @jkroepke in #1650
- initiate: fix Cannot create another system semaphore error by @jkroepke in #1653
- initiate: close event log handle by @jkroepke in #1654
- cpu: add workaround for counter resets related to
% Processor Utility
metric by @jkroepke in #1637 - *: don't exclude resources, if empty exclude is empty. by @jkroepke in #1680
- update: rename
updates
collector toupdate
by @jkroepke in #1692 - fix: fail, if unknown collector is defined in enabled list by @jkroepke in #1693
- tcp: fix panic on collector by @jkroepke in #1699
- service: fixed buffer too low error by @jkroepke in #1745
- logicaldisk: fix base counter values by @jkroepke in #1747
- logical_disk: Get Volume ID for NTFS Volume Mounts by @jkroepke in #1752
- mssql: fix performance counter with additional server instance by @jkroepke in #1753
- logical_disk: revert panic trigger on error by @jkroepke in #1755
- collector: remove windows_exporter_perflib_snapshot_duration_seconds metric by @jkroepke in #1760
- adfs: fix collector by @jkroepke in #1761
- collector: fix wrong perfdata instances by @jkroepke in #1763
- smb: extend smb share metrics by @jkroepke in #1765
- mscluster: fix cluster and network sub collectors by @jkroepke in #1759
- feat: Tolerate collector failures by @jkroepke in #1769
- fix: use log.file=eventlog as default value, if running as windows service by @jkroepke in #1771
- textfile: set windows_exporter_collector_success to 0, if an errors occurs by @jkroepke in #1775
- collector: don't fail if perf counters are empty. by @jkroepke in #1776
- mssql: set windows_exporter_collector_success to 0, if errors occurs by @jkroepke in #1777
- hyperv: Removed
% Guest Idle Time
performance counters (introduced in 0.30.0-beta.4) by @jkroepke in #1785 - logical_disk: fix volume access with limited permission by @jkroepke in #1786
- vmware: fix memory collector by @jkroepke in #1791
- iis: Fix label for Default Web Site by @jkroepke in #1792
- mssql: fix not collecting sql errors by @jkroepke in #1793
- mssql: add counter based on server version by @jkroepke in #1799
- process: Use registry collector for V1 data by @jkroepke in #1814
- iis: fix panic by @jkroepke in #1820
- performancecounter: fix panic with counter names having brackets by @jkroepke in #1822
🛠️ Dependencies
- chore(deps): bump golang.org/x/sys from 0.25.0 to 0.26.0 by @dependabot in #1675
- chore(deps): bump github.com/prometheus/common from 0.59.2-0.20240918152650-14bac55a992f to 0.60.0 by @dependabot in #1674
- chore(deps): bump github.com/bmatcuk/doublestar/v4 from 4.6.1 to 4.7.1 by @dependabot in #1689
- chore(deps): bump github.com/prometheus/client_golang from 1.20.4 to 1.20.5 by @dependabot in #1701
- chore(deps): bump github.com/prometheus/common from 0.60.0 to 0.60.1 by @dependabot in #1708
- chore(deps): bump github.com/Microsoft/hcsshim from 0.12.7 to 0.12.8 by @dependabot in #1707
- chore(deps): bump github.com/prometheus/exporter-toolkit from 0.13.0 to 0.13.1 by @dependabot in #1717
- chore(deps): bump github.com/Microsoft/hcsshim from 0.12.8 to 0.12.9 by @dependabot in #1716
- chore(deps): bump golang.org/x/sys from 0.26.0 to 0.27.0 by @dependabot in #1724
- chore(deps): bump github.com/stretchr/testify from 1.9.0 to 1.10.0 by @dependabot in #1770
- chore(deps): bump github.com/prometheus/common from 0.60.1 to 0.61.0 by @dependabot in #1810
- chore(deps): bump golang.org/x/sys from 0.27.0 to 0.28.0 by @dependabot in #1811
- chore(deps): bump github.com/prometheus/exporter-toolkit from 0.13.1 to 0.13.2 by @dependabot in #1815
- chore(deps): bump golang.org/x/sys from 0.28.0 to 0.29.0 by @dependabot in #1825
📖 Documentation
- docs: fix link to update collector by @ehrenfeu in #1682
- docs: add actual Windows Update service name by @ehrenfeu in #1690
- docs: Add log.file argument to README by @PolygonError in #1702
- docs: Update textfile collector defaults inclusion by @yangskyboxlabs in #1722
Other Changes
- chore: disable quay.io push, since no credentials are available. by @jkroepke in #1733
- process: fix metric labels for multiple process instances by @jkroepke in #1803
- process: fix metric labels for multiple process instances by @jkroepke in #1804
New Contributors
- @astigmata made their first contribution in #1638
- @ehrenfeu made their first contribution in #1682
- @PolygonError made their first contribution in #1702
- @yangskyboxlabs made their first contribution in #1722
Full Changelog: v0.29.2...v0.30.0