Netdata
Real-time infrastructure monitoring platform
Alternative to: grafana, prometheus, zabbix, datadog
v2.11.1
2026-09-16Release notes
Netdata v2.11.1 is a patch release to address issues discovered since v2.11.0.
This is a larger-than-usual patch release focused on query correctness, database engine stability, Cloud connectivity robustness, health/alert efficiency, and shutdown and process-lifetime safety, along with a number of collector and platform fixes, including broader SQL Server coverage and Windows CPU and disk improvements.
Query engine
- Preserved exact SUM values when a stored point spans result rows or an automatic storage-tier boundary, and preserved incremental-sum baselines so buckets holding only an opening sample no longer produce empty queries (#23512, #23505, @ktsaou)
- Kept API timestamps independent of each Agent’s retention, so the same explicit or relative request returns the same row timestamps across Agents (#23507, @ktsaou)
- Attributed tier-0 RESET and anomaly evidence to the result row that actually contains the source sample, and fixed anomaly-rate contributor counts in two-pass group-by queries (#23504, #23508, @ktsaou)
- Applied
options=absoluteto points fetched from the incoming tier during a plan switch, so a negative value can no longer cross a tier transition unchanged (#23503, @ktsaou) - Fixed a logical operator in the JSON wrapper so unqueried dimensions are excluded as expected unless all dimensions are requested (#23639, @stelfrag)
Database engine
- Fixed a use-after-free and a fatal in merged extent queries by acquiring page-cache references before publishing page details and synchronizing merged extent query teardown under the extent spinlock (#23475, #23521, @stelfrag)
- Fixed a double free of stale MRG metrics during journal v2 migration, and an empty flush-batch counter leak that could leave shutdown or datafile rotation waiting indefinitely (#23560, #23699, @stelfrag)
- Prevented negative and epoch-based tier retention reporting: no 32-bit truncation when formatting durations, unknown or zero start times treated as unavailable, empty journals ignored, and extrapolated retention capped (#23648, @stelfrag)
- Accepted valid page cadences longer than one day instead of treating them as invalid and emitting false repair telemetry (#23514, @ktsaou)
- Avoided UUID map create/free churn and partition write-lock contention during MRG metric lookups, and included full cache and page identity in PGC fatal messages to make cache issues diagnosable (#23538, #23522, @stelfrag)
- Updated the bundled SQLite to 3.53.4 (#23511, @stelfrag)
- Repaired the
-W createdatasetand dbengine stress-test workloads, which crashed on a NULL labels allocator, stamped every generated sample with the wall clock instead of the requested time range, and double-freed state at host teardown (#23758, @stelfrag)
Cloud connectivity (ACLK)
- Added TLS hostname and IP verification for ACLK HTTPS requests, while preserving insecure-mode behavior (#23463, @stelfrag)
- Stopped reporting waived self-signed certificates as certificate verification failures in insecure mode, so later I/O or HTTP errors are reported for what they are (#23732, @stelfrag)
- Switched the HTTPS and MQTT clients to monotonic, microsecond-based timeouts with an I/O progress watchdog, and bounded pre-CONNACK polling to one second so a quiet peer can no longer delay shutdown by up to 60 seconds (#23105, #23733, @stelfrag)
- Stopped counting missing MQTT PUBACKs as successful acknowledgements, tracking them with a dedicated timeout counter that is now preserved across disconnects without touching a freed client (#23486, #23734, @stelfrag)
- Preserved pooled response buffers and their metadata for compressed ACLK responses, and fixed WebSocket masking of payloads spanning ring-buffer boundaries (#23485, @stelfrag)
Health and alerts
- Fixed the Windows
10min_cpu_usagealert attaching toservice.*_cpu_utilizationcharts and firing false CRITICAL alarms (#23559, @thiagoftsm) - Indexed alerts by name per host, replacing full-host alert scans during health-variable resolution (#23554, @stelfrag)
- Avoided re-initializing alert prototypes when chart metadata has not changed, so continuous child-chart re-registrations no longer trigger repeated health re-evaluation (#23515, @stelfrag)
- Built raised-alert summaries only when a notification is actually sent, avoiding per-iteration work and a potential lock-order deadlock with chart removal (#23544, @stelfrag)
- Fixed an incorrect error check on SQL statement preparation in the health database code, and removed two unused
health_log_detailindexes to reduce parent database storage and B-tree maintenance (#23545, #23722, @stelfrag)
Metadata, labels and internals
- Deferred dictionary destruction while dictionary APIs are in flight, making set/get/delete and traversal safe against concurrent destruction during shutdown (#23634, @stelfrag)
- Fixed a use-after-free in dictionary garbage collection when a delete callback re-entered the collector and freed the cached successor mid-walk, and stopped view collections leaving master-deleted items behind (#23819, @stelfrag)
- Stopped the obsolete-chart reaper from freeing a chart another subsystem still references, which left an unindexed chart holding its destroy lock and could fatal a collector still writing to it (#23761, @stelfrag)
- Deferred machine-learning worker queue teardown until after all collectors have stopped, so a collector that outlives the shutdown deadline can no longer abort on a destroyed queue mutex (#23757, @stelfrag)
- Reset and unblocked SIGPIPE in spawned children, so a child whose pipes are closed exits instead of surviving on
EPIPE— which had stranded hundreds ofpowermetricsprocesses on macOS — reported failed signal delivery instead of dropping it silently, and made the spawn-server regression tests deterministic (#23751, #23815, @stelfrag) - Probed for KSM support before enabling page deduplication instead of assuming it, so unsupported kernels no longer report KSM errors, and limited KSM marking to the dbengine page pools that can actually merge (#23822, @stelfrag)
- Skipped sanitizing and re-interning unchanged chart metadata on repeated chart registration, and incremented the label version only on actual label mutations (#23603, #23513, @stelfrag)
- Fixed a text-buffer cleanup issue and a dyncfg tree sizing race during concurrent configuration updates (#23657, @stelfrag)
- Replaced
sprintf()with boundedsnprintfz()in inicfg numeric formatting, and replaced dynamic/proc/net/devpath format strings with literal ones (#23638, #23450, @stelfrag) - Reduced pulse overhead by running
mallinfo2()collection on a configurable, pulse-aligned interval, stamping it after completion so a slow call cannot monopolize the duty cycle, and stopped redundant pulse chart metadata version bumps (#23579, #23736, #23650, @stelfrag) - Removed a per-chart label probe from the pulse child charts, relying on the host label-version compare instead; on a parent with 808 children the probe accounted for about 23% of the main pulse thread and left gaps in the
netdata.*charts it emits (#23760, @stelfrag) - Silenced a Coverity finding and corrected stale comments and unit-test diagnostics, including documenting health-initialization flag behavior while a child is disconnected (#23553, #23737, #23541, @stelfrag)
Collectors and exporting
- Fixed
/proc/interruptsparsing when the first counter is glued to the interrupt ID, which could push changing counter values into dimension IDs and cause unbounded dimension growth (#23651, @stelfrag) - Bounded socket collection to one verified attempt per network namespace, so helper failures no longer trigger repeated collection attempts for every socket record (#23778, @ktsaou)
- Stopped the go.d UPS collector embedding the full command in connection errors, which logged the
PASSWORDcredential in clear text; onlyUSERNAMEandPASSWORDarguments are redacted, so other commands stay diagnosable (#23782, @stelfrag) - Saturated SQL
COUNTresults in the ibm.d AS/400 collector before narrowing them toint, so an out-of-range count can no longer wrap negative and silently change the cardinality limits (#23783, @stelfrag) - Corrected the MikroTik gauge transform in the go.d SNMP collector, and removed unaligned atomics from the go.d chart engine (#23525, #23540, @ilyam8)
- Preserved valid punctuation in OpenTSDB telnet hostnames and metric prefixes, while still replacing whitespace, control characters, and delimiters that would corrupt telnet records (#23749, @stelfrag)
- Fixed the
charts.d.plugindisabled-chart message pointing tocharts.d.plugin.confinstead of the actualcharts.d.conf(#23662, @ilyam8) - SQL Server: added a plan-cache fallback (
sys.dm_exec_query_stats) fortop-querieswhen Query Store is unavailable or disabled, and fell back to the built-insystem_healthsession forerror-infowhen no dedicated Extended Events session is configured (#23748, @thiagoftsm) - SQL Server: hardened the function queries across editions, probing engine edition and version once per instance and routing server-scoped versus database-scoped queries accordingly, so
top-queries,deadlock-infoanderror-infowork on Azure SQL Database and Managed Instance as well as on-premises SQL Server (#23564, @ilyam8) - SQL Server: fixed the deadlock and error-info queries on SQL Server 2014 and older, detecting Query Store by catalog column instead of product version, and reading the event_file path from the session catalog instead of assuming it matches the session name (#23460, @thiagoftsm)
- SQL Server: excluded disabled SQL Agent jobs from collection by default (set
collect_disabled_jobs: trueto keep them) and gated the job alerts on the job being enabled, so a disabled job’s last failed run no longer keeps an alert raised (#23645, @ilyam8) - Windows: collected CPU metrics from the
Processor Informationperformance object, mapping itsNumaNode,NumaIndexinstances to logical CPUs via the processor topology, so hosts with more than 64 logical processors are reported correctly; the legacyProcessorobject is still used whereProcessor Informationis unavailable (#23549, @thiagoftsm) - Windows: added
exclude space metrics on pathsunder[plugin:windows:PerflibStorage]to keep unwanted logical volumes (such as temporary backup mounts) out of disk space collection, added a volumeserial_numberlabel, and corrected the misspelleddriver_typelabel todrive_type(#23660, @thiagoftsm)
Installation and packaging
- Windows: fixed claiming when only a token is provided, and marked the claim token and proxy as hidden MSI properties so they no longer appear in verbose installer logs (#23547, @thiagoftsm; #23735, @stelfrag)
- Restricted the eBPF plugin to 64-bit userlands and resolved the Go toolchain from the userland machine type rather than the kernel architecture (#23446, @stelfrag)
- macOS: resolved the IOKit APIs dynamically instead of linking them directly, restoring builds against older macOS SDKs (#23421, @stelfrag)
Support options
As we grow, we stay committed to providing the best support ever seen from an open-source solution. Should you encounter an issue with any of the changes made in this release or any feature in the Netdata Agent, feel free to contact us through one of the following channels:
- Netdata Learn: Find documentation, guides, and reference material for monitoring and troubleshooting your systems with Netdata.
- GitHub Issues: Make use of the Netdata repository to report bugs or open a new feature request.
- GitHub Discussions: Join the conversation around the Netdata development process and be a part of it.
- Community Forums: Visit the Community Forums and contribute to the collaborative knowledge base.
- Discord Server: Jump into the Netdata Discord and hang out with like-minded sysadmins, DevOps, SREs, and other troubleshooters. More than 2000 engineers are already using it!