How to add a custom plugin¶
This walkthrough shows how to create, install, and test a custom Munin plugin from scratch.
Step 1: Write the Plugin¶
Create a file called myapp_status with the following content:
#!/bin/sh
case "$1" in
config)
echo "graph_title My Application Status"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel requests/sec"
echo "graph_category application"
echo "graph_info This graph shows requests per second for MyApp."
echo "requests.label requests"
echo "requests.type DERIVE"
echo "requests.min 0"
echo "errors.label errors"
echo "errors.type DERIVE"
echo "errors.min 0"
echo "errors.warning 10"
echo "errors.critical 50"
;;
*)
# Read from a hypothetical log file or API
# Replace these with your actual data collection logic
requests=$(tail -n 100 /var/log/myapp/access.log | wc -l)
errors=$(tail -n 100 /var/log/myapp/error.log | wc -l)
echo "requests.value $requests"
echo "errors.value $errors"
;;
esac
Make it executable:
chmod +x myapp_status
Step 2: Test Locally¶
Run the plugin from the command line to verify it works:
# Test config output
sudo munin-run --servicedir /path/to/dir myapp_status config
# Test value output
sudo munin-run --servicedir /path/to/dir myapp_status
Both commands should produce clean output with no errors.
Step 3: Install the Plugin¶
Copy the plugin to the system plugin directory:
sudo cp myapp_status /usr/share/munin/plugins/myapp_status
sudo chmod +x /usr/share/munin/plugins/myapp_status
Create a symlink to activate it:
sudo ln -s /usr/share/munin/plugins/myapp_status /etc/munin/plugins/myapp_status
Step 4: Configure the Plugin (Optional)¶
If your plugin needs environment variables or special user/group settings, create a configuration file:
sudo vi /etc/munin/plugin-conf.d/myapp
Add:
[myapp_status]
env.LOG_DIR /var/log/myapp
user www-data
group www-data
Step 5: Restart and Verify¶
Restart munin-node to pick up the new plugin:
sudo systemctl restart munin-node
Verify it works through the node:
# Check the plugin list
nc localhost 4949
list
# Test the plugin via the network
nc localhost 4949
config myapp_status
fetch myapp_status
Step 6: Wait for Graphs¶
After the next munin-cron run (up to 5 minutes), the plugin will
appear in the web interface. The first graph will show data once RRD
has enough data points (usually 2-3 collection cycles).
Key Points¶
Plugins must output
key.value NUMBERfor data andkey valuefor config.The
configoutput must includegraph_title.Field names must match between
configand value output.Use
type DERIVEfor counters,type GAUGEfor absolute values.Set
min 0for counters to avoid negative spikes on reset.Use
munin-runto test before deploying.