Run local Nagios-compatible checks; push results to Uptime Kuma
Project description
KumaCub
Run local checks; push results to Uptime Kuma.
KumaCub is a lightweight daemon that executes scheduled health checks and pushes the results to Uptime Kuma. It supports Nagios-compatible check scripts and provides flexible configuration via TOML files or environment variables.
Nagios-compatible check scripts are easy to find (and easy to write). You can find more than 50 of them at the Monitoring Plugins website alone. There are checks for local system metrics, such as:
- Disk space
- Disk/RAID health
- Load averages
- Processes
- System clock (NTP)
- and more...
KumaCub allows you to execute these plugins locally, and push the results to Uptime Kuma.
Installation
Arch Linux (AUR)
For Arch Linux users, you can install kumacub from the AUR. Installing this way will also install the systemd unit file and a sample config file.
# Install from AUR (we'll use `yay` for this example)
yay -S kumacub
# Optionally, install the monitoring-plugins package
yay -S monitoring-plugins
Manual Installation (PIP)
If your distro doesn't have a package available, you can install KumaCub manually.
sudo pip install kumacub
sudo kumacub install
Quick Setup with uv
If you prefer to use uv, you can set up your systemd service to use uv to run KumaCub.
- Install uv:
curl -LsSf https://astral.sh/uv/install.sh | sudo sh
- Create a systemd unit file
/etc/systemd/system/kumacub.service:[Unit] Description=KumaCub - Run local checks and push results to Uptime Kuma Documentation=https://github.com/toadstule/kumacub After=network-online.target Wants=network-online.target [Service] ExecStart=/root/.local/bin/uv run --isolated --no-progress --python=3.13 --with kumacub kumacub daemon ExecReload=/bin/kill -HUP $MAINPID [Install] WantedBy=multi-user.target
- Create a config file
/etc/kumacub/config.toml: (see Configuration) - Reload systemd daemon:
sudo systemctl daemon-reload
Configuration
KumaCub uses TOML configuration files. By default, it looks for /etc/kumacub/config.toml, but you can override this
with the KUMACUB__CONFIG environment variable.
Configuration Sources
KumaCub supports multiple configuration sources that are merged in order of priority (highest to lowest):
- Environment variables (
KUMACUB__*) - Main config file (
KUMACUB__CONFIG, default:/etc/kumacub/config.toml) - Checks directory (
KUMACUB__CHECKS_DIR, default:/etc/kumacub/checks.d/)
Configuration Directory
You can place multiple TOML files in the checks directory (/etc/kumacub/checks.d/ by default). All .toml files in this directory will be loaded and merged in alphabetical order.
Important: Files in the checks directory can only contain [[checks]] sections. Other configuration (like [log]) must be in the main config file.
Checks Accumulation: All [[checks]] entries from both the main config file and all files in the checks directory are accumulated into a single list. This means you can distribute your checks across multiple files and they will all be executed.
# Override checks directory location.
export KUMACUB__CHECKS_DIR=/path/to/checks.d/
Example directory structure:
/etc/kumacub/
├── config.toml # Base configuration (logging, etc.)
└── checks.d/
├── 01_disk_usage.toml # Disk usage check
├── 02_system_time.toml # NTP check
└── 03_system_load.toml # Load average check
Example Configuration
Single File Configuration
For simple setups, you can use a single configuration file:
# Logging configuration.
[log]
level = "INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL
structured = true # Use JSON-formatted logs
# Define checks.
[[checks]]
name = "disk usage"
executor.command = "/usr/lib/monitoring-plugins/check_disk"
executor.args = ["-c", "90"]
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 60 # Run every 60 seconds
[[checks]]
name = "system time (ntp)"
executor.command = "/usr/lib/monitoring-plugins/check_ntp_time"
executor.args = ["-H", "pool.ntp.org", "-c", "10"]
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 30
[[checks]]
name = "system load"
executor.command = "check_load"
executor.args = ["-c", "10", "-w", "10"]
executor.env = { "PATH" = "/usr/lib/monitoring-plugins" }
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 30
Split Configuration (Directory-based)
For more complex setups, you can split configuration across multiple files:
/etc/kumacub/config.toml (base configuration):
# Base logging configuration.
[log]
level = "INFO"
structured = true
/etc/kumacub/checks.d/01_disk_usage.toml:
[[checks]]
name = "disk usage"
executor.command = "/usr/lib/monitoring-plugins/check_disk"
executor.args = ["-c", "90"]
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 60
/etc/kumacub/checks.d/02_system_time.toml:
[[checks]]
name = "system time (ntp)"
executor.command = "/usr/lib/monitoring-plugins/check_ntp_time"
executor.args = ["-H", "pool.ntp.org", "-c", "10"]
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 30
/etc/kumacub/checks.d/03_system_load.toml:
[[checks]]
name = "system load"
executor.command = "check_load"
executor.args = ["-c", "10", "-w", "10"]
executor.env = { "PATH" = "/usr/lib/monitoring-plugins" }
publisher.url = "https://uptime-kuma.example.com"
publisher.push_token = "your-push-token-here"
schedule.interval = 30
Configuration Fields
Check Configuration
Each [[checks]] entry supports:
- name: Unique identifier for the check
- executor.command: Command to execute
- executor.args: Command arguments (optional, default:
[]) - executor.env: Environment variables (optional, default:
{}) - publisher.url: Uptime Kuma instance URL
- publisher.push_token: Uptime Kuma push token
- schedule.interval: Check interval in seconds (default:
60)
Environment Variables
You can override any configuration value using environment variables with the KUMACUB__ prefix:
# Override config file location.
export KUMACUB__CONFIG=/path/to/config.toml
# Override checks directory location.
export KUMACUB__CHECKS_DIR=/path/to/checks.d/
# Override log level.
export KUMACUB__LOG__LEVEL=DEBUG
# Override log format.
export KUMACUB__LOG__STRUCTURED=false
Usage
Managing the Systemd Service
# Start the service.
sudo systemctl start kumacub
# Stop the service.
sudo systemctl stop kumacub
# Restart the service.
sudo systemctl restart kumacub
# Reload configuration without restarting.
sudo systemctl reload kumacub
# Check service status.
sudo systemctl status kumacub
# View logs.
sudo journalctl -u kumacub -f
# Enable on boot.
sudo systemctl enable kumacub
# Disable on boot.
sudo systemctl disable kumacub
License
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kumacub-0.7.0.tar.gz.
File metadata
- Download URL: kumacub-0.7.0.tar.gz
- Upload date:
- Size: 30.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0d4e9cde87cf4fbe11f07a59d27421ad07a4dc8da18f54ee460faceef5d347b
|
|
| MD5 |
716c534f598e9a3cc30f9f59232d5e30
|
|
| BLAKE2b-256 |
8fe32ce7b527754ac424b53be34552692c3d862b1b5db5291d21c5ba32a16bc0
|
Provenance
The following attestation bundles were made for kumacub-0.7.0.tar.gz:
Publisher:
main.yml on toadstule/kumacub
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kumacub-0.7.0.tar.gz -
Subject digest:
a0d4e9cde87cf4fbe11f07a59d27421ad07a4dc8da18f54ee460faceef5d347b - Sigstore transparency entry: 1187781502
- Sigstore integration time:
-
Permalink:
toadstule/kumacub@a4b61fb440c42e5c27f525c439f6765b1da07f4d -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/toadstule
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a4b61fb440c42e5c27f525c439f6765b1da07f4d -
Trigger Event:
release
-
Statement type:
File details
Details for the file kumacub-0.7.0-py3-none-any.whl.
File metadata
- Download URL: kumacub-0.7.0-py3-none-any.whl
- Upload date:
- Size: 43.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e9eb0ea1dc78208869be1f5d0fcb32044043ccd3000ca544f5837ee43a907c9
|
|
| MD5 |
9ee10de0f0bdcbf34912716e5c024ec3
|
|
| BLAKE2b-256 |
e5d198e0d49d63528b9daff7013415f175a7b68bf0119b1279814e8fd43adb8b
|
Provenance
The following attestation bundles were made for kumacub-0.7.0-py3-none-any.whl:
Publisher:
main.yml on toadstule/kumacub
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kumacub-0.7.0-py3-none-any.whl -
Subject digest:
9e9eb0ea1dc78208869be1f5d0fcb32044043ccd3000ca544f5837ee43a907c9 - Sigstore transparency entry: 1187781506
- Sigstore integration time:
-
Permalink:
toadstule/kumacub@a4b61fb440c42e5c27f525c439f6765b1da07f4d -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/toadstule
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
main.yml@a4b61fb440c42e5c27f525c439f6765b1da07f4d -
Trigger Event:
release
-
Statement type: