mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 18:41:03 +00:00
Added detailed filtering capabilities for systemd_units
This commit is contained in:
parent
c4d7d834ab
commit
dcfcbc2faa
1 changed files with 52 additions and 13 deletions
|
@ -13,21 +13,38 @@ Linux systems with systemd installed.
|
||||||
|
|
||||||
=head1 CONFIGURATION
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
None needed. You may optionally pass warning and critical values for any of the possible states (active,
|
No configuration is required for this plugin. You may optionally pass warning and critical values for any
|
||||||
reloading, inactive, failed, activating, deactivating) like so:
|
of the possible states (active, reloading, inactive, failed, activating, deactivating), and you may
|
||||||
|
additionally pass both global and state-specific include/exclude filters to include only units you care
|
||||||
|
about and/or exclude units you don't care about.
|
||||||
|
|
||||||
|
(Note that for failed units, default warning and critical values are set to 0 and 10, respectively. No other
|
||||||
|
states have default levels set.)
|
||||||
|
|
||||||
|
Value calculations for each state are made using the following algorithm (all filters performed using \`egrep\`):
|
||||||
|
|
||||||
|
1. Global include rules are applied on the output of \`systemctl list-units --all --no-legend\`;
|
||||||
|
2. Global exclude rules are then applied to the result of that;
|
||||||
|
3. Then, for each state, this global output is further filtered by include, then exclude rules for the state;
|
||||||
|
4. Then the result is filtered for the given state and the remaining units counted and listed.
|
||||||
|
|
||||||
|
An example configuration might be something like this:
|
||||||
|
|
||||||
[systemd_units]
|
[systemd_units]
|
||||||
env.failed_warning 0
|
env.failed_warning 0
|
||||||
env.failed_critical 5
|
env.failed_critical 5
|
||||||
env.inactive_warning 10
|
env.inactive_warning 10
|
||||||
env.inactive_critical 20
|
env.inactive_critical 20
|
||||||
|
env.exclude boring
|
||||||
Note that for failed units, default warning and critical values are set to 0 and 10, respectively. No other
|
env.inactive_exclude sleepy
|
||||||
states have default levels set.
|
|
||||||
|
In the example above, we've overridden the default warning and critical levels for failed units, added warning
|
||||||
|
and critical levels for inactive units, then filtered out boring units from all results and filtered out sleepy
|
||||||
|
units from results for the inactive state.
|
||||||
|
|
||||||
=head1 AUTHOR
|
=head1 AUTHOR
|
||||||
|
|
||||||
Olivier Mehani <shtrom+munin@ssji.net>
|
Olivier Mehani <shtrom+munin@ssji.net> with contributions from Kael Shipman <kael.shipman@gmail.com>
|
||||||
|
|
||||||
=head1 LICENSE
|
=head1 LICENSE
|
||||||
|
|
||||||
|
@ -51,6 +68,10 @@ states="active \
|
||||||
failed \
|
failed \
|
||||||
activating \
|
activating \
|
||||||
deactivating"
|
deactivating"
|
||||||
|
|
||||||
|
include="${include:-.*}"
|
||||||
|
exclude="${exclude:-^$}"
|
||||||
|
|
||||||
autoconf() {
|
autoconf() {
|
||||||
which systemctl >/dev/null && \
|
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)"
|
systemctl --state=failed --no-pager --no-legend >/dev/null 2>&1 && echo yes || echo "no (No systemctl or error running it)"
|
||||||
|
@ -73,11 +94,29 @@ EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch () {
|
fetch () {
|
||||||
tmp=$(systemctl --no-pager --no-legend --all | awk '{print $1, $3}')
|
# Get all units, filtering by global include/exclude rules
|
||||||
|
local state_include state_exclude state_tmp tmp
|
||||||
|
tmp=$(systemctl --no-pager --no-legend --all | egrep "$include" | egrep -v "$exclude" | awk '{print $1, $3}')
|
||||||
|
|
||||||
|
# For each state, echo the number of units and some extra info, filtering for state-specific include/excludes
|
||||||
for state in $states ; do
|
for state in $states ; do
|
||||||
count=$(echo "$tmp" | grep -c "$state$")
|
# Get state-specific include/excludes, if present
|
||||||
|
state_include="$(eval echo "\$${state}_include")"
|
||||||
|
state_exclude="$(eval echo "\$${state}_exclude")"
|
||||||
|
state_tmp="$tmp"
|
||||||
|
|
||||||
|
# Filter
|
||||||
|
if [ -n "$state_include" ]; then
|
||||||
|
state_tmp="$(echo "$state_tmp" | egrep "$state_include")"
|
||||||
|
fi
|
||||||
|
if [ -n "$state_exclude" ]; then
|
||||||
|
state_tmp="$(echo "$state_tmp" | egrep -v "$state_exclude")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Count and output
|
||||||
|
count=$(echo "$state_tmp" | grep -c "$state$")
|
||||||
echo "$state.value $count"
|
echo "$state.value $count"
|
||||||
extinfo=$(echo "$tmp" | grep "$state$" | cut -d " " -f 1 | tr '\n' ' ')
|
extinfo=$(echo "$state_tmp" | grep "$state$" | cut -d " " -f 1 | tr '\n' ' ')
|
||||||
if [ -n "$extinfo" ]; then
|
if [ -n "$extinfo" ]; then
|
||||||
echo "$state.extinfo" "$extinfo"
|
echo "$state.extinfo" "$extinfo"
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue