#!/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. =head1 AUTHOR Olivier Mehani =head1 LICENSE GPLv2 =head1 MAGIC MARKERS #%# family=auto #%# capabilities=autoconf =cut 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" if [ "$state" = "failed" ]; then echo "$state.warning 0" echo "$state.critical 10" fi done } fetch () { tmp=$(mktemp -t munin-systemd_units.XXXXXX) trap "rm \"$tmp\"" EXIT systemctl --no-pager --no-legend --all | awk '{print $1, $3}' > "$tmp" for state in \ $states ; do echo -n "$state.value " grep -c "$state$" "$tmp" extinfo=$(grep "$state$" "$tmp" | cut -d " " -f 1) if [ -n "$extinfo" ]; then echo "$state.extinfo" $extinfo fi done } case $1 in "autoconf") autoconf ;; "config") config ;; *) fetch ;; esac