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
|
||||
|
||||
None needed. You may optionally pass warning and critical values for any of the possible states (active,
|
||||
reloading, inactive, failed, activating, deactivating) like so:
|
||||
No configuration is required for this plugin. You may optionally pass warning and critical values for any
|
||||
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]
|
||||
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.
|
||||
env.failed_warning 0
|
||||
env.failed_critical 5
|
||||
env.inactive_warning 10
|
||||
env.inactive_critical 20
|
||||
env.exclude boring
|
||||
env.inactive_exclude sleepy
|
||||
|
||||
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
|
||||
|
||||
Olivier Mehani <shtrom+munin@ssji.net>
|
||||
Olivier Mehani <shtrom+munin@ssji.net> with contributions from Kael Shipman <kael.shipman@gmail.com>
|
||||
|
||||
=head1 LICENSE
|
||||
|
||||
|
@ -51,6 +68,10 @@ states="active \
|
|||
failed \
|
||||
activating \
|
||||
deactivating"
|
||||
|
||||
include="${include:-.*}"
|
||||
exclude="${exclude:-^$}"
|
||||
|
||||
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)"
|
||||
|
@ -73,11 +94,29 @@ EOF
|
|||
}
|
||||
|
||||
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
|
||||
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"
|
||||
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
|
||||
echo "$state.extinfo" "$extinfo"
|
||||
fi
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue