All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Monitoring Plugins:
- about-me:
--tagsnow detects Podman hosts
Monitoring Plugins:
- about-me:
--tagsnow correctly distinguishes MariaDB from MySQL hosts (Fedora and RHEL hosts running MariaDB were tagged as MySQL becausemysql.serviceis aliased tomariadb.service) - about-me:
--tagspackage-based detection now works on Debian, Ubuntu, SUSE, Arch, Alpine, and is fixed on Red Hat family - about-me: "User-Installed Software" table (renamed from the misleading "Non-default Software") now lists every package instead of just the first one
- all plugins: importing
lib.urlon RHEL 8's defaultpython3(3.6) no longer aborts withAttributeError: module 'ssl' has no attribute 'TLSVersion'. Plugins that don't use TLS version pinning keep working; calls that pin TLS get a clearer error. Officially supported minimum stays Python 3.9 (fix shipped vialinuxfabrik-lib4.0.2) - mysql-*: queries against
mysql.userandmysql.global_privno longer abort with "Illegal mix of collations" when the server's connection-collation default differs from the system tables' column collations. Fix lives inlinuxfabrik-lib4.0.2, which now aligns the session collation with themysqlschema right after connect (#1139)
v5.0.0 - 2026-05-15
Monitoring Plugins:
- cert: inspect X.509 certificates from a TLS endpoint or local PEM/DER files. Alerts on days until expiry
- mysql-health: single-number 0-100 health score for a MySQL/MariaDB server. Top-level Icinga alert and Grafana KPI
- mysql-index-health: trip-wire for unused and redundant indexes (
sys.schema_unused_indexes,sys.schema_redundant_indexes). When it alerts, runmysqltuner --pfstaton the host for the full analysis withALTER TABLE ... DROP INDEXstatements. Performance Schema must be enabled; UNKNOWN when it is OFF (MariaDB default) - mysql-long-queries: alert on in-flight queries running longer than
--warning/--criticalseconds. Shows session ID, user, DB and statement so the admin canKILL <id>directly. New perfdatamysql_active_transactionsfrominformation_schema.innodb_trxtrends background InnoDB transaction contention even when no single query is over the long-running threshold - mysql-tls: TLS/SSL posture (have_ssl, require_secure_transport, TLS versions, cert expiry, remote users without REQUIRE SSL). Finding text "Current connection ..." matches mysqltuner output verbatim
- ups-nut: monitor a UPS managed by Network UPS Tools (NUT). Battery, load, voltages, runtime, temperature and status
Build, CI/CD:
- requirements: one hash-pinned lockfile per supported Python LTS, each in its own
lockfiles/pyXX/subdirectory (py39topy314). Replaces the singlerequirements.txt. Windows useslockfiles/py313-windows/requirements.txt - requirements: build scripts auto-detect the Python version and pick the matching file. urllib3 lands at 2.7.0 on Python 3.10+, closing two of the four Dependabot advisories
- requirements:
lockfiles/py39/is excluded from both Dependabot version bumps and Dependabot security PRs. Most upstream packages dropped Python 3.9 over 2025/2026, so automated bumps would breakpip install --require-hasheson RHEL 8 / Debian 11. The py39 lockfile is regenerated manually as needed - INSTALL.md: documents how source-tarball installs on RHEL 8 can opt out of the frozen py39 lockfile by installing AppStream
python3.12and running the plugins againstlockfiles/py312/requirements.txt. RPM users on RHEL 8 stay on Python 3.9; Debian 11 has no comparable escape hatch
Grafana:
- Panel lines stay continuous at zoom levels finer than the check interval (was disconnected dots)
Icinga Director:
mysql-binlog-cachemoved from MySQL Replication Service Set to baseline MySQL Service Set. Hosts activating onlymysql-replicationshould now also activatemysql
Monitoring Plugins:
- mysql-* plugins: verify required privileges up front; exit UNKNOWN naming the missing privilege. See PLUGINS-MYSQL.md
- mysql-aria: absent or disabled Aria engine no longer UNKNOWN (now OK with info). Breaking perfdata: cumulative counters replaced by per-second rates. Ships Grafana dashboard
- mysql-binlog-cache:
log_bin = OFFno longer UNKNOWN. Breaking perfdata: cumulative counters replaced by per-second rates. Ships Grafana dashboard - mysql-connections: name-resolution warning suppressed when
skip_networking=ON. Breaking perfdata: cumulative counters replaced by per-second rates. Newmysql_pct_max_connections_used - mysql-database-metrics: new
--ignore-schemas REGEXand--lengthy. Director Basket defaults--lengthy=true, pre-fills--ignore-schemas=^icinga - mysql-database-metrics: excludes
perconaschema (was falsely flagged). Index-vs-data-size check fixed. New--ignore-tables REGEX. Now emits perfdata. Ships Grafana dashboard - mysql-innodb-buffer-pool-size!: workload-based
innodb_redo_log_capacitycheck on MySQL 8.0.30+. Newinnodb_file_per_tablecheck. Breaking perfdata. Ships Grafana dashboard - mysql-innodb-log-waits: scope broadened to "Write Log efficiency" (alerts below 90%). Absent/disabled InnoDB no longer UNKNOWN. Breaking perfdata. Ships Grafana dashboard
- mysql-joins: ship Grafana dashboard. Recommendation only suggests raising
join_buffer_sizebelow 4 MiB. Breaking perfdata - mysql-logfile: prefers
performance_schema.error_logon MySQL 8.0.22+ (works remote). Bug fix: docker/podman/kubectl sources read container logs. Severity matched via[ERROR]/[Warning]tags - mysql-logfile: empty log file is now consistently STATE_OK regardless of whether
--server-logwas set (was STATE_UNKNOWN in auto-detect mode). Typical right after logrotate fires - mysql-memory: bug fix on
max_tmp_table_size. Galera GCache counted on cluster nodes. New--warning(85%) /--critical(95%).--lengthyshows full breakdown. New perfdata - mysql-memory and several other mysql-* plugins: thresholds now accept Nagios ranges. Boundary semantic shifts from
>=Nto>N - mysql-open-files: new
--warning(85%) /--critical(95%) replace the hardcoded 85% WARN-only - mysql-open-files, mysql-slow-queries, mysql-sorts, mysql-table-cache, mysql-table-definition-cache, mysql-table-locks, mysql-temp-tables, mysql-thread-cache, mysql-traffic: ship Grafana dashboards
- mysql-perf-metrics: duplicate
innodb_file_per_tablecheck removed (lives inmysql-innodb-buffer-pool-size). Now emits numeric perfdata. Ships Grafana dashboard - mysql-perf-metrics: warn when a deprecated config variable was explicitly set via
my.cnforSET GLOBAL(compile-time defaults stay silent). New perfdatamysql_deprecated_config_variables - mysql-perf-metrics: also check
innodb_snapshot_isolation(MariaDB), and the two storage-type-aware InnoDB knobsinnodb_flush_neighborsandinnodb_io_capacity. New--storage-type=auto|ssd|hdd|skipparameter (auto reads/sys/blockwhen the plugin runs on the database host) - mysql-* plugins: container-test image matrix moved into per-plugin Containerfiles under
unit-test/containerfiles/. Adding/retiring a MariaDB LTS is now a single-file change in each affected plugin - mysql-* plugins: container tests now also cover MySQL 8.0 and 8.4 LTS upstream images (
mysql-v80,mysql-v84Containerfiles per plugin) - mysql-query!: align with the other mysql-* plugins. Breaking perfdata:
cnt_warn/cnt_critrenamed tomysql_query_warn_value/mysql_query_crit_value - mysql-replica-status!: bug fix - lag detection fired on every server. Privilege narrowed to
SLAVE MONITOR/REPLICA MONITORon MariaDB 10.5+. New parameters and perfdata. Ships Grafana dashboard - mysql-slow-queries: README clarifies that
Slow_queriesis a counter independent ofslow_query_log, and that theslow_query_log/long_query_timefindings only surface as recommendations alongside a slow-query-ratio WARN/CRIT (no standalone alert) - mysql-slow-queries!: bug fix - 5.x% never alerted (now float). New
--warning(5%) /--critical(10%). Breaking perfdata: cumulative counters replaced by per-second rates - mysql-sorts!: new
--warning(10%) /--critical(20%). Output reworded ("merge-sort file"). Breaking perfdata: cumulative counters replaced by per-second rates - mysql-storage-engines!: AUTO_INCREMENT check uses each column's own type ceiling (was always BIGINT UNSIGNED). New parameters. Now emits perfdata. Ships Grafana dashboard
- mysql-system: new WARN on
fs.nr_open < 1M. Listening-port count limited to LISTEN state (was over-triggering). Breaking perfdata:kernel.*labels andmysql_opened_portsrenamed - mysql-table-cache!: new
--warning(20%) /--critical(10%). Breaking perfdata: cumulative counters replaced by per-second rates - mysql-table-definition-cache: OK output shows the verified value and table count.
-1autosizing sentinel encoded as0in perfdata - mysql-table-indexes!: rewritten with two single-shot queries. New check: InnoDB base tables without a user-defined
PRIMARY KEY. New parameters and perfdata. Ships Grafana dashboard - mysql-table-locks!: new
--warning(95%) /--critical(85%). Breaking perfdata: cumulative counters replaced by per-second rates - mysql-temp-tables!: new
--warning/--critical(25/50). Bug fix:KeyErrorcrash on idle servers. Bug fix: effective temp-table cap now correctly reported as the smaller oftmp_table_sizeandmax_heap_table_size(was wrongly the larger), preventing a false "cap is already large enough" verdict on asymmetric configurations. Recommendation rewritten to explain per-table allocation, RAM impact under concurrency, and how to size fromperformance_schema. Breaking perfdata: cumulative counters replaced by per-second rates - mysql-thread-cache!: new
--warning/--critical(50/30). Bug fix:mysql_thread_cache_sizeperfdata uom. Breaking perfdata - mysql-traffic!: bug fix - "100% writes" on idle servers. Breaking perfdata: cumulative counters replaced by per-second rates
- mysql-user-security: documented privilege broadened to
SELECT on mysql.*(wasmysql.user) - mysql-user-security: skip username-as-password check when
validate_passwordis active. MariaDB roles excluded. New perfdata. Basketenable_perfdata = true - mysql-user-security: flag accounts on legacy
mysql_native_password(andsha256_passwordon MySQL 8.0+). Version-aware recommendation. New perfdata:mysql_users_on_legacy_auth_plugin - mysql-user-security: weak-password dictionary check (~110 common defaults from SecLists + MySQL/MariaDB-specific entries). Per-user finding names the matched password. Skipped on MySQL 8.0+ (
PASSWORD()removed) and when thevalidate_passwordplugin is active. New perfdata:mysql_users_with_weak_password
Grafana:
schemaVersionfixed to42; Grafana 12 was failing to import the date-encoded value
Monitoring Plugins:
- docker-stats, podman-stats: per-container CPU and memory perfdata restored. The previous release reported only aggregate values, breaking long-term trending of individual containers (#1104)
- veeam-status: works again against Veeam Enterprise Manager v13, which serialises REST-API JSON keys in camelCase after its .NET migration (#1001)
Monitoring Plugins:
- hin-status: removed - the HIN support status page no longer exists
- mysql-innodb-buffer-pool-instances: removed - the underlying variable is gone on MariaDB 10.6+ and obsolete on modern MySQL. Also removed from both InnoDB Service Sets
v4.1.0 - 2026-05-08
Monitoring Plugins:
- systemd-units-failed: in OK state, output now includes the last failed unit since the last reboot, its timestamp and how long ago
Monitoring Plugins:
- sap-open-concur-com: default
--datacenteris noweu2(the legacyeuendpoint returns HTTP 500). Setups passing--datacenterexplicitly are unaffected - sap-open-concur-com: longer default timeout so slow but healthy SAP API responses no longer flip to UNKNOWN
Icinga Director:
Apache apache2 Service Set (Debian 10-)matches onlydebian10now; obsoletedebian8/debian9removed from the filterApache apache2 Service Set (Ubuntu 18+)now also matchesubuntu24andubuntu26Apache httpd Service Set(Fedora / RHEL) now also matchesrhel10OS - RHEL 10 Basic Service Setdrops theaudit-rules.servicecheck (oneshot unit that stays inactive). Audit health stays covered byauditd.serviceand theaudit.logfile-size check- OS host tag labels for
rhel7/rhel8/rhel9get a leading double space (OS - RHEL 7 (and compatible), etc.) so they sort beforerhel10in the Director dropdown. Tag names unchanged
Icinga Director:
all-the-rest.json: 13 single-plugin Service Sets removed - each needed per-instance parameters. Service Templates remain, configure via Director Apply rules insteadall-the-rest.json: obsoletetarifpool-v2host tag dropped (the Set itself was removed in v3)
Monitoring Plugins:
- about-me: Non-default Software, Non-default Users and systemctl list-timers tables now sort case-insensitive and natural (so
foo10lands afterfoo2) - network-port-tcp: fix plugin crashing on every invocation
- php-fpm-status: no more false CRIT on dynamic and ondemand pools when all current workers are momentarily busy
- Various plugins: declare
lib.*imports explicitly to harden against future lib refactors. No behaviour change today
v4.0.0 - 2026-05-07
Icinga Director:
- Add
Needs Restarting Service Set(host tagneeds-restarting) for Linux servers patched but not yet rebooted. Tag only hosts where reboots are manual. Red Hat- and Debian-based distributions - Add
OS - RHEL 10 Basic Service Setfor Rocky Linux 10 / RHEL 10 / AlmaLinux 10 hosts. Addsaudit-rules.serviceover the RHEL 9 set - Add
Postfix MTA Service Set (Multi-Instance)for hosts running the MTA aspostfix@-.service(#535)
Monitoring Plugins:
- users: cross-distro container-based test added, covering RHEL 10 SSH sessions without a PTY (#989)
Build, CI/CD:
- Bump pinned
linuxfabrik-libdependency from 3.4.0 to 3.4.1, which fixeslibrenms-alertssilently reporting OK on alerts in LibreNMS statesWORSE,BETTERorCHANGED
Icinga Director:
- Backfill
Disk I/OandNetwork I/Ochecks on the older Debian OS Basic Service Sets where they were missing - OS host tag labels now suffix
(and compatible)so the derivative distribution coverage is explicit. Tag names unchanged - Remove the hard-wired
rsyslog.servicecheck from every OS Basic Service Set. Tag hosts running rsyslog withrsyslogto activate the dedicatedrsyslog Service Set
Monitoring Plugins:
- dmesg:
--ignorenow takes a regex (was substring) and is repeatable. Specifying it replaces the bundled defaults (was extending). Defaults grew to cover SHPC PCI hot-plug noise - dmesg:
--severitydeprecated; the plugin always alerts as CRIT. Existing templates withdmesg_severity = warnkeep working but no longer downgrade - dmesg: emit
errorsperfdata so the unfiltered error count can be trended in Grafana
Icinga Director:
- Drop the
OS - Debian 8 Basic Service Set. Debian 8 (Jessie) has been EOL since June 2020 and is not covered by the rest of the project anymore
v3.0.0 - 2026-05-05
- ci: scope
GITHUB_TOKENpermissions in the dependabot-auto-merge workflow to the job level (addresses OpenSSF ScorecardToken-Permissions)
Build, CI/CD:
- Drop the
flatdictdependency;statuspalreworked accordingly. Unblocks builds on RHEL 10 and SLE 15/16 (#1044)
Monitoring Plugins:
- haproxy-status: replaced
--username/--passwordwith HTTP basic auth in--url(e.g.https://user:pw@host/server-status); old parameters now UNKNOWN with a migration hint - mailq: thresholds now take a duration (
1h,3D) instead of a count. Newoldest_mail_ageperfdata. New--mta(#781) - php-fpm-status: multi-pool via repeatable
--url; HTTP basic auth in the URL. All perfdata labels renamed and prefixed<pool>_- update Grafana/InfluxDB queries - procs:
--argument,--command,--usernamenow regex instead of substring/startswith; use^foofor startswith,^foo$for exact match
Build, CI/CD:
- Documentation site at https://linuxfabrik.github.io/monitoring-plugins/
- Package support for SLE 15, SLE 16, Ubuntu 26.04 (incl. "OS - Ubuntu 26 Basic Service Set" template)
Monitoring Plugins:
- by-ssh: alert on single numeric values
- by-winrm: executes commands on remote Windows hosts via WinRM, with JEA support (incl.
--winrm-configuration-name) - dhcp-scope-usage: add
--briefto hide scopes within thresholds (#788) - disk-usage: add
--briefto hide filesystems within thresholds (#782) - docker-info, podman-info: add
--ignoreto filter stderr warnings/errors by regex (#834) - gitlab-version: add
--check-securityto warn on security-relevant updates (default on) (#688) - haproxy-status: add
--ignoreto filter proxies/frontends/backends/servers by regex on<proxy>/<svname>(#835) - infomaniak-swiss-backup-devices: add
--ignore-customer,--ignore-name,--ignore-tag,--ignore-user - infomaniak-swiss-backup-products: add
--ignore-customer,--ignore-tag - ipmi-sel: add
--ignoreto filter SEL entries by regex (#982) - journald-query: add
--icinga-callbackso acknowledging the service in Icinga suppresses the matching events on following runs (#649) - json-values: add
--token/--headerfor HTTP auth; new--warning-key/--critical-key(dot-notation) for numeric alerts (#1005) - librenms-alerts, librenms-health: support device-type
management - logfile:
--filenameaccepts time macros ({today},{%Y}, ...) for date-stamped logs. Offset survives day rollovers (#678) - nextcloud-enterprise: reports Nextcloud Enterprise subscription information
- podman-info: displays system-wide Podman information (#1023)
- podman-stats: cpu and memory statistics for all running Podman containers (#1023)
- procs: add
--top Nto list the top N processes by CPU time and memory usage - procs: add
--lengthyfor extended--toptable output - procs: add
--warning-cpu-percent/--critical-cpu-percentfor aggregated CPU usage of filtered processes - redfish-system: checks overall system health from a Redfish-compatible server (split off from
redfish-drives) (#652) - scanrootkit: add 41 signatures for modern Linux rootkits and implants (BPFDoor, Drovorub, Ebury, FontOnLake, Kaiji, Kobalos, perfctl, PUMAKIT, Reptile, Symbiote, Winnti, and more)
- scanrootkit: add 11 further signatures for recent Linux threats (Auto-Color, Bootkitty, DslogdRAT, Hadooken, Koske, LinkPro, randkit, Snapekit, Sutekh, vmwfxs, WolfsBane)
- scanrootkit: findings now show the year the rootkit was first publicly disclosed
- scanrootkit:
rootkit_items/rootkit_possibleperfdata count distinct rootkits (was indicators);maxfield carries the signature-database size - sensors-temperatures: add
--ignoreto filter sensors by regex (#965) - strongswan-connections: add
--matchand--ignoreto filter VICI connections by regex (#738) - statuspal: also detect
emergency-maintenancestate - valkey-status: support user and password credentials PR #954, thanks to Claudio Kuenzler
Icinga Director:
- Add Debian 13 Service Set
Assets:
- sudoers: disable PAM's session stack log lines when user icinga or nagios uses sudo
Build, CI/CD:
- Bump pinned
linuxfabrik-libdependency from 3.0.0 to 3.2.0 - Windows MSI no longer depends on an installed Icinga2 agent (install path unchanged:
ProgramFiles64Folder/ICINGA2/sbin/linuxfabrik)
Grafana:
- All panels: do not connect across nulls
Icinga Director:
- Service Templates: "Notes URL" now points at the docs site instead of GitHub source; re-run
tools/build-basket --autoto pick up the new URL
Monitoring Plugins:
- all plugins: ignore unknown arguments instead of erroring (helps when rolling out updated service definitions)
- all plugins: expanded
DESCRIPTIONin--help - all plugins: drop incorrect "Supports Nagios ranges" mentions from
--helpwhere not implemented - atlassian-statuspage: report primary incident, affected services and maintenance windows. New
--service REGEX. Perfdata renamed (impact→cnt_warn/cnt_crit) - batch of plugins with
appendparameters: user values now replace the defaults (was extending) (#540) - cpu-usage: remove
--top(moved toprocs --top) - disk-io: also monitor normalized iowait on Linux (100% = one fully I/O-saturated core)
- file-count: much faster on large directories (stops counting once thresholds are exceeded)
- file-ownership:
--filenamemerges with the default file list; use--no-default-filesto check only user-supplied files - file-ownership: default file list extended with CIS benchmark-relevant files (login.defs, sudoers, sysctl, systemd, PAM, etc.)
- logfile: output names the scanned file and each configured pattern with per-pattern match count and severity label (#547)
- nextcloud-enterprise, nextcloud-version:
occno longer has to be executable;php occ <cmd>is invoked under the owner ofconfig/config.php - php-status: default to
http://localhost/monitoring.php, tolerate its absence - redfish-sensor:
--insecurenow defaults toTrue(BMCs usually serve self-signed certs). Pass--insecure=falseexplicitly if a trusted CA chain is installed - scanrootkit: exact per-symbol kernel symbol matching (fewer false positives)
- service: Windows services with a space in their technical name now match
--service(#921) - systemd-units-failed: failed unit names appear in the first output line for dashboard/SMS readability (#967)
Tools:
- build-basket:
--autois now truly non-interactive; unknown datafields and objects get fresh uuids instead of prompting - rename
tools/check2basket→tools/build-basketandtools/remove-uuids→tools/basket-remove-uuids; update any wrappers or documentation
Monitoring Plugins:
- cpu-usage: remove
--top(moved toprocs --top) - scanrootkit: remove the Suckit rootkit check and the
rootkit_extraperfdata; update Grafana panels and alerts that rely onrootkit_extra
Tools:
- remove legacy
grafana-tool
Build, CI/CD:
- RPM: no longer conflicts with other RPMs shipping ELF build-id symlinks (e.g.
azure-cli) (#979) - requirements.txt: add missing
setuptoolsdependency
Tools:
- build-basket: strip argparse
%%escaping in Icinga Director basket descriptions - build-basket: write
[]as default value forappendparameters withdefault=None - update-readmes: backslashes in a plugin's
--helpoutput (e.g. Windows example paths likeC:\logs\...) no longer make README regeneration crash
Grafana:
- Icinga Dashboard: use a query for the service name so the dashboard works regardless of the configured service name
Monitoring Plugins:
- semantic bugfixes across a batch of plugins (keycloak-version, mysql-table-locks, valkey-status, wildfly-*, ...) (#1070)
- about-me: perfdata error when
--dmidecodeis used and no HW information is available - about-me: various
sys_dimensionserrors on some machines (#1006) - by-ssh: add missing
--verboseparameter - cpu-usage: false 100% readings on Windows with 64+ cores (#626)
- deb-updates: crash when reporting the number of available updates
- docker-stats: memory perfdata used CPU thresholds
- docker-stats: replace per-container perfdata with aggregate metrics (containers, cpu)
- file-age: handle race when files disappear on busy file systems
- fs-ro: ignore
/run/credentials - keycloak-stats: incorrect symlink for lib
- librenms-alerts: report
WORSE/BETTER/CHANGEDalerts too (was onlyACTIVE); LibreNMS 25.2+ flips many toCHANGED(#882) - logfile:
OverflowErrorwhen inode exceeds SQLite INTEGER range on Windows/NTFS (#1035) - logfile: multiple services on the same logfile with different patterns no longer interfere with each other (#698)
- logfile: after the #698 state-DB rename, the read offset could reset on every run on hosts upgrading from an older DB schema, visible as a steadily climbing
scanned_linesin Grafana - mysql-joins: crash on a server booted less than one second ago
- mysql-memory: crash in "other process memory" on hosts with psutil older than 5.3.0
- mysql-traffic: crash from missing import and crash on a server booted less than one second ago
- needs-restarting: show "Running Kernel X != Installed Kernel Y" on Debian-based systems when
needrestartreports a pending kernel upgrade - notify-host-mail, notify-service-mail: Icinga logo renders inline again on hosts with long FQDNs (#790)
- ntp-*: prevent
TypeErrorwhen comparing int and str - podman-stats: precise numeric values; aggregate perfdata includes block and network I/O totals
- redfish-drives: system-level warnings (e.g. inlet temp) no longer flip the check to WARN (covered by
redfish-systemnow) (#652) - rocketchat-stats: crash when reporting the user count
- scanrootkit: a single malformed signature file no longer crashes the whole check
- scanrootkit: directory-only rootkit signatures (e.g. KBeast
/usr/_h4x_, Kaiji/usr/bin/lib) are now actually evaluated - updates: crash on Python 3.9 when pending updates are reported
- users: incorrect TTY count when SSH clients connect via IPv6 (#989)
- valkey-status: TLS connection PR #954, thanks to Claudio Kuenzler
v2.2.1 - 2025-09-22
Monitoring Plugins:
- ntp-chronyd, ntp-ntpd: SyntaxError: f-string: unmatched '(' on python 3.11 (#952)
v2.2.0 - 2025-09-19
Build, CI/CD:
- Add support for debian13 and rhel10 packages
Monitoring Plugins:
- about-me: add option to avoid dmidecode and sudo (#948)
- ntp-*: add
--stratumparameter and modernize code - spring-boot-actuator-health: derived from PR #940, thanks to Dominik Riva - a monitoring plugin for the Spring Boot Actuator
/healthendpoint - virustotal-scan-url: analyses URLs to detect malware and other breaches using VirusTotal
Assets:
- Linuxfabrik Monitoring Plugins SELinux Type Enforcement Policies: allow D-Bus daemon IPC with unconfined services via FIFOs and UNIX sockets
- Linuxfabrik Monitoring Plugins SELinux Type Enforcement Policies: add missing type enforcement requirements (#918)
Build, CI/CD:
- Build on Ubuntu 24.02 error on system_dbusd_t (#918)
Monitoring Plugins:
- deb-updates: apt-get returns with an error (#904)
- deb-updates: missing rights and still OK (#937)
- icinga-topflap-services: prevent stacktrace when required parameters are empty
- openstack-swift-stat: problem with python-keystoneclient, optimize requirements* (#900)
- safenet-hsm-state: set
use_agentto false and enable perfdata in Icinga Director Basket - statuspal: handle incident_type "performance"
- users: "no one is logged in" on Ubuntu 24.04 LTS (#919)
- valkey-status|redis-status: improve
--ignore-thp(#898)
Assets:
- To make it easier to integrate with other tools, all RST files have been converted to GitHub-flavoured Markdown.
Build, CI/CD:
- Change to official, up-to-date Rocky Linux containers for building RPMs (Motivation)
Icinga Director:
- about-me: change command timeout from 30 to 60
- atlassian-statuspage: increase Icinga Director command timeout
- disk-io: change command timeout from 10 to 30 for Windows
- memory-usage: change command timeout from 10 to 30 for Windows
- ntp-w32tm: change command timeout from 10 to 30 and check interval from 60 to 600
- procs: change command timeout from 10 to 30 for Windows
Monitoring Plugins:
- about-me: report current cpu frequency and avoid dmidecode noise, new perfdata
- cpu-usage: non-blocking behaviour (interval=None + manual deltas via SQLite DB) so we get both accuracy and faster runtime
- disk-io: modernize code
- gitlab-health: increase timeout from 3 to 8 secs
- gitlab-liveness: increase timeout from 3 to 8 secs
- gitlab-readiness: increase timeout from 3 to 8 secs
- infomaniak-events: increase timeout from 8 to 28 secs
- journald-usage: also print SystemMaxUse and SystemKeepFree
- memory-usage: modernize code
- pip-updates: modernize code
- procs: avoid token + PEB reads and repeated attribute calls per process, as this has an impact on busy Windows servers
- rocketchat-stats: improve output and docs a little bit
- statuspal: 'performance' degredation is now a WARN, not UNKNOWN
v2.1.1 - 2025-06-20
Icinga Director:
- Icinga2 Service Set
v2.1.0 - 2025-06-20
Icinga Director:
- Icinga2 Service Set
Monitoring Plugins:
- icinga-version: tracks if Icinga is EOL
Icinga Director:
- all-the-rest.json: correct nextcloud-app-update.timer unit states
Monitoring Plugins:
- disk-usage: handle disk accessibility (#792)
- updates: "The syntax of the command is incorrect."
Icinga Director:
- atlassian-statuspage: Increase timeout from 8 to 30 secs
- uptimerobot: Increase timeout from 8 to 30 secs
- Path to notification plugins changed back to
/usr/lib64/nagios/plugins
Monitoring Plugins:
- matomo-version: use EOL library, parameter
--cache-expireis deprecated
v2.0.0 - 2025-06-06
Build, CI/CD:
-
Windows: To save disk space, Windows plugins are only compiled if they are useful for testing local system resources. Plugins that check remote services should run on Linux. Currently we compile:
- cpu-usage
- dhcp-scope-usage
- disk-io
- disk-usage
- dns
- dummy
- file-age
- file-count
- file-size
- logfile
- memory-usage
- network-connections
- network-io
- network-port-tcp
- ntp-w32tm
- path-rw-test
- procs
- scheduled-task
- service
- swap-usage
- updates
- uptime
- users
-
Linux: To save disk space, we no longer compile to binaries. The .rpm and .deb packages now ship the source code and require Python 3.9+ to be installed on the target host. We also install a Python venv (virtual environment) in
/usr/lib64/linuxfabrik-monitoring-plugins/venv/to manage all Python libraries withpip. Sorry for the back and forth.
Icinga Director:
-
all-the-rest.json: drop legacy commands
-
The Icinga Director configuration has been updated to remove plugins that are no longer compiled for Windows:
- apache-solr-version
- axenita-stats
- composer-version
- countdown
- csv-values
- dhcp-relayed
- diacos
- disk-smart
- feed
- fortios-cpu-usage
- fortios-firewall-stats
- fortios-ha-stats
- fortios-memory-usage
- fortios-network-io
- fortios-sensor
- fortios-version
- githubstatus
- grassfish-licenses
- grassfish-players
- grassfish-screens
- haproxy-status
- hin-status
- huawei-dorado-backup-power
- huawei-dorado-controller
- huawei-dorado-disk
- huawei-dorado-enclosure
- huawei-dorado-fan
- huawei-dorado-host
- huawei-dorado-hypermetrodomain
- huawei-dorado-hypermetropair
- huawei-dorado-interface
- huawei-dorado-power
- huawei-dorado-system
- icinga-topflap-services
- infomaniak-events
- infomaniak-swiss-backup-devices
- infomaniak-swiss-backup-products
- jitsi-videobridge-stats
- jitsi-videobridge-status
- json-values
- kemp-services
- keycloak-memory-usage
- keycloak-stats
- keycloak-version
- librenms-alerts
- librenms-health
- librenms-version
- matomo-reporting
- matomo-version
- mediawiki-version
- metabase-stats
- mod-qos-stats
- moodle-version
- mysql-aria
- mysql-binlog-cache
- mysql-connections
- mysql-database-metrics
- mysql-innodb-buffer-pool-instances
- mysql-innodb-buffer-pool-size
- mysql-innodb-log-waits
- mysql-joins
- mysql-logfile
- mysql-memory
- mysql-open-files
- mysql-perf-metrics
- mysql-query
- mysql-replica-status
- mysql-slow-queries
- mysql-sorts
- mysql-storage-engines
- mysql-system
- mysql-table-cache
- mysql-table-definition-cache
- mysql-table-indexes
- mysql-table-locks
- mysql-temp-tables
- mysql-thread-cache
- mysql-traffic
- mysql-user-security
- nextcloud-security-scan
- nextcloud-stats
- nextcloud-version
- nginx-status
- nodebb-cache
- nodebb-database
- nodebb-errors
- nodebb-events
- nodebb-groups
- nodebb-info
- nodebb-users
- nodebb-version
- onlyoffice-stats
- openjdk-redhat-version
- openvpn-version
- php-fpm-ping
- php-fpm-status
- php-status
- php-version
- pip-updates
- python-version
- qts-cpu-usage
- qts-disk-smart
- qts-memory-usage
- qts-temperatures
- qts-uptime
- qts-version
- redfish-drives
- redfish-sel
- redfish-sensor
- restic-check
- restic-snapshots
- restic-stats
- rocketchat-stats
- rocketchat-version
- sap-open-concur-com
- starface-account-stats
- starface-backup-status
- starface-channel-status
- starface-database-stats
- starface-java-memory-usage
- starface-peer-stats
- starface-status
- statusiq
- statuspal
- uptimerobot
- veeam-status
- whmcs-status
- wildfly-deployment-status
- wildfly-gc-status
- wildfly-memory-pool-usage
- wildfly-memory-usage
- wildfly-non-xa-datasource-stats
- wildfly-server-status
- wildfly-thread-usage
- wildfly-uptime
- wildfly-xa-datasource-stats
- wordpress-version
- xml
Monitoring Plugins:
- atlassian-statuspage: receive alerts on incidents on a specific Atlassian Statuspage
- deb-updates: checks for software updates on systems that use package management systems based on the
apt-getcommand - kubectl-get-pods: checks the health and status of kubernetes pods by running
kubectl get podsand parsing the results - rpm-updates: displays available updates, including a list of advisories about newer versions of installed packages
- valkey-status: returns information and statistics about a Valkey server
- valkey-version: tracks if Valkey is EOL
Build, CI/CD:
- compile-one.sh: provide Nuitka's no-deployment-flag (#864)
Monitoring Plugins:
- by-ssh: fix traceback on "permission denied"
- icinga-topflap-services: ignore events with "Waiting for Icinga DB to synchronize the config." to prevent UNKNOWNs
- needs-restarting: add missung import of lib.disk
- ping: '10 received' contains '0 received' (#860)
- snmp: Special characters not supported in options --v3-auth-prot-password and --v3-priv-prot-password (#886)
Build, CI/CD:
- create-fpms.sh: fix OS detection for setting OS family
- change linux packaging workflow to use native tools (rpmbuild, debuild)
Assets:
- prefix sudoers command alias to avoid conflicts (#880)
Monitoring Plugins:
- about-me: add valkey detection
- about-me: reports type of display server (if any)
- about-me: switch from lib.version to lib.distro
- csv-values: make use of ommitted --warning-query and --critical-query more robust
- disk-io: improve help text
- fail2ban: be a bit more verbose in case everything is ok
- fedora-version: switch from lib.version to lib.distro
- fs-inodes: improve code
- grassfish-screens: initialize screen statuses earlier
- haproxy-status: add unix socket support as alternative to HTTP(S) (#767)
- icinga-topflap-services: increase default warning level from 5 to 7
- load: Use
os.getloadavg()instead ofcat /proc/loadavg(#295) - php-status: bz2 and curl are no default modules
- redfish-sel: add support for Supermicro (#866)
- rhel-version: switch from lib.version to lib.distro
- snmp: add column "skip output" to CSV definition for devices, add unit tests
- snmp: make table output suppressable, streamline output
- systemd-unit: implement support for
systemctl --machineand--user
v1.2.0.11 - 2025-03-13
Build, CI/CD:
- Due to the new conventional commits and version string requirements in Windows MSI setup files, the project switches from calendar versioning to semantic versioning. Project starts at
v1.0.0.0. - Re-implemented
/buildand/.githubfrom scratch.
Assets:
- Move
/selinuxto/assets/selinux
Icinga Director:
- all-the-rest.json: Remove Tarifpool-v2 Service Set
Monitoring Plugins:
- Since some libraries such as pymysql or openssl have security vulnerabilities for Python 3.6, the project now requires Python 3.9+ to use the plugins in the source code variant.
- jitsi-videobridge-stats: Remove deprecated values (PR #780, thanks to SnejPro)
- jitsi-videobridge-stats: Remove deprecated warning and critical parameters, always returns OK
Notification Plugins:
- notify-*-rocketchat-telegram: Remove Telegram functionality, remove
-telegramsuffix
Build, CI/CD:
- Add support for ARM (#702)
Icinga Director:
- all-the-rest.json: Add Debian 12 (Cloud Image) Service Set
- all-the-rest.json: Add IcingaDB Service Set
- all-the-rest.json: Add Mastodon Service Set
- all-the-rest.json: Add Moodle Service Set
- all-the-rest.json: Add networking Service Set (mostly for Debian-based systems)
- all-the-rest.json: Add rsyslog Service Set
- all-the-rest.json: Add Ubuntu 24 Service Set
- all-the-rest.json: Add WHMCS Service Set
Monitoring Plugins:
- graylog-version
- hin-status
- icinga-topflap-services
- keycloak-memory-usage
- keycloak-stats
- mastodon-version
- moodle-version
- openvpn-version
- scanrootkit
- statusiq
- uptimerobot
- whmcs-status
Icinga Director:
- crypto-policy: New defaults according to LFOps crypto_policy role
- dhcp-relayed: Binding a socket to all network interfaces
- disk-io: UnboundLocalError: cannot access local variable 'msg' where it is not associated with a value (#777)
- docker-stats: always-ok not referenced (#839)
- fortios-network-io: Fix reading from local SQLite database
- mysql-query: Fix director basket
- needs-restarting: UnboundLocalError under nagios user (#799)
- service: Implement
--starttype, as code was missing (parameter is now appending); implement unit-tests - snmp: With some CSV files, user gets traceback
IndexError: list index out of range. Add more unit-tests. - strongswan-connections: check fails if using AES-GCM algorithm (#806)
- swap-usage: Fix ProcessLookupError
Monitoring Plugins:
- about-me: expanded RAM isn't updating (#757)
- apache-httpd-status: failure when mod_md is enabled (#783)
- docker-stats: ValueError: could not convert string to float: '0B' (#776)
- redfish-sel: UnboundLocalError: local variable 'sel_path' referenced before assignment (#779)
- whmcs-status: handle null correctly in whmcs api response (#820)
Build, CI/CD:
- Create MSI package for Windows.
- Switch compilation for Linux from pyinstaller to Nuitka.
- Switch compilation for Windows from mingw/gcc to MSVC.
- Switch compilation platform for the .tar.gz/.zip distribution files from CentOS 7 to Ubuntu 20.04.
- Refactor CI/CD pipeline, move from self-hosted Github runners to runners at Github.
- Linuxfabrik/lib are now part of the requirements.txt, so no extra checkout needed any more.
Icinga Director:
- all-the-rest.json: Make all dmesg Service Sets use sudo
- all-the-rest.json: Check /var/log/syslog file size in all Debian Service Sets
- All plugins for Windows: Prepared for msi and changed default path from C:\ProgramData\icinga2\usr\lib64\nagios\plugins to c:\Program Files\icinga2\sbin\linuxfabrik
- Replace png with svg icons for all plugins
Monitoring Plugins:
- about-me: Determines date of birth of cloud VMs more accurately
- about-me: Add Mastodon detection
- about-me: Add Moodle detection
- about-me: Add WHMCS detection
- dhcp-scope-usage: Ignore PercentageInUse fractions
- disk-io: Re-add support for Windows after last rewrite
- disk-usage: Add
--list-fstypesand--fstypefor specifying the file system type - fail2ban: More compact output (closes #141)
- file-size: fix help text
- fs-inodes: Check inode usage on real and different disks.
--mountparameter is deprecated. - infomaniak-events: return CRIT in case of critical events
- keycloak-version: Check Keycloak Version via REST API (#748)
- librenms-alerts, librenms-health: Compact output is the new default and shows non-OK only
- mysql-thread-cache: DB daemon must have been running for an hour before the cache hit rate is measured.
- mysql-version: handle
mysql: Deprecated program name - nextcloud-security-scan: Handle error on https://scan.nextcloud.com/
- nodebb-stats: In "Last user", don't report the user you login with (#536)
- openstack-nova-list: No more need for keystoneauth and keystoneclient
- redis-status: Add
--tlsparameter - rhel-version:
--extended-supportchecks for "Extended Life Cycle Support" EOL (#740) - rocketchat-version: use EOL library, parameter
--cache-expireis deprecated - systemd-unit: Improve output
- uptime: Report downtime (#191)
Build, CI/CD:
- Remove support for debian10, rhel7, ubuntu1804 packages (OS's are EOL)
Notification Plugins:
- notify-*-rocketchat: remove telegram functionality
2024060401 - 2024-06-04
Monitoring Plugins:
- mysql-query
Build, CI/CD:
- Added Ubuntu 24.04
2024052901 - 2024-05-29
Icinga Director:
- all-the-rest.json: Remove all predefined "Journald Query" definitions, as they were not as useful in practice as we thought. Single services are more useful.
- Lowered the criticality of many service templates and service set services to make the monitoring less noisy by default. Make sure to double check and increase the criticality for important services.
Monitoring Plugins:
- disk-io: Nearly rewritten from scratch, old parameters have been replaced by new, better ones. Perfdata "throughput" has been renamed to "bandwidth". Filter disks which are really mounted, translate dm-* device names, wildcard support for ignore disks (#709, #708, #676)
- file-size: Note that the plugin now requires a size qualifier when specifying parameters, e.g.
--warning=10Kfor 10 KiB (instead of--warning=10000as in previous versions). - journald-query: Pattern-matching is now always case-sensitive (#745)
- librenms-alerts: Rewritten from scratch to fetch from LibreNMS MySQL/MariaDB database (therefore the check comes with new parameters)
- librenms-health: Rewritten from scratch to fetch from LibreNMS MySQL/MariaDB database (therefore the check comes with new parameters)
- php-fpm: Remove parameters
--*-max-childrenbecause php-fpmmax children reachedis either 0 or 1 - snmp: Improve Performance Data Handling (#481) - update your CSV definition files and add two more columns according to the check's README
- uptime: Use the plugin to warn about recent reboots (#722). Note that the plugin now requires a time qualifier when specifying parameters, e.g.
--warning=180Dfor 180 days (instead of--warning=180as in previous versions).
Notification Plugins:
- All notification plugins are now installed in
/usr/lib64/nagios/plugins/notifications/by default, because otherwise installing the notification and monitoring plugins package at the same time fails (#726)
Icinga Director:
- all-the-rest.json: New TuneD Service Set (therefore removed from all "OS - RHEL" service sets)
Monitoring Plugins:
- dhcp-relayed (a port of check_dhcp_relayed)
- composer-version
- mediawiki-version
Icinga Director:
- all-the-rest.json: Rename "Starface Java Status" to "Starface Java Memory Usage"
- all-the-rest.json: Ignore session-c*.scope in systemd-units-failed by default
Monitoring Plugins:
- *-version: Add new parameters
--insecure--no-proxy--timeout - about-me: Add detection of non-default software, udp ports, hardware and much more
- about-me: Add new parameters
--insecure--no-proxy--timeout - about-me: Pipes ("|") within the plugin output lead to broken perfdata (#741)
- apache-httpd-status: Add new parameters
--no-proxy--timeout - axenita-stats: Add new parameters
--insecure--no-proxy - cpu-usage: Add
--topparameter, showing 5 top processes by default - csv-values: Pipes in data are seen as delimiter between check output and performance data (#727)
- deb-lastactivity: WARN if last modified timestamp is not found for one or more packages (#743)
- diacos: Add new parameter
--insecure - feed: Make use of
--insecure--no-proxy--timeout - file-descriptors: Add
--topparameter, showing 5 top processes by default - file-size: Support Nagios ranges for
--warningand--critical(PR #735, thanks to djmcd89) - fs-ro: Add
/dev/loopto default ignore list - fs-ro: Make output better readable (PR #729, thanks to Konrad Bucheli)
- fs-ro: Show mount point info on first line when there is only one hit (PR #730, thanks to Konrad Bucheli)
- githubstatus: Add new parameters
--insecure--no-proxy--timeout - gitlab-health: Add new parameters
--insecure--no-proxy - gitlab-liveness: Add new parameters
--insecure--no-proxy - gitlab-readiness: Add new parameters
--insecure--no-proxy - grassfish-*: Add new parameters
--insecure--no-proxy--timeout - haproxy-status: Add new parameters
--insecure--no-proxy - huawei-dorado-*: Add new parameter
--insecure - infomaniak-*: Add new parameters
--insecure--no-proxy--timeout - infomaniak-events: Add new parameter
--ignore-regex - infomaniak-swiss-backup-products: Improve output
- jitsi-*: Add new parameters
--insecure--no-proxy - journald-query: Remove hard-coded
--bootparameter from query - kvm-vm: Improve output
- librenms-version: Fetches info from local SQLite using new librenms library
- logfile: Add new parameters
--insecure--no-proxy--timeout - memory-usage: Add
--topparameter, showing 5 top processes by default - metabase-stats: Add new parameters
--insecure--no-proxy--timeout - mod-qos-stats: Add new parameters
--insecure--no-proxy--timeout - mysql-memory: Enhance output, set threshold to 95%
- nextcloud-security-scan: Add new parameters
--insecure--no-proxy - nextcloud-stats: Add new parameter
--timeout - nodebb-*: Add new parameter
--no-proxy - nginx-status: Add new parameters
--insecure--no-proxy--timeout - ntp-chronyd: Provide config info if an ntp server is not being used
- onlyoffice-status: Add new parameters
--insecure--no-proxy - php-fpm-ping: Add new parameters
--insecure--no-proxy--timeout - php-fpm-status: Add new parameters
--insecure--no-proxy--timeout - php-status: Add new parameters
--insecure--no-proxy--timeout - redfish-drives: Add new parameters
--insecure--no-proxy--timeout - redfish-sel: Add new parameters
--insecure--no-proxy--timeout - redfish-sensor: Add new parameters
--insecure--no-proxy--timeout - rocket-*: Add new parameters
--insecure--no-proxy--timeout - sap-open-concur: Add new parameter
--insecure - statuspal: Add new parameters
--insecure--no-proxy--timeout - swap-usage: Report the top 3 processes causing the usage (Linux only)
- swap-usage: Add
--topparameter, showing 5 top processes by default - veeam-status: Add new parameters
--insecure--no-proxy - wildfly-*: Add new parameters
--insecure--no-proxy - xml: Add new parameter
--insecure
Icinga Director:
- all-the-rest.json: Fix "FreeIPA Server Service Set" definition
Monitoring Plugins:
- about-me: Throws exception for openvas (#749)
- infomaniak-events: Fix
UnboundLocalError: local variable 'keys' referenced before assignment - nextcloud-stats: KeyError: apps (#731)
- ntp-ntpd: Fixed unpacking of ntpq -p values (PR #758, thanks to Leo Pempera)
- ntp-w32tm: Fix
UnboundLocalError: local variable 'clock_rate' referenced before assignment
2023112901 - 2023-11-29
Monitoring Plugins:
- Notifications Plugins now generate URLs for Icinga DB Web instead of the old IcingaWeb2 Monitoring Module (#643)
Grafana:
- mysql-connections: Add Grafana dashboard
- mysql-memory: Add Grafana dashboard
Icinga Director:
- all-the-rest.json: Add Debian 12 (Bookworm), add deb-lastactivity
- all-the-rest.json: Add Apache Solr Service Set
- all-the-rest.json: Increase file size warning for
/var/log/secure
Monitoring Plugins:
- about-me: Add detection of Apache Solr
- apache-solr-version
- deb-lastactivity (PR #710, thanks to Yannic Schüpbach)
- gitlab-health (#670)
- gitlab-liveness (#670)
- gitlab-readiness (#670)
- gitlab-version
- ntp-w32tm (#629)
- openjdk-redhat-version
- openstack-nova-list
- postgresql-version
- python-version
- redis-version
- statuspal
Project:
- Add a
requirements.txt
Features:
- sudoers: Don't log command calls any longer.
Icinga Director:
- all-the-rest.json: Remove "Journald Query - aide-check.service" from the AIDE service set because it's not useful
Monitoring Plugins:
- All plugins: Consistently reporting errors using cu() instead of oao()
- *-version: Add eol offset date, optional warn on new major/minor/patch
- *-version: Curl from https://endoflife.date first, then use hardcoded version (#680)
- about-me: Add detection of ncdu
- about-me: Add detection of yarn
- about-me: Show systemd timers with next runtime
- cpu-usage: On Windows, exclude "System Idle Process" from the Top3 list
- disk-smart: Skip unsupported disks (#672)
- disk-usage: Add a parameter to select performance data (#697)
- fail2ban: Improve output, add unit-test
- fortios-firewall-stats: Allow the check to run even some FortiOS users use only IPv4 or IPv6 (PR #719, thanks to Pierrot la menace)
- grafana-version: Add Grafana v9.5
- infomaniak-events: Add filter for service categories
- infomaniak-swiss-backup-devices: Improve column ordering in output
- journald-query: Improve output
- mysql-aria: Remove WARN if
aria_pagecache_read_requests> 0 andpct_aria_keys_from_mem< 95% - mysql-connections: Add perfdata mysql_max_used_connections
- mysql-connections: Report and warn on current usage instead of peak usage, and improved output.
- mysql-innodb-buffer-pool-size: Improve code and output
- mysql-logfile: Returns OK instead of UNKNOWN if logfile is found but empty
- mysql-logfile: State only UNKNOWN if the log is empty and wasn't set deliberately (PR #716, thanks to Eric Esser)
- mysql-logfile: Stop magic auto-configure if
--server-logis given - openstack-nova-list: Make more robust in case of OpenStack errors
- php-version: Check multiple installed PHP versions (#694)
- ping: Check plugin to fast states "error" (#691)
- qts-*: 'Keyerror: func' while executing qts-plugins (#692)
- qts-*: General code and README improvements, all tested against QuTScloud 4.5.6, 5.0.1 and 5.1
- qts-temperature: Is it correct to have one value for CPU and System Temperature Threshold? (#313)
- qts-version: Shows up to date even when new firmware available (#692)
- rocketchat-stats: There are new values available (#151)
- systemd-unit: Encode unit-name to text before running systemd command
- uptime: Additionally report last reboot time (#190
- xca-cert: refactor check, make better use of the new libraries (#75)
Monitoring Plugins:
- csv-values: header included in data results despite setting "--skip-header" (#706)
- journald-query: Rename perfdata from "sudo journald-query" to "journald-query"
- path-rw-test: To avoid race conditions, use a unique filename (#283)
- qts-disk-smart: Plugin not working since new update (#696)
- swap-usage: Fix Traceback
PdhAddEnglishCounterW failed
2023051201 - 2023-05-12
Monitoring Plugins:
- disk-usage: Add include mount points/fs (#662) (so dropped
--ignoreparameter) - keycloak-version3: Simplified, no longer cares about patch levels, no longer needs internet access (so dropped some parameters)
- php-version3: Simplified, no longer cares about patch levels, no longer needs internet access (so dropped some parameters)
- wordpress-version3: Simplified, no longer cares about patch levels, no longer needs internet access (so dropped some parameters)
- Implement a new and cleaner directory structure (#350)
- Remove all Python 2 based plugins and libraries from the project, and therefore remove the "3" suffix from all Python3-based plugins and libraries as well (#589)
- Simplify sudoers (#651)
Features:
- Question/Documentation: Are the tools to compile the download binary part of this repo? (#660)
Monitoring Plugins:
- apache-httpd-version
- by-ssh
- cometsystem (PR #650, thanks to Dominik Riva)
- fedora-version
- githubstatus
- grafana-version
- mysql-version
- network-io (#619)
- openstack-swift-stat
- postfix-version
- rhel-version
- safenet-hsm-state (PR #648, thanks to Dominik Riva)
Grafana:
- Add new panels, update existing ones
- Dashboards written in Jsonnet, to be maintained by Grizzly
- Add a grafana dashboard for the inbuilt icinga command (#577)
Monitoring Plugins:
- apache-httpd-status: Remove
ReqPerSec,BytesPerSec,BytesPerReq,DurationPerReqperfdata as they are wrong - disk-io:
--ignorenow ignores all disks "starting with" the given parameter value - disk-io: Move top3-processes-which-caused-the-most-io to here (#285)
- disk-usage: Add include mount points/fs (#662)
- disk-usage: allow passing absolute values for warn/crit (#114)
- disk-usage: Also show "free" in table (#482)
- disk-usage: Make plugin output more generic (#664)
- fortios-version: Simplified, returns version information in perfdata
- journald-query: Lower default for
--sincefrom 24h to 8h - kemp-services: Display the original status of every Virtual Service (#654)
- Move "test3" and "examples" folder into a new "unit-test" folder for each plugin (#288)
- nextcloud-version: Simplified, no longer cares about patch levels, no longer needs internet access
- php-fpm-status: Remove
req per secperfdata as it is meaningless - php-status: Move monitoring.php
- php-status: Rename perfdata item from
php-opcache-memory_usage-current_wasted_percentagetophp-opcache-memory_usage-current_wasted-percentage - restic-snapshots: Shorten output, add
--lengthyparameter, change DEFAULT_GROUP_BY to 'host,paths' - Unified most of the *-version3 checks in behavior, also using data from https://endoflife.date (no need for internet access).
Monitoring Plugins:
- kemp-services: Credentials not converted correctly (#653)
- disk-smart: Getting error: "KeyError: 'serial_number'" (#659)
- disk-usage: module 'psutil' has no attribute 'disk_partitions' (#663)
- file-age: Type object 'SMBDirEntry' has no attribute 'from_filename' (#665)
Monitoring Plugins:
- top3-processes-which-caused-the-most-io (moved it into disk-io)
2023030801 - 2023-03-08
Features:
- Move all CHANGELOG items for the "libs" into its own file (since it is a stand-alone project)
Monitoring Plugins:
- journald-query3: Removed
--grepand--case-sensitiveparameter which are a bit weird and only work on systemd v237+. Replaced by--ignore-regex. - journald-query3: Implement filter (therefore the check comes with new parameters) (#641)
- journald-usage3: Switch
--warningparameter from MiB to GiB - mysql-*3: Removed parameters
--hostname,--password,--portand--usernameand switched to option-file authentication (therefore all checks come with new parameters) - pip-updates3: Include- and exclude-property (therefore the check comes with new parameters) (#646)
- redis-status3: Add option to disable hit-ratio check (therefore the check comes with new parameters) (#623)
- service3: Check is rewritten and now able to check multiple Windows services on a host, supporting Python Regular expressions and threshold ranges (therefore the check comes with new parameters)
- veeam-status3: Add an option switch to "WarningVmLatestState" for an integer value of tolerated VM warnings (therefore the check comes with new parameters) (#630)
Icinga Director:
- Removed "OS - RHEL 7 Basic Service Set (Hardware)"
- Removed "oVirt Engine 4.2 Service Set"
- Removed "oVirt Engine 4.3 Service Set"
- Removed "oVirt Host Service Set"
- Removed "oVirt VM Service Set (RHEL 7)"
- Removed "oVirt VM Service Set (RHEL 8)"
- Removed "oVirt VM Service Set (Windows Python)"
- Removed "oVirt VM Service Set (Windows)"
- Removed "PostgreSQL 9.6 Service Set"
- Removed tags "redhat7" and "redhat8", because there are also "rhel7" and "rhel8"
Features:
- Linuxfabrik Monitoring Plugins SELinux Type Enforcement Policies
- Add new sudoers files for Alma 9, RHEL 9, Rocky 9, Fedora 37, Oracle 7, Oracle 8, Oracle 9 (#627 and more)
Monitoring Plugins:
- crypto-policy
- csv-values
- grassfish-licenses
- grassfish-players
- grassfish-screens
- infomaniak-events
- journald-query
- journald-usage
- ntp-chronyd (from "ntp-offset: Split it into three different ntp-checks (#449)")
- ntp-ntpd (from "ntp-offset: Split it into three different ntp-checks (#449)")
- ntp-systemd-timesyncd (from "ntp-offset: Split it into three different ntp-checks (#449)")
- restic-check
- restic-snapshots
- restic-stats
- systemd-timedate-status
- tuned-profile
Notification Plugins:
- notify-host-rocketchat-telegram
- notify-host-zoom
- notify-service-rocketchat-telegram
Icinga Director:
- AIDE Service Set
- All RHEL-based Basic Service Sets: Systemd Unit - debug-shell.service
- Apache Service Set for Debian 11 (#534)")
- Basic Service Set for Debian 11 (#533)")
- FreeIPA Server Service Set
- Grav Service Set
- Ubuntu 22 Service Set
- UPS Service Set (Network UPS Tools, nut)
Features:
- Enhanced sudoers files
Monitoring Plugins:
- about-me3: Add detection of restic
- about-me3: Add detection of Snap
- about-me3: Add Maker and Model (#637)
- about-me3: Improve detection of coturn
- about-me3: Improve psutil error handling
- about-me3: Make external IP search configurable with 3rd party providers (and disabled by default) (#645)
- about-me3: Re-written from scratch, now also recommends tags for our Icinga Director Basket. New parameter
--tags. - about-me3: Remove unstable bonding detection
- disk-usage: Move state output to usage column
- dmesg3: add additional message to ignorelist
- docker-info3: Report more info in case of failures
- docker-stats3: Report more info in case of failures
- fs-ro: Exclude squashfs filesystems (#412)
- fs-ro: Ignore ramfs (#617)
- infomaniak-swiss-backup-*: Apply new API version
- journald-usage: Increase DEFAULT_WARN to 6 GiB
- matomo-reporting3: Perfdata now is also aware of percentages
- mysql-connections: add --ignore-name-resolution (#631)
- mysql-storage-engines3: Improve recognition of schema.table
- mysql-user-security: Ignore mysql.sys and mariadb.sys users
- network-connections: Alert if there's more than a specified number of conns (#621)
- php-status3: Improve output in case of startup/config/module errors
- php-status3: URL to monitoring.php should be optional
- php-version: Add PHP 8.3
- qts-version3: Add support for firmware 5.0.1+
- redis-status: Do not warn on "Peak memory"
- rpm-lastactivity: do | sort | tail -1 with Python Code (#94)
- service3: Now able to check multiple windows services at once (#609)
Icinga Director:
-
Enhanced RHEL 7+ and Fedora-based Service Sets by TuneD Profile
-
Enhanced RHEL 8+-based Service Sets by Crypto Policy
-
Enhanced all Service Sets checking for a Systemd Service by an according Journald Query
-
Enhanced all Service Sets checking for a Systemd Service by Systemd TimeDate Status
-
Notifications are enabled only for critical hardware-related services (assuming you want to stay up at 2 a.m.)
-
Split up the MariaDB/MySQL service sets into smaller sets:
- MySQL/MariaDB InnoDB Service Set
- MySQL/MariaDB Metrics Service Set
- MySQL/MariaDB Replication Service Set
- MySQL/MariaDB Schemas Service Set
- MySQL/MariaDB Security Service Set
- MySQL/MariaDB Service Set
Monitoring Plugins:
- disk-usage: ignore type CDFS by default (#632)
- docker-stats missing shortening of containername in perfdata output (#600)
- file-age: critical reported for new files because modification time is negative or not set (#618)
- infomaniak-swiss-backup-devices3: Fix TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'
- librenms-version: KeyError: 'mysql_ver' (#602)
- matomo-reporting3: --metric - Got more information back instead one metric (#603)
- nextcloud-stats: Fix error non-existing ALWAYS_OK Attribute (#640)
- ping: ping -t has to be int but its float (#628)
- rpm-lastactivity: ValueError: invalid literal for int() with base 10: '' (#616)
- systemd-timedate-status: UNKNOWN with "unknown operation show" on RHEL7 (#605)
- updates: On Windows with closed firewall a PowerShell error is returned (#633)
Features:
- All plugins: Remove code for self-handling Python virtual environments (venv). (#543)")
Monitoring Plugins:
- ntp-offset (due to "ntp-offset: Split it into three different ntp-checks (#449)")
Icinga Director:
- Remove DiagTrack from Windows Service Sets, since it's windows telemetry
2022072001 - 2022-07-20
- wildfly-memory-pool-usage: Flapping PS_Eden_Space reporting (#563) - Removed
--warningand--criticalparameters (not needed anymore)
Features:
- This CHANGELOG.
- Add hidden
.windowsfiles as indication for automatic compilation on/for Windows systems. - Add sudoers file for Fedora 35 and Fedora 36.
Monitoring Plugins:
- diacos (PR #567, thanks to Dominik Riva)
- infomaniak-swiss-backup-devices
- infomaniak-swiss-backup-products
- mysql-aria
- mysql-binlog-cache
- mysql-connections
- mysql-database-metrics
- mysql-innodb-buffer-pool-instances
- mysql-innodb-buffer-pool-size
- mysql-innodb-log-waits
- mysql-joins
- mysql-logfile
- mysql-memory
- mysql-open-files
- mysql-perf-metrics
- mysql-replica-status
- mysql-slow-queries
- mysql-sorts
- mysql-storage-systems
- mysql-system
- mysql-table-cache
- mysql-table-definition-cache
- mysql-table-indexes
- mysql-temp-tables
- mysql-thread-cache
- mysql-traffic
- mysql-user-security
- nodebb-cache
- nodebb-database
- nodebb-errors
- nodebb-events
- nodebb-groups
- nodebb-info
- nodebb-users
- strongswan-connections
- xml (replacement for "wsdl" check from PR #583, thanks to Dominik Riva)
Icinga Director:
- duplicity Service Set
- strongSwan Service Set
Monitoring Plugins:
- about-me: Add AIDE (#546)
- about-me: Add Birthdate (#554)
- about-me: Add certbot and acme.sh (#433)
- about-me: Add gpg (#511)
- about-me: Add list of listening ports (#538)
- about-me: Add mod_security (#496)
- about-me: Add swanctl (#575)
- about-me: Print its own version (#439)
- about-me: Report active tuned-Profile in first line if tuned.service is found and running (#374)
- about-me: Report Boot Mode (#562)
- about-me: Show key features of the Machine (#561)
- All checks using SQLite databases: More unique sqlite db names (#333)
- apache-httpd-status: New parameter
--insecure - cpu-usage: Subtract the "nice" percentage from thresholds (#550)
- dhcp-scope-usage: Parse PercentageInUse locale-aware (PR #551)
- disk-io: Checks if psutil has a certain minimum version on systems with kernel 4.18+.
- disk-smart: Exclude zfs-volumes (PR #539)
- disk-smart: Now also runs on Windows (PR #553)
- disk-smart: Properly handle Power_On_Hours_and_Msec attribute perfdata parsing (PR #549)
- disk-usage: Critical but first line of plugin output prints "OK" (#545)
- docker-info: Raise CRIT on return code != 0 (#569)
- docker-stats: Improve handling of container names (#586). New parameter
--full-name. - file-age: Improve perfdata labels
- file-age: Performance data aggregation on file_age check (PR #544)
- file-age: shorten the message (#559)
- infomaniak-swiss-backup-devices3: Increase default thresholds from 80/90% to 90/95%
- infomaniak-swiss-backup-devices3: Sort output table by "Tags" column
- infomaniak-swiss-backup-products3: Changed thresholds from 14/5 days to 6/3 days
- infomaniak-swiss-backup-products3: Sort output table by "Tags" column
- ipmi-sel: Change the order of events (#558)
- needs-restarting3: Debian Buster/bullseye command not found (#572)
- php-status: Add a "--dev" switch to not warn on display_errors=On and display_startup_errors=On (#461)
- php-status: Change behavior when handling default values (#540)
- qts-*: Increase default connect timeout from 3 to 6 seconds
- Revert Python 3.6+
f-strings to use.format()to be more conservative - systemd-units-failed: Allow wildcards for the
--ignoreparameter (#542)
Icinga Director:
- Adjust windows director definitions to the new folder structure
- Increase windows service check intervals
Monitoring Plugins:
- disk-io3: Fix python3 lib calls
- file-count3: Traceback: KeyError: 'lib' (#591)
- fortios-memory-usage3: Change urllib.quote to urllib.parse.quote (PR #599)
- logfile3: "Database locked" and "UNKNOWN" in case of massive usage on a host (#578)
- keycloak-version3: AttributeError: 'NoneType' object has no attribute 'group' (#555)
- xca-cert3: Checks expiry date again
Monitoring Plugins:
- mysql-stats
- nodebb-stats
- nodebb-status
Icinga Director:
- Remove gpsvc on Windows
2022030201 - 2022-03-02
This is a "we migrated everything from GitLab to GitHub, but had to adjust many details afterwards" version. In terms of source code, nothing has changed compared to 2022022801, just a bunch of links in source code comments and READMEs.
- This is the last release including bugfixes for the Python 2 variant of all checks.
- This project has moved from a public repo on our self-hosted GitLab server to a public repo on GitHub to increase visibility and reach a larger community.
- The Git branches "master" and "develop" no longer exist - in the future we will only work with the "main" branch and create releases based on tags.
- Due to the removal of binaries (zip and png files), all commit hashes have changed.
- Removed all checks compiled for Windows from Git and moved them to our download server.
Monitoring Plugins:
- IPv4 scope usage for a Windows DHCP server service (running on Windows using PowerShell, or remotely on Linux or Windows using WinRM).
- Huawei OceanStor Dorado storage system: Status of backup power modules (Backup Battery Unit (BBU)), controller, disk basic status and performance data, enclosure information, plus basic information about fans, interfaces, power, attached hosts, the system itself, HyperMetro domain and pairing information.
- Redfish-based BMCs (instead of IPMI): drives, system event logs (SEL) and sensor data.
Notification Plugins:
- Notify via Zoom
- Notify via E-Mail
Icinga Director:
- Active Directory Certificate Services Service Set (#472)
- Active Directory Domain Services Service Set (#468)
- Active Directory Federation Services Service Set (#471)
- Active Directory Lightweight Directory Services Service Set (#473)
- acme.sh Service Set (#447)
- DHCP Server Service Set (#466)
- DHCP Server Failover Feature Service Set (#467)
- dhcp-scope-usage: add Icinga Director configuration
- DNS Server Service Set (#470)
- Duplicati Service Set
- Huawei Dorado Service Set
- Redfish Service Set
- Redfish no agent Service Set
- tpl-service-cert and tpl-service-cert-no-agent service templates
- Veeam Backup & Replication Service Set (#464)
- Web Server (IIS) Service Set (#465)
- Windows Basic Service Set extended Service Set
- Windows Defender Antivirus Service Service Set (#469)
Assets:
- Rocky 8 sudoers
- openSUSE Leap 15 sudoers
Monitoring Plugins:
- about-me: add ownCloud and alternate Nextcloud Path (#512)
- about-me: report virtualisation (#480)
- about-me: run even if psutil is or cannot be installed (#514)
- all plugins: adapt to pylinted libraries (#526)
- all plugins: let the new txt3 library do all encoding and decoding (#507)
- all plugins: pylint all check plugins (#529)
- all plugins: use new library "human.py" (#521)
- all plugins: use new library "shell3.py" (#525)
- all plugins: use new library "time3.py" (#524)
- all plugins: use new library "txt3.py" (#522)
- dhcp-scope-usage: add WinRM capability (#477)
- file-age: recompiled for windows
- librenms checks: add more filtering parameters
- librenms-alerts: add
--device-groupparameter - librenms-health: adjust check timeout
- nginx-status: print human readable total values (#520)
- php-status: hint when not running with sudo (#459)
- redis-status: make more tolerant when it comes to Defragmentation (#425)
- redis-status: support Redis 3.0 (#510)
- redis-status: only warn if cache hit rate < 10% (#490)
- redis-status: warn on bad OS configuration (#428)
- rocketchat-stats: rename rocket.chat to rocketchat (#335)
- swap-usage: don't display "swapped in" and "swapped out" on Windows (#454)
- veeam-status: make
--usernameand--passwordmandatory (#499) - wildfly-deployment-status: allow to limit deployment by name (#497)
Icinga Director:
- all-the-rest.json: adjust loolwsd to coolwsd
- all-the-rest.json: adjust director baskets for the new Windows variants
- all-the-rest.json: adjust Huawei service names
- all-the-rest.json: enable notifications for Redfish checks
- all-the-rest.json: extend Windows Basic Service Set
- all-the-rest.json: ensure the no-agent and sudo variants are based on Linux
- all-the-rest.json: split up LibreNMS services by type in the Service Set
- getent: increase Icinga timeout to 30 sec (#455)
Tools:
- check2basket: extend to support notification-plugins
Monitoring Plugins:
- about-me: Open Virtual Machine Tools Error: vmtoolsd must be run inside a virtual machine on a VMware hypervisor product (#513)
- about-me: Traceback "IndexError: list index out of range" (#443)
- about-me: Traceback 'ModuleWrapper' object has no attribute 'net_if_addrs' (#438)
- apache-httpd-status: Traceback on Ubuntu Xenial (16.04) (#436)
- borgbackup: AttributeError: 'str' object has no attribute 'decode' (#430)
- disk-smart: disk names like sdda, sdab and so on were not checked (#487)
- file-age: new files or modifications after now result in files from the future (#478)
- file-age: Windows variant crashes if using a glob wildcard (#494)
- fs-xfs-stats: I/O error "No such file or directory" while opening or reading /proc/fs/xfs/stat (#445)
- jitsi-videobridge-status3: TypeError: string indices must be integers (#527)
- librenms-health: timeout on too many values (#365)
- mysql-stats: Traceback (#170)
- nextcloud-stats3: TypeError: a bytes-like object is required, not 'str' (#517)
- nextcloud-stats3: TypeError: string argument without an encoding (#531)
- nextcloud-stats: DB size is reported using YiB (#463)
- nextcloud-version3: put get_owner() from base3 in here (#523)
- nginx-status3: ModuleNotFoundError: No module named 'lib.globals2' (#515)
- nginx-status: wrong perfdata (#440)
- ntp-offset: regular UNKNOWN when using with chrony (#71)
- php-status3: SyntaxError: invalid syntax (#532)
- php-status: On some machines, display_startup_errors is N/A (#434)
- php-version: Warns "PHP v7.4.25 is available (installed: v7.4.24)", but should not (#435)
- procs (Windows): Traceback "AttributeError: module object has no attribute STATUS_PARKED" (#453)
- procs3: on Windows, it always returns
oldest proc created 52Y 1M ago(#506) - procs: when checking if a process exists, returns OK even if the process is missing (#488)
- redfish-sensor: returns 404 against ESXi (#460)
- redis-status3: AttributeError: module lib has no attribute "disk2" (#498)
- redis-status: mistakenly reports "net.core.somaxconn is lower than net.ipv4.tcp_max_syn_backlog [WARNING]" (#458)
- redis-status: Redis requires more memory than available and is forced to use swap (#486)
- redis-status: warning when using a password on command line (#450)
- swap-usage: recompiled for Windows (#454), (#456)
- swap-usage: UnboundLocalError: local variable msg_body referenced before assignment (#456)
- systemd-unit: on Fedora, failed Units are printed with all columns shifted one to the right (#328)
- systemd-unit: UnitFileState is "", but supposed to be "empty" (#509)
- users: on Windows: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 25: invalid start byte (#451)
- users: quote the output because of possible pipe symbol in "WHAT" column (#17)
- veeam.py: ValueError: need more than 2 values to unpack (#45)
- Windows-compiled plugins are shipped without required 3rd party Python modules (#504)
Icinga Director:
- all-the-rest.json: fix GUIDs
Grafana:
- dns: Grafana Panels divide query time by 1000 (#453)
- fail2ban: Grafana Panels list "Banned IPs" twice (#139)
- fortios-network-io: fix Grafana dashboard name
Tools:
- basket-join: allow missing Datafield key
- basket-join: fix error on duplicate entries in JSON
- check2basket: abort on error with the
--autooption - check2basket: add workaround for notification-plugins
- check2basket: fix problem with notification-plugins
Icinga Director:
- all-the-rest.json: delete SysMain from Windows Service Set (#446)
- all-the-rest.json: remove getent from the basic Service Sets
- all-the-rest.json: disable TimeBrokerSvc (#427)
Tools:
- check2basket: remove default states for notifications
Features:
- All of the checks are ported to Python 3 (suffixed by
3). - Most of the checks are also available on Windows (compiled with Nuitka and suffixed by
.zip). - At the same time the style of the source code of all plugins has been unified according to the example check plugin.
- All plugins run flawlessly on Rocky and Alma Linux (simply so that was said).
Monitoring Plugins:
- Jitsi Videobridge Statistics and Status
- NodeBB Statistics, Status and Version
- Redis
- SAP Open Concur (thanks to Dominik Riva)
- Starface PBX: Account, Database and Peer Statistics; Overall, Backup and Channel Status; Java Memory Usage
- Veeam Status
Event Plugins:
- Cloudflare Security Level
Icinga Director:
- Four checks have been added to the Windows Basic ServiceSet (disk-io, dns, swap-usage, top3-processes-which-caused-the-most-io)
Monitoring Plugins:
- about-me: Reports much much more inventory info. New sections are Interfaces (IPv4), systemd default target, systemd timers, systemd enabled units, systemd mounts, systemd automounts, non-default users and crontabs.
- apache-httpd-status: Now calculates the average values ReqPerSec, BytesPerSec, BytesPerReq and DurationPerReq over Apache's uptime.
- php-*: Report more (don't forget to install the new
monitoring.phpas well). - procs: Counting is more accurate.
- ping: Mainly used for host alive checking, now reports OK on request (using
--always-ok) if a host cannot be reached for some reason only on the ping side, but can otherwise be checked e.g. by the Icinga agent.
Monitoring Plugins:
- about-me: add content of os family /etc/release file (#319)
- about-me: add GCC detection (#306)
- about-me: add GitLab Community Edition (Omnibus) detection (#371)
- about-me: add OpenVPN detection (#341)
- about-me: add the FQDN hostname to the first line (#368)
- about-me: add Veeam detection (#315)
- about-me: add vsftpd detection (#269)
- about-me: extend with more infos (#362)
- all plugins: add Python 3 versions for apache-httpd-stats (#327), axenita-stats (#376), borgbackup (#287), countdown (#377), disk-smart (#401), docker-info (#378), dummy (#379), fail2ban (#380), feed (#402), file-count (#381), fortios-* (#424), ipmi-sel (#384), ipmi-sensor (#385), kemp-services (#403), keycloak-version (#400), kvm-vm (#388), librenms-alerts (#389), librenms-health (#390), librenms-version (#314), mailq (#391), matomo-reporting (#405), matomo-version (#406), metabase-stats (#342), mysql-stats (#407), needs-restarting (#393), network-bonding (#409), network-port-tcp (#410), nextcloud-security-scan (#411), nextcloud-stats (#413), nginx-status (#414), ntp-offset (#387), onlyoffice-stats (#394), openvpn-client-list (#395), ping (#348), qts-* (#423), rocketchat-stats (#415), rocketchat-version (#416), sensors-battery (#418), sensors-temperature (#419), wordpress-version (#382), xca-cert (#375)
- all plugins: adapt source code to example plugin for file-size (#398), json-values (#399), logfile (#404), scheduled-task (#417), service (#386), snmp (#396), updates (#383), wildfly-* (#422)
- all plugins: consistently handle unicode (#334)
- all plugins: make usage of
--helppossible even if some Python modules are missing (#42) - all plugins: remove unnecessary import of lib.args (#347)
- all plugins: replace
print()byoao()for consistent unicode handling (#344) - all plugins: replace unit test code by new "test" library (#343)
- all plugins: save with UTF-8 encoding (#305)
- all plugins: use
lib.base.cu()instead ofprint_exc()(#345) - all plugins: validate automatically converted Python 3 variants (#359)
- apache-httpd-status: also print worker percentage state in table (#311)
- borgbackup: no need to open Borg logfile in binary mode (#420)
- cloudflare-security-level: make
--zone-idrepeatable (#309) - disk-usage: add
--ignoreparameter (repeating) (#351) - dmesg: add "brcmfmac" messages to ignore list (#338)
- dmesg: add
--ignoreparameter (repeating) (#340) - dmesg: reduce the output to a maximum of ten lines (#254)
- example: provide unit-tests (#326)
- file-age: improve output message (#361)
- file-ownership: check /tmp/linuxfabrik-plugin-cache.db (#356)
- file-ownership: fix defaults for Debian (#294), SLES (#317) and Ubuntu (#332)
- getent: also print the response (#297)
- openvpn-client-list: no need to open OpenVPN logfile in binary mode (#421)
- php-status: improve config and module error messages (#267)
- php-status: make check for a high Cache "Hit Rate" optional (#303)
- php-status: print php.ini "Off" and "On" values as "Off" and "On" (#325)
- php-status: remove "simplexml" from default module list (#284)
- php-status: report more opcache-settings in output table (#353)
- php-version: just check on PHP version Major.Minor (default), not Major.Minor.Patch (#304)
- php-version: test against package manager, print version from php.net just as a hint (#253)
- ping: add
--always-okfor unpingable but check-capable hosts (#392) - procs: alert on specific processes (#355)
- systemd-unit: the
--unitfilestateparameter should accept None to disable checking of the unit file state (#299) - systemd-units-failed: add
--ignoreparameter (repeating) (#160, #337) - wildfly-gc-status: increase default values for
avr_gc_time(#307) - wildfly-gc-status: refactor check (#308)
- wildfly-memory-pool-usage: don't alert on "PS_Survivor_Space" (if it exists) (#286)
Icinga Director:
- provide the Icinga Director command definitions using the basket (#301)
Tools:
- check2basket: add update mode (#203)
Monitoring Plugins:
- about-me: only last disk is shown (#281)
- about-me: remove newline after printing "vsftpd" (#364)
- about-me: reports loolwsd even if it is not installed (#370)
- about-me: too many values to unpack (#372)
- apache-httpd-status: ReqPerSec, BytesPerSec, BytesPerReq and DurationPerReq are average values calculated by Apache over its uptime (#310)
- apache-httpd-status: unsupported operand type(s) for +: 'float' and 'str' (#323)
- disk-io: after reboot, byte values are 0 or very low, so rate diffs are negative (#312)
- dmesg3: AttributeError: module 'lib' has no attribute 'base2' (#330)
- dmesg: always counts +1 (#331)
- dummy: broken in dev branch (#354)
- example3: partially uses base2 library (#369)
- file-age: correctly handle negative times (#188)
- getent: ascii codec can't decode byte (#367)
- mydumper-version: 'module' object has no attribute 'url2' (#322)
- mydumper-version: stumbles upon "v0.10.7-2" (#318)
- network-port-tcp: NameError: global name 'TYPE' is not defined (#298)
- php-status: monitoring.php does not run on PHP 7.2 (#289)
- php-status: reporting "Opcache not installed or not enabled" if monitoring.php is not used (#324)
- php-status: typo in output ("Opache") (#296)
- php-status: Uncaught Error: Call to undefined function opcache_get_status() (#290)
- php-version: ValueError: invalid literal for float(): 5.640-0+deb8u12 (#293)
- procs: counting in output seems to be wrong (#357)
- procs: NameError: name 'STATE_Ok' is not defined (#363)
- qts-temperatures: Traceback (#360)
- service: bad output/status if status is 'running' but not supposed to be 'running' (#336)
- systemd-units: UnitFileState might be empty ("") (#292)
- unit tests: fix failing tests (#346)
Monitoring Plugins:
- We removed the fah-stats, hostname and all Atlassian checks.
Features:
-
50% of the checks are ported to Python 3 (suffixed by
3), 17 checks of those available on Windows (compiled with Nuitka and suffixed by.zip). -
The human-readable units of measurement in the output of the checks are more precise, for example:
- Bytes: "MiB" always means "Mebibyte" = 1024 Kibibytes.
- Counters: The SI symbol "G" means "Billion" in "US, Canada and modern British", and "Milliard" in "Traditional European (long scale)".
- Date and Time: "M" means "Month" while "m" means "Minute".
- See README for further details.
-
We are using more and more Prometheus-compatible Performance Data Names (first checks doing this are fs-xfs-stats and nginx-status).
-
All README's have been revised, standardized and converted into RST format (reStructuredText). They are also available on https://docs.linuxfabrik.ch > Monitoring-Plugins.
-
Icons have been updated (useful for Icingaweb and other).
Monitoring Plugins:
- Apache mod_qos
- Docker Info and Statistics
- Filesystem XFS Statistics
- HAProxy Status
- LibreNMS Alerts and Version
- Logfiles (although we prefer using Graylog)
- Metabase Statistics
- mydumper Version
- Nginx Status
- OnlyOffice Statistics
- Path read/write test
- PHP Status and Version
- PHP-FPM Status and Availability
- pip for pending updates
- SNMP (although we prefer using LibreNMS)
- WildFly Deployment Status, Garbage Collector Status, Memory and Memory Pool Usage, Server Status, Thread Usage, Uptime, XA and Non-XA Datasource Statistics
Monitoring Plugins:
- disk-io: Automatically determines the maximum possible disk throughput.
- file-*: Deal directly with SMB/CIFS shares.
- ipmi-*: Can now connect remotely to Supermicro's IPMI, HPE iLo and DELL iDRAC.
Monitoring Plugins:
- about-me: add detection of Django (#196), LibreNMS (#195), mydumper (#202), Nikto (#197), OpenSSL-version (#164), OpenVAS (#194), tmate (#175) and more software (#171)
- about-me: extend PHP version checking (#136), improve version checking (#172)
- about-me: ignore zram devices (#227)
- about-me: report CentOS version in perfdata (#137)
- about-me: show "Local IP Address/Subnet" and "Public IP Address" (#256)
- all plugins: add Python 3 versions for dmesg (#239), dns (#229), file-descriptors (#230), file-ownership (#232), fs-inodes (#274), fs-ro (#236), getent (#237), load (#240), rpm-lastactivity (#241), selinux-mode (#275), swap-usage (#242), systemd-unit (#243), systemd-units-failed (#244), top3-processes-which-caused-the-most-io (#273)
- all plugins: implement the
*_or_nonearguments (#116) - apache-httpd-status: clean up code (#200)
- apache-httpd-status: make "total accesses" human-readable (#219)
- axenita-stats: add version number to perfdata (#184)
- cpu-usage: migrate top3-processes-which-consumed-the-most-cpu-time into cpu-usage (#248)
- cpu-usage: state in the README the different values' units (#209)
- disk-io: "State" belongs only to overusage of "RWx", remove separate column (#279)
- disk-smart: print "* sdc (model, ser) [CRIT]" instead of "* [CRIT] sdc (model, ser)" (#214)
- dmesg: add messages to ignore list (#192, #216, #270)
- dmesg: add severity parameter (#115)
- dmesg: reduce the output to a maximum of ten lines (#254)
- dmesg: use
--ctimeinstead of--reltime(#238) - feed: change behaviour, do not fetch feed items from the future (#95, #208)
- feed: in Atom feed, try "content" field when summary is not available (#207)
- feed: strip HTML from content (#206)
- file-descriptors: migrate top3-processes-opening-more-file-descriptors into file-descriptors (#247)
- file-ownership: add files according to CIS CentOS standard (#233)
- file-ownership: make the
--filenameparameter repeatable (#6) - file-ownership: print file, owner and group as table (#231)
- fortios-*: add the ability to specify a port (#186)
- fortios-*: HTTP-encode the password/access_token (#187)
- fs-ro: make
--ignoreparameter repeatable (#235) - ipmi-sel: make it usable against targets over the network (#169)
- ipmi-sensors: make it usable against targets over the network (#168)
- kemp-services: add port option (#189)
- memory-usage: migrate top3-processes into memory-usage (#246)
- memory-usage: unify v2 and v3 (#245)
- network-connections: unify v2 and v3 (#250)
- nextcloud-version: get apache user from owner of config/config.php (#225)
- nextcloud-version: review handling of Enterprise Channel (#142)
- nginx-status: make perfdata compatible to Prometheus (#271)
- php-fpm-status: rename col "ContLen" to "POST" (#211)
- php-status: improve config and module error messages (#267)
- php-status: remove "shmop" and "zip" from default module list (#215, #266)
- pip-updates: change "No venv." to "Not running in a venv." (#268)
- procs: always return perfdata for process memory usage (#264)
- procs: improve output (#255)
- procs: make filter for username, procname and arguments case-insensitive (#261)
- procs: show used filter in output (#263)
- wildfly-gc-status: collection-time and -count in perfdata are continuous counters (#185)
- wildfly-memory-pool-usage: refactor code to better distinguish between heap and non-heap (#183)
Monitoring Plugins:
- about-me: disk sizes are not shown on CentOS (#259)
- apache-httpd-status: struggles about html pages served via HTTP, containing "::" (#199)
- disk-io: if RW5 is < 0, set it to 0 (#265)
- disk-smart: ignore zram devices (#221)
- disk-smart: SyntaxError: invalid syntax, line 890 (#220)
- docker-info: Byte-UOM must be "B", not "b" (#180)
- docker-info: perfdata "ram" must be in "bytes" (#179)
- docker-stats: Byte-UOM must be "B", not "b" (#181)
- docker-stats: I/O values not usable (#277)
- docker-stats: remove "host_mem_usage", because counting is wrong (#276)
- feed: sometimes runs into 10s Plugin Timeout in Icinga and gets killed with UNKNOWN (#83)
- haproxy-stats3: TypeError: a bytes-like object is required, not "str" (#278)
- librenms-version: KeyError: "local_branch" (#204)
- nextcloud-stats: num_users counts every user who ever existed (#224)
- php-fpm-status: request duration is in us, not ms (#210)
- php-status: check status is printed without leading space (#257)
- php-status: don't set WARN threshold for Hit Rate in Perfdata (#251)
- php-status: opcache_hit_rate - WARN and CRIT are swapped (#226)
- procs: checking processes on CPU usage is wrong (#260)
- procs: several unknowns and tracebacks (#162, #166)
- users: "utf-8" codec can't decode byte 0x81 on Windows (#201)
Monitoring Plugins:
- fs-file-usage: replaced by file-descriptors (#234)
- Three of the four "Top 3" checks are merged into cpu-usage, file-descriptors and memory-usage.
Monitoring Plugins:
- virtualenv is not activated if the plugin is called using an absolute path / from a different directory (#154)
Features:
- Added support for using a virtual environment (see README)
Monitoring Plugins:
- file-age, file-count & file-size: Now support SMB.
- users: Added missing perfdata for Windows.
- nextcloud-version: throw UNKNOWN if update server is not available (#147)
- nextcloud-version: increase timeout for fetching the update server (#148)
- procs: added thresholds for cpu & memory
Monitoring Plugins:
- json: renamed to json-values due to collision with the official json library.
- pip-version: fixed mixup in the output message.
Monitoring Plugins:
- cpu-usage (for Windows)
- disk-usage (for Windows)
- dummy
- dummy (for Windows)
- file-age (for Windows)
- file-count
- file-count (for Windows)
- file-size (for Windows)
- json
- json (for Windows)
- memory-usage (for Windows)
- network-connections (for Windows)
- procs (for Windows)
- scheduled-task (for Windows)
- service (for Windows)
- updates (for Windows)
- uptime (for Windows)
- users (for Windows)
Monitoring Plugins:
- file-age: Now support globbing for selecting multiple files.
- file-size: Now support globbing for selecting multiple files.
- updates: Added the --always-ok parameter.
- users: Fixed the counting of user under Windows (it also includes disconnected users now)
Monitoring Plugins:
- systemd-unit: added more states
Monitoring Plugins:
- ntp-offset: error on server without ntp (#138)
Features:
- Added sudoers for Debian 9 and 10
Monitoring Plugins:
- This update restructures our GitLab repository and adds the first Windows-compatible python3 check plugins.
Features:
- We added a new utility to help generate Grafana Dashboards: grafana-tool. Check out the documentation for more infomation.
Monitoring Plugins:
- atlassian-confluence-version
- atlassian-jira-version
- cpu-usage (for Windows)
- disk-usage (for Windows)
- file-age (for Windows)
- file-size (for Windows)
- keycloak-version
- memory-usage (for Windows)
- network-connections (for Windows)
- pip-version
- procs (for Windows)
- qts-cpu-usage
- qts-disk-smart
- qts-memory-usage
- qts-temperatures
- qts-uptime
- qts-version
- scheduled-task (for Windows)
- service (for Windows)
- updates (for Windows)
- uptime (for Windows)
- users (for Windows)
- wordpress-version
Features:
- We unified all the sudoers into one file (for each OS), in the assets/sudoers folder.
Monitoring Plugins:
- borgbackup: changed the expected string in the logfile from rc to retc.
- feed: removed --no-icinga-callback, added --icinga-callback.
- procs: new --argument parameter.
Monitoring Plugins:
- feed: python traceback (#107)
- memory-usage: Print top3 memory consuming processes in case of WARN/CRIT (#108)
- ntp-offset: add systemd-timesyncd (#90)
- openvpn-client-list: output as table (#19)
- qts-version: "None" after update (#112)
- xca-cert: Print a list of all checked certs with "commonName, CA (y/n), Serial, Expiry date" starting at the second line (#65)
Monitoring Plugins:
- network-bonding
Monitoring Plugins:
- procs: new username parameter
Monitoring Plugins:
- nextcloud-version: AttributeError: NoneType object has no attribute group (#105)
Monitoring Plugins:
- fortios-cpu-usage
- fortios-firewall-stats
- fortios-ha-stats
- fortios-memory-usage
- fortios-network-io
- fortios-sensor
- fortios-version
- fs-ro
- kemp-services
- matomo-reporting
- matomo-version
- sensors-battery
- sensors-fans
- sensors-temperatures
- systemd-units-failed
Features:
- Most of the checks now also run on Ubuntu Server 16+.
- On stack traces, any token and password URL request parameters are now printed with asterisks.
- All checks calling shell commands force english output even if system locale is different.
Monitoring Plugins:
- disk-smart: Traceback if not running on hardware (#82)
- disk-io: Counts n loop Devices on Ubuntu 20 (#87)
- disk-usage: ignore snap Devices (#88)
- mailq: Test with Exim (#93)
- procs: total proc count in perfdata is always 0 (#96)
- apache-httpd-status: Traceback on Ubuntu 16 (#97)
- disk-io: Traceback on Ubuntu 16 (#98)
- nextcloud-version: Don't throw UNKNOWN if update server is not available, because it doesn't help at all (#99)
- disk-usage: ignore iso9660 devices (#100)
- apache-httpd-status: Report if server-info is malformed due to any reason (#101)
- sensors-temperature: Ignore psutil's IOError (#102)
Features:
- Most of the checks now also run on Ubuntu (tested on Ubuntu Server 20 Beta).
Monitoring Plugins:
- dns
- fah-stats
Monitoring Plugins:
- nextcloud-security-scan: missing urllib (#91)
- about-me: doesn't report details about NVMe disks (#89)
- ping: no duplicate Output; maybe switch to regex (#84)
Features:
- We refactored the whole library stack and adapted all checks to the new library standards.
- We started using docstrings for better documentation of libraries and plugins. Now its possible to use for example
pydoc cacheto get a description of the cache.py library.
Monitoring Plugins:
- getent
- nextcloud-version
- ping
- rocket.chat-version
Monitoring Plugins:
- docker-info, docker-container, network-io, redis, xca-cert for now. We will rewrite them from scratch soon.
Monitoring Plugins:
- feed
Monitoring Plugins:
- cpu-usage: Adjusted to changes in psutil
- dmesg: expanded the ignore list
- systemd-unit: improved output
Initial release for the general public.