#!/bin/sh # -*- sh -*- : << =cut =head1 NAME systemd - Plugin to monitor systemd units state =head1 APPLICABLE SYSTEMS Linux systems with systemd installed. =head1 CONFIGURATION None needed. You may optionally pass warning and critical values for any of the possible states (active, reloading, inactive, failed, activating, deactivating) like so: [systemd_units] env.failed_warning 0 env.failed_critical 5 env.inactive_warning 10 env.inactive_critical 20 Note that for failed units, default warning and critical values are set to 0 and 10, respectively. No other states have default levels set. =head1 AUTHOR Olivier Mehani =head1 LICENSE GPLv2 =head1 MAGIC MARKERS #%# family=auto #%# capabilities=autoconf =cut . "$MUNIN_LIBDIR/plugins/plugin.sh" failed_warning="${failed_warning:-0}" failed_critical="${failed_critical:-10}" states="active \ reloading \ inactive \ failed \ activating \ deactivating" autoconf() { which systemctl >/dev/null && \ systemctl --state=failed --no-pager --no-legend >/dev/null 2>&1 && echo yes || echo "no (No systemctl or error running it)" } config () { cat << EOF graph_title Systemd units state graph_args -l 0 graph_category system graph_scale no graph_vlabel units EOF for state in $states; do echo "$state.label $state" echo "$state.draw AREASTACK" print_warning $state print_critical $state done } fetch () { tmp=$(systemctl --no-pager --no-legend --all | awk '{print $1, $3}') for state in $states ; do count=$(echo "$tmp" | grep -c "$state$") echo "$state.value $count" extinfo=$(echo "$tmp" | grep "$state$" | cut -d " " -f 1 | tr '\n' ' ') if [ -n "$extinfo" ]; then echo "$state.extinfo" "$extinfo" fi done } case $1 in "autoconf") autoconf ;; "config") config ;; *) fetch ;; esac