diff --git a/net/munin/Makefile b/net/munin/Makefile index 3aaf0ef444d..c3ebd627195 100644 --- a/net/munin/Makefile +++ b/net/munin/Makefile @@ -9,7 +9,7 @@ GH_TAGNAME = 2.0.76 PKGNAME-main = munin-node-${GH_TAGNAME} PKGNAME-server =munin-server-${GH_TAGNAME} CATEGORIES = net -REVISION = 0 +REVISION = 1 HOMEPAGE = https://munin-monitoring.org/ @@ -73,7 +73,7 @@ FAKE_FLAGS += HTMLDIR=${WRKINST}/${PREFIX}/share/examples/munin/www \ DOCDIR=${WRKINST}/${PREFIX}/share/doc/munin \ CONFDIR=${WRKINST}/${PREFIX}/share/examples/munin -MUNIN_PLUGINS = bgpd if_pps_ intr iostat_ pf_changes pf_searches \ +MUNIN_PLUGINS = bgpd if_pps_ intr iostat pf_changes pf_searches \ pf_states sensors_ vmstat .for i in ${MUNIN_PLUGINS} @@ -86,7 +86,6 @@ post-extract: cp -p ${WRKSRC}/plugins/node.d.netbsd/memory.in ${WRKSRC}/plugins/node.d.openbsd ${SUBST_CMD} -m 444 -c ${SUBST_LIST} chmod -R +x ${WRKSRC}/plugins/node.d.openbsd - rm ${WRKSRC}/plugins/node.d.openbsd/iostat.in # not yet ported rm ${WRKSRC}/plugins/node.d.openbsd/swap.in # we have no in/out fields # Fixup hardcoded paths in plugins to use TRUEPREFIX/LOCALBASE as appropriate, diff --git a/net/munin/files/iostat b/net/munin/files/iostat new file mode 100644 index 00000000000..dc808751183 --- /dev/null +++ b/net/munin/files/iostat @@ -0,0 +1,132 @@ +#!/bin/sh +# -*- sh -*- +# Copyright (c) 2026 Job Snijders +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# Munin multigraph plugin to monitor disk activity on OpenBSD systems. +# +# Magic markers: +# +#%# family=auto +#%# capabilities=autoconf + +if [ "$1" = "autoconf" ]; then + if [ -x /usr/sbin/iostat -a -x /sbin/sysctl ]; then + echo yes + exit 0 + else + echo no + exit 0 + fi +fi + +DISKS=$(/sbin/sysctl -n hw.disknames \ + | /usr/bin/tr ',' '\n' | /usr/bin/grep -v ':$' | /usr/bin/cut -d: -f1) + +if [ "$1" = "config" ]; then + echo 'multigraph iostat_throughput' + echo 'graph_title Disk throughput per device' + echo 'graph_args --base 1024' + echo 'graph_vlabel Bytes/${graph_period}' + echo 'graph_category disk' + echo 'graph_info This graph shows averaged throughput in bytes per device.' + echo '' + + for DISK in ${DISKS}; do + echo "${DISK}_kb.label $DISK" + echo "${DISK}_kb.cdef ${DISK}_kb,1024,*" + echo "${DISK}_kb.type DERIVE" + echo "${DISK}_kb.min 0" + echo "${DISK}_kb.draw LINE1" + echo '' + done + + for DISK in ${DISKS}; do + echo "multigraph iostat_throughput.${DISK}" + echo "graph_title Disk throughput for ${DISK}" + echo 'graph_args --base 1024' + echo 'graph_category disk' + echo 'graph_info This graph shows disk throughput in bytes.' + echo '' + echo 'kb.label Bytes' + echo 'kb.cdef kb,1024,*' + echo 'kb.type DERIVE' + echo 'kb.min 0' + echo 'kb.draw LINE1' + echo '' + done + + echo 'multigraph iostat_iops' + echo 'graph_title Disk IOs per device' + echo 'graph_vlabel IOs/${graph_period}' + echo 'graph_args --base 1000' + echo 'graph_category disk' + echo 'graph_info This graph shows averaged IO operations per device.' + echo '' + + for DISK in ${DISKS}; do + echo "${DISK}_xfr.label ${DISK}" + echo "${DISK}_xfr.type DERIVE" + echo "${DISK}_xfr.min 0" + echo "${DISK}_xfr.draw LINE1" + echo '' + done + + for DISK in ${DISKS}; do + echo "multigraph iostat_iops.${DISK}" + echo "graph_title Disk IOs for ${DISK}" + echo 'graph_args --base 1000' + echo 'graph_category disk' + echo 'graph_info This graph shows the number of IOPS.' + echo '' + echo 'xfr.label IO/sec' + echo 'xfr.type DERIVE' + echo 'xfr.min 0' + echo 'xfr.draw LINE1' + echo '' + done + + # TODO: implement tracking IO busy as a percentage. + # To convert 'Seconds spent in disk activity' into a busy percentage, state + # tracking via $MUNIN_PLUGSTATE or $MUNIN_STATEFILE should be implemented. + # CDEF $cur,$prev,-,300,/,100,* + + exit 0 +fi + +echo 'multigraph iostat_throughput' +for DISK in $DISKS; do + echo -n "${DISK}_kb.value " + /usr/sbin/iostat -ID "${DISK}" | tail -1 | /usr/bin/awk '{ print $1 }' +done +echo '' + +echo 'multigraph iostat_iops' +for DISK in $DISKS; do + echo -n "${DISK}_xfr.value " + /usr/sbin/iostat -ID "${DISK}" | tail -1 | /usr/bin/awk '{ print $2 }' +done +echo '' + +for DISK in ${DISKS}; do + /usr/sbin/iostat -ID "${DISK}" | tail -1 | /usr/bin/awk ' + { + print "multigraph iostat_throughput.@DISK@"; + print "kb.value", $1; + print ""; + print "multigraph iostat_iops.@DISK@"; + print "xfr.value", $2; + print ""; + }' | /usr/bin/sed "s/@DISK@/${DISK}/" +done diff --git a/net/munin/files/iostat_ b/net/munin/files/iostat_ deleted file mode 100644 index addef0ea57a..00000000000 --- a/net/munin/files/iostat_ +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh -# -*- sh -*- -# -# Wildcard-plugin to monitor disk IOs. To monitor a disk, link -# iostat_ to this file. E.g. -# -# ln -s /usr/local/libexec/munin/plugins/iostat_ \ -# /etc/munin/plugins/iostat_sd0 -# -# ...will monitor sd0. -# -# To aggregate all disk traffic on the system, link iostat_aggregated -# to this file. -# -# Magic markers (optional - used by munin-config and some installation -# scripts): -# -#%# family=auto -#%# capabilities=autoconf suggest - -DISK=${0##*iostat_} - - -if [ "$1" = "autoconf" ]; then - if [ -x /usr/sbin/iostat -a -x /sbin/sysctl ]; then - echo yes - exit 0 - else - echo "no (/usr/sbin/iostat or /sbin/sysctl not found)" - exit 0 - fi -fi - -if [ "$1" = "suggest" ]; then - if [ -x /sbin/sysctl ]; then - /sbin/sysctl hw.disknames | perl -ne ' - my @disks = split(/=|,/); - for my $disk (@disks) { - next if $disk =~ m{hw.disknames}; - my @d = split(/:/, $disk); - print "$d[0]\n" if ($d[0] =~ m{[a-z]+\d+} - and $d[1] =~ m/.{16}/); - } - ' - exit 0 - else - exit 1 - fi -fi - -if [ "$1" = "config" ]; then - echo 'multigraph bytes' - echo "graph_title $DISK IO Bytes/s" - echo 'graph_args --base 1024' - echo 'graph_vlabel Bytes/s' - echo 'graph_category disk' - echo "graph_info This graph shows IO statistics (total Bytes/s) for $DISK disk." - # echo 'graph_scale yes' - echo "kb.info Data transfered (Bytes/s) on the $DISK disk." - echo 'kb.label Bytes transfered' - echo 'kb.type DERIVE' - # echo 'kb.graph no' - echo 'kb.cdef kb,1024,*' - echo 'kb.min 0' - echo '' - echo 'multigraph xfr' - echo "graph_title $DISK transfers/s" - echo 'graph_args --base 1000' - echo 'graph_vlabel xfr/s' - echo 'graph_category disk' - echo "graph_info This graph shows IO statistics (transfers/s) for $DISK disk." - # echo 'graph_scale yes' - echo "xfr.info Disk transfers (IOPs) on the $DISK disk." - echo 'xfr.label Disk transfers' - echo 'xfr.type DERIVE' - # echo 'xfr.cdef xfr,8,*' - echo 'xfr.min 0' - - exit 0 -fi - -/usr/sbin/iostat -ID $DISK | awk ' - /[[:digit:]]+[[:space:]][[:digit:]]+[[:space:]][[[:digit:]]|\.]+/ { - if (NF == 3) { - print "multigraph bytes"; - print "kb.value", $1; - print ""; - print "multigraph xfr"; - print "xfr.value", $2; - } -}' - diff --git a/net/munin/pkg/PLIST-main b/net/munin/pkg/PLIST-main index 67c0d849ad0..0ecaaec4cf3 100644 --- a/net/munin/pkg/PLIST-main +++ b/net/munin/pkg/PLIST-main @@ -111,7 +111,7 @@ libexec/munin/plugins/if_packets_ libexec/munin/plugins/if_pps_ libexec/munin/plugins/ifx_concurrent_sessions_ libexec/munin/plugins/intr -libexec/munin/plugins/iostat_ +libexec/munin/plugins/iostat @comment libexec/munin/plugins/ipac-ng libexec/munin/plugins/ipmi_ libexec/munin/plugins/ipmi_sensor_