Skip to content

Latest commit

 

History

History
200 lines (116 loc) · 10.4 KB

File metadata and controls

200 lines (116 loc) · 10.4 KB


Linuxfabrik Monitoring Plugins

230+ monitoring plugins for Icinga, Nagios & friends. Python 3.9+, all platforms. Smart defaults, auto-discovery, consistent cross-platform metrics, minimal dependencies. made by Linuxfabrik

GitHub Stars GitHub Version Python Platforms GitHub Issues OpenSSF Best Practices OpenSSF Scorecard GitHubSponsors PayPal


The Linuxfabrik Monitoring Plugins Collection

Nagios-compatible check plugins for Icinga, Naemon, Nagios and any other monitoring system that speaks the Nagios plugin API. Each plugin is a stand-alone CLI that reports one type of check: fast, consistent across platforms, minimal dependencies, reasonable defaults so WARN and CRIT only fire when it really matters.

Written in Python, released into the public domain under the UNLICENSE. Runs on any platform with Python 3.9+ (Linux, Windows, macOS, FreeBSD). For Windows we also ship pre-compiled binaries, so Python is not required on the target.

Documentation

Full documentation is at linuxfabrik.github.io/monitoring-plugins. It is rebuilt and deployed on every push to main, so the docs site is always in sync with this repository.

For a visual tour of what plugins look like in Icinga Web 2, see POSTER.md.

Try it Live

A public demo with the plugins wired into Icinga Web 2 and Grafana: icinga-demo.linuxfabrik.ch.

Quick Start

After installing, run a plugin directly to verify it works:

$ /usr/lib64/nagios/plugins/cpu-usage
5.1% - user: 3.0%, system: 1.0%, irq: 0.5%, softirq: 0.5%
guest: 0.0%, guest_nice: 0.0%, iowait: 0.0%, nice: 0.0%, steal: 0.0%
ctx_switches: 8.5G, interrupts: 6.8G, soft_interrupts: 1.7G|'cpu-usage'=5.1%;80;90;0;100 ...

Every plugin supports --help and prints its version with --version.

OS Compatibility

Family Tested releases Notes
Debian 11 (bullseye), 12 (bookworm), 13 (trixie)
RHEL and clones Rocky 8, Rocky 9, Rocky 10 Also Alma, CentOS Stream, Oracle.
SLE / openSUSE SLE 15.5 SLE 15 requires SP5.
Ubuntu 20.04 (focal), 22.04 (jammy), 24.04 (noble) 26.04 packages are built as well.
Windows Windows Server 2016 and later, Windows 10 and later Shipped as signed MSI, x86_64.

Other Linux distributions run the plugins fine as long as Python 3.9 or newer is available; you just lose the pre-built native packages.

Installation

The recommended path is our package repository for Linux (RPM/DEB) and the signed MSI for Windows. See INSTALL.md for per-distribution commands, the source-tarball and Git paths, sudoers drop-ins and SELinux bits.

Plugins that share setup steps:

Icinga, Grafana, Nagios

  • Icinga Director: import the shipped basket (Host Templates, Service Templates, ~150 Service Sets, Time Periods, Notifications). See ICINGA.md.
  • Grafana: per-plugin dashboards under check-plugins/<plugin>/grafana/, provisioned with Grizzly today. See GRAFANA.md.
  • Plain Nagios, Naemon, Shinken, Sensu: plugins emit standard Nagios plugin output and perfdata. Drop them into /usr/lib64/nagios/plugins/ and reference them from your command definitions. Hosts, services and notifications stay in your existing configuration.

Conventions

Human-Readable Units

Byte sizes use IEC (KiB, MiB, GiB, powers of 2) so values match what the shell shows. Large numbers, times, and bits-per-second follow their own conventions. The full unit reference is in UNITS.md.

Thresholds and Ranges

Where a check supports thresholds, --warning / --critical follow the Nagios plugin format (start:end, ~ for negative infinity, @ to invert). The full threshold reference with examples is in THRESHOLDS.md.

FAQ

Q: All pipe characters | in the output of any plugin are replaced with !. Why?

A: We have to. The output syntax of Nagios plugins is fixed and not very flexible:

Output lines | Performance data

So the | character is reserved to separate plugin output from performance data. There is no way to escape it - so we have to replace it with !.

Q: Can I overwrite specific plugins with its source code variant, if all other plugins are installed by the OS package manager?

A: Of course. Just don't forget to install the libs either.

Q: Do the OS packages have external dependencies?

A: No.

Q: Do the plugins also handle proxy environment variables like HTTP_PROXY?

A: Yes, HTTP_PROXY, HTTPS_PROXY, http_proxy and https_proxy are automatically used by the Linuxfabrik monitoring plugins if they are set.

Q: How can I remove the performance data after the | from the check output?

A: In Bash, use /usr/lib64/nagios/plugins/check-command | cut -f1 -d'|'

Troubleshooting

For installation-related issues (sudoers drop-ins, SELinux, Windows 0x80070005 under the Icinga Agent) see INSTALL.md. For Icinga-specific quirks (passing http_proxy through Icinga, negative values in Director-dispatched parameters) see ICINGA.md.

Q: A plugin reports an unknown argument when I pass a value starting with -.

A: argparse treats a value that starts with - as another option. Glue the value to the parameter instead of separating with a space:

  • Long parameters: ./file-age --warning=-60:3600 (not --warning -60:3600).
  • Short parameters: ./file-age -w-60:3600 (no space, no escape).

In Icinga Director, where arguments cannot be sent with =, prefix the first minus with a backslash (\-60); the lib.base library strips it before argparse sees it.

Q: After an update, I get "Operational Error: no such column: ..., state UNKNOWN". On the next run, this disappears. What happened?

A: Some check plugins require SQLite database files to cache data or to calculate data over time. After an update it is possible that the check plugin uses a new schema, but the database file on disk hasn't been updated (we don't implement database migrations). So in case of an "OperationalError", which happens for example when the plugin tries to INSERT into an outdated table, the database library simply deletes the sqlite database file. It will then be recreated from scratch by the plugin on the next run, with the updated database structure.

Q: On Windows, sometimes Windows Defender randomly kills a plugin. Why?

A: Depending on your signature versions or the healthiness of your signature cache, the Microsoft Windows Defender might classify a check as malicious (for example our service.exe). Please follow the steps below to clear cached detections and obtain the latest malware definitions.

  1. Open command prompt as administrator and change directory to c:\program files\windows defender
  2. Run MpCmdRun.exe -removedefinitions -dynamicsignatures
  3. Run MpCmdRun.exe -SignatureUpdate

Reporting Issues

  1. Submit an issue (preferred).
  2. Contact us by email or web form and describe your problem.

For vulnerabilities, follow the private disclosure process in SECURITY.md.

Contributing

See CONTRIBUTING.md for check-plugin developer guidelines, coding conventions, and the basket / Grafana deliverables. The example plugin is the reference skeleton.

Compiling and packaging (RPM, DEB, Windows MSI, Code Signing) is documented in BUILD.md. Helper scripts under tools/ (basket generation, docs build, unit-test and linter runners) are described in TOOLS.md.

Support the Project

Enterprise support, including an SLA and custom plugin development, is available via a Service Contract.

If these plugins help you, consider a donation via GitHub Sponsors or PayPal. Past sponsors are listed in SPONSORS.md; community quotes in TESTIMONIALS.md. Sharing the project on social media, in blog posts or via the Show and tell category on GitHub Discussions is always welcome.

There is no fixed roadmap. Milestones are driven by customer needs and by contributors' time.