0.15.0 #1386
mickem
announced in
Announcements
0.15.0
#1386
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
SQL Server monitoring, seventeen new checks and a stall-proof system collector
This release adds a new CheckMSSQL module for monitoring Microsoft SQL Server, a large batch of new Windows checks covering disks, security hygiene and patch state, richer keywords across many existing checks, and fixes a long-standing class of collector stalls caused by slow WMI providers.
✨ Highlights
check_disk_write), UNC share free space (check_uncpath), Storage Spaces (check_storagepool), VSS snapshots (check_shadowcopy), SMB shares (check_share), Microsoft Defender (check_defender), local account hygiene (check_local_accounts), group membership drift (check_group_members), pending reboot (check_pending_reboot), hotfix age (check_patch_age), print queues (check_printqueue) and paging I/O (check_swap_io).check_cputime windows or drops samples (CheckSystem: a Win32_PerfRawData query blocks for ~22s whenever the WMI Performance Adapter starts, freezing the whole 1-second PDH collector #1378).list-separatoroption on every filter-based check lets long results render one item per line, which Nagios-compatible frontends show as summary + long output (Make the separator used by %(list) configurable, so long results can be rendered as multi-line output #1370).check_disk_ioandcheck_disk_healthgainread_latency,write_latencyandtotal_latencykeywords in milliseconds, on both Windows and Linux (check_disk_io: expose per-disk average I/O latency (Avg. Disk sec/Read, /Write, /Transfer) #1369).disable = cpu_frequencysilently stalling check_cpu. Disabling CPU frequency collection also disabled CPU load sampling (disable = cpu_frequencyalso disables CPU load sampling, silently stalling check_cpu #1368).🔍 Detailed changes
🗄️ CheckMSSQL — new module for monitoring Microsoft SQL Server
A new Windows module connecting over ODBC with Windows integrated authentication by default and optional SQL authentication (password stored as a masked settings key). The ODBC driver is auto-detected, preferring the newest "ODBC Driver NN for SQL Server" and falling back to the legacy "SQL Server" driver; on modern drivers
TrustServerCertificate=yesis applied by default (overridable viatrust-cert/encrypt). Login and query timeouts keep checks from ever hanging the agent, and unreachable servers report UNKNOWN with the full ODBC diagnostic chain.check_mssqlcheck_mssql_querycheck_mssql_databasesDBCC SQLPERF(LOGSPACE)check_mssql_backupcheck_mssql_jobsis_running)check_mssql_backupexcludes COPY_ONLY and snapshot backups by default so an ad-hoc dev backup or a VSS agent cannot mask a failing backup job (include-copy-only/include-snapshotopt back in). A new end-to-end scenario, Monitoring a SQL Server host, combines the module with service, disk, memory, PDH and event log checks and documents a low-privilege monitoring login.💾 CheckDisk — writability probes, UNC paths, Storage Spaces, VSS and SMB shares
check_disk_writecheck_uncpathcheck_storagepoolcheck_shadowcopycheck_shareExisting disk checks were extended as well:
check_disk_ioandcheck_disk_healthexpose average per-I/O latency (read_latency,write_latency,total_latency, unit ms) with perfdata and metrics (check_disk_io: expose per-disk average I/O latency (Avg. Disk sec/Read, /Write, /Transfer) #1369). On Windows the values are computed from rawPERF_AVERAGE_TIMERcounters (the formatted WMI class truncates realistic latencies to 0); on Linux from/proc/diskstats. Thresholds like"warn=total_latency > 20" "crit=total_latency > 50"work regardless of workload shape.check_drivesizegainsrequire(aliasmandatory-drives): the check goes CRITICAL if any listed drive is missing, even when scanning wildcards.check_drivesizeandcheck_disk_healthcan report physical-disk device state (health and operational status).check_filesgains aggregate file-size metrics and a folder count.🛡️ CheckSecurity — Defender, local accounts and group membership
check_defendercheck_local_accountscheck_group_members🖥️ CheckSystem — patch state, reboot state, print queues and paging I/O
check_pending_rebootcheck_patch_agecheck_printqueuecheck_swap_io📈 check_process — background CPU sampling, owners and more memory keywords
check_process delta=truepreviously sampled inside the check, slept one second and sampled again — stalling every query by a second. CPU deltas are now published by an opt-in background collector (process cpusetting, mirroringprocess history) that diffs the process table once a second; the check overlays a rolling per-PID CPU% onto a normal no-sleep enumeration. With the collector off,delta=truefails fast with UNKNOWN naming the setting instead of reporting misleading values, and memory/handle fields now keep their real absolute values in delta mode.Other process-check additions: process owner resolution (with user filtering), an
rssalias for working set, thread count, working set and page file percentages, peak memory keywords and system-wide thread/memory totals. Also fixed: thetimekeyword always reported 0 unless delta sampling was on.➕ More keywords and options for existing checks
check_networkpackets_in,packets_out, ...) with perfdata and metrics; NIC team membership (team,team_status) and WMIsourcekeywordscheck_servicesummaryoption emitting aggregate state counts (running_services,stopped_services,paused_services,pending_services,service_count) for dashboard rollupscheck_os_versioncheck_os_updatescheck_cpu_frequencycheck_taskschedcheck_eventlogcheck_pdhmemory_pages_seccounter (\Memory\Pages/sec); more robust resolution of localized counter names⚙️ CheckSystem collector — no more stalls from slow WMI providers (#1378)
The background collector ran network, temperature, CPU frequency, battery and OS update collection on the same 1 Hz thread as CPU/memory/PDH sampling. The network collection queries
Win32_PerfRawData_Tcpip_*via WMI with no timeout; when the WMI Performance Adapter service restarts (roughly every 16 minutes on an idle server) that query blocks for 21–24 seconds, freezing the whole collector — stretchingcheck_cputime windows and dropping samples. The five slow collections now run on their own thread, so a slow provider costs one stale cycle for that metric instead of a frozen collector.The follow-up hardening fixed a subtle shared-state bug: CheckSystem, CheckEventLog and CheckLogFile all created the same named shutdown event, so stopping or reloading any one of them silently killed the others' background threads — and the name let any co-resident process signal it and disable monitoring from outside. All three now use unnamed, per-instance events with proper cleanup, and a transient COM initialization failure at boot now retries instead of permanently disabling collection.
📃 Filters and output — multi-line lists and REST-safe booleans
list-separator(Make the separator used by %(list) configurable, so long results can be rendered as multi-line output #1370): every filter-based check now accepts a separator for%(list),%(ok_list),%(warn_list),%(crit_list),%(problem_list)and%(detail_list), with\n,\r,\tand\\escapes; real-time filters get a matchinglist separatorsettings key. The decoded separator is also exposed to templates as%(sep)so the line can break before the first item:The default (
,) is unchanged and templates pass through byte-for-byte.Valued booleans on common options.
debug,show-allandescape-htmlrejected thex=trueform used by REST (answering with usage text instead of running); they now acceptx=true/x=falsewhile the bare CLI form keeps working.%(problem_list)leak fixed. Real-time filters reuse one filter instance;%(problem_list)kept accumulating items from every previous event batch.🔥 check_firewall — effective, group-policy-aware state (#1351)
check_firewallread only the local policy store, so a firewall configured through local or AD group policy reported its pre-policy state — a GP-disabled firewall showed as enabled and vice versa. The group-policy resultant values (EnableFirewall, default inbound/outbound actions) are now overlaid on the local store, matchingGet-NetFirewallProfile -PolicyStore ActiveStore, including the legacy pre-Vista "Protect all network connections"StandardProfilekey. A newpolicykeyword exposes whether a profile's settings come fromlocalorgroup policy.🐛 Bug fixes
disable = cpu_frequencyin the CheckSystem collector also disabled CPU load sampling, silently stallingcheck_cpu(disable = cpu_frequencyalso disables CPU load sampling, silently stalling check_cpu #1368).check_processtimekeyword always reported 0 without delta sampling.check_disk_writeran; the probe file now opens with_sopen_son Windows.📦 Packaging and licensing
check_ok.shgained its missing shebang, so they can be invoked directly as external-script commands (thanks Fabio Fantoni).check_process delta=truebehaviour changed: it now requires the newprocess cpucollector setting to be enabled and returns UNKNOWN (naming the setting) when it is off, instead of sleeping one second inside the check. With the collector on, memory and handle fields report absolute values in delta mode rather than 1-second differences. Default installs (not usingdelta=true) are unaffected.Full Changelog: 0.14.1...0.15.0
This discussion was created from the release 0.15.0.
All reactions