mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
Adding multicpu1sec from http://plugins.munin-monitoring.org/ as it serves as an example for 1 sec granularity.
This commit is contained in:
parent
e5710781fd
commit
8a95538509
95
plugins/system/multicpu1sec/multicpu1sec
Normal file
95
plugins/system/multicpu1sec/multicpu1sec
Normal file
@ -0,0 +1,95 @@
|
||||
#!/bin/bash
|
||||
|
||||
#%# family=auto
|
||||
#%# capabilities=autoconf
|
||||
|
||||
|
||||
interval=1 # mpstat sampling interval
|
||||
timeout=1200 # 20 minutes daemon watchdog timeout
|
||||
watchdog=60 # test for timeout every $watchdog seconds
|
||||
pluginfull="$0" # full name of plugin
|
||||
plugin="${0##*/}" # name of plugin
|
||||
pidfile="$MUNIN_PLUGSTATE/munin.$plugin.pid"
|
||||
cache="$MUNIN_PLUGSTATE/munin.$plugin.value"
|
||||
graph="$plugin"
|
||||
section="system:cpu"
|
||||
style="AREA"
|
||||
cpus=$(grep -c ^processor /proc/cpuinfo)
|
||||
|
||||
run_watchdog() { # should also trap kill and term signals
|
||||
while :; do
|
||||
sleep ${watchdog:-600}
|
||||
touch -d now-${timeout:-1200}sec $cache
|
||||
[ $pidfile -nt $cache ] || break
|
||||
done
|
||||
[ -f $pidfile ] || exit # may have been removed by terminating daemon
|
||||
kill $(cat $pidfile)
|
||||
rm -f $pidfile $cache
|
||||
}
|
||||
|
||||
|
||||
run_acquire() {
|
||||
echo "$$" > $pidfile
|
||||
$pluginfull watchdog &
|
||||
mpstat -P ALL $interval |
|
||||
awk -v cpus=$cpus '$2>=0&&$2<10 {print $2, systime(), (100-$11)/cpus}' >> $cache
|
||||
rm -f $pidfile $cache
|
||||
}
|
||||
|
||||
run_daemon() {
|
||||
if [ -f $pidfile ]; then
|
||||
touch $pidfile
|
||||
else
|
||||
$pluginfull acquire &
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
run_autoconf() {
|
||||
run=(yes no)
|
||||
type -t mpstat > /dev/null
|
||||
echo "${run[$?]}"
|
||||
}
|
||||
|
||||
run_config() {
|
||||
run_daemon
|
||||
cat << EOF
|
||||
graph_title $graph
|
||||
graph_category $section
|
||||
graph_vlabel average cpu use %
|
||||
graph_scale no
|
||||
graph_total All CPUs
|
||||
update_rate 1
|
||||
graph_data_size custom 1d, 10s for 1w, 1m for 1t, 5m for 1y
|
||||
EOF
|
||||
cpun=0
|
||||
for ((i=0; i<$cpus; i++)); do
|
||||
cat << EOF
|
||||
cpu${cpun}.label CPU $cpun
|
||||
cpu${cpun}.draw $style
|
||||
cpu${cpun}.min 0
|
||||
EOF
|
||||
style=STACK
|
||||
((cpun++))
|
||||
done
|
||||
}
|
||||
|
||||
run_fetch() {
|
||||
run_daemon
|
||||
awk 'NF==3 {print "cpu" $1 ".value " $2 ":" $3}' $cache
|
||||
> $cache
|
||||
}
|
||||
|
||||
|
||||
run_${1:-fetch}
|
||||
exit 0
|
||||
|
||||
# export -f functionname export functionname to subshell, avoiding the need
|
||||
# for locating plugin for subshell calling, when process needs a different
|
||||
# pid. Instead, $SHELL -c functionname can be used. useful for calling
|
||||
# acquire which needs a different pid than watchdog, otherwise watchdog
|
||||
# could/will kill itself when expiring before the watched process is killed.
|
||||
# not a POSIX feature.
|
||||
|
BIN
plugins/system/multicpu1sec/multicpu1sec-days.png
Normal file
BIN
plugins/system/multicpu1sec/multicpu1sec-days.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
BIN
plugins/system/multicpu1sec/multicpu1sec-hours.png
Normal file
BIN
plugins/system/multicpu1sec/multicpu1sec-hours.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
BIN
plugins/system/multicpu1sec/multicpu1sec-minutes.png
Normal file
BIN
plugins/system/multicpu1sec/multicpu1sec-minutes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
Loading…
Reference in New Issue
Block a user