Only in munin-2.0.69: munin-plugins.patch diff -ur munin-2.0.69.orig/plugins/node.d/amavis.in munin-2.0.69/plugins/node.d/amavis.in --- munin-2.0.69.orig/plugins/node.d/amavis.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/amavis.in 2022-08-27 15:12:36.150833006 +0200 @@ -76,7 +76,7 @@ AMAVIS_LOG=${amavislog:-/var/log/mail/mail.info} LOGTAIL=${logtail:-logtail} -STATEFILE=$MUNIN_PLUGSTATE/amavis.offset +STATEFILE=@@PLUGSTATE@@/amavis.offset if [ "$1" = "autoconf" ]; then if [ -f "${AMAVIS_LOG}" ] && [ -n "${LOGTAIL}" ] && [ -x "${LOGTAIL}" ] ; then @@ -99,7 +99,7 @@ if [ "$1" = "config" ]; then echo 'graph_title Amavis filter statistics' - echo 'graph_vlabel \#' + echo 'graph_vlabel mails' echo 'graph_category antivirus' echo 'virus.label virus' echo 'virus.info Number of viruses caught in email' @@ -117,7 +117,7 @@ spamm=U spams=U -TEMP_FILE=$(@@MKTEMP@@ munin-amavis.XXXXXX) +TEMP_FILE=$(@@MKTEMP@@ munin-amavis.XXXXXXXXXX) if [ -n "$TEMP_FILE" ] && [ -f "$TEMP_FILE" ]; then if [ "$ARGS" != 0 ]; then diff -ur munin-2.0.69.orig/plugins/node.d/apache_accesses.in munin-2.0.69/plugins/node.d/apache_accesses.in --- munin-2.0.69.orig/plugins/node.d/apache_accesses.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/apache_accesses.in 2022-08-27 15:12:36.151833008 +0200 @@ -99,6 +99,7 @@ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto"; my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80); +my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef; # Convert an URL with the %d placeholder into a string. Allow URL without placeholder. @@ -147,7 +148,11 @@ if ( defined $ARGV[0] and $ARGV[0] eq "config" ) { - print "graph_title Apache accesses\n"; + print "graph_title Apache accesses"; + if ( $HOST ) { + print " for $HOST"; + } + print "\n"; print "graph_args --base 1000\n"; print "graph_vlabel accesses / \${graph_period}\n"; print "graph_category apache\n"; diff -ur munin-2.0.69.orig/plugins/node.d/apache_processes.in munin-2.0.69/plugins/node.d/apache_processes.in --- munin-2.0.69.orig/plugins/node.d/apache_processes.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/apache_processes.in 2022-08-27 15:12:36.151833008 +0200 @@ -106,6 +106,7 @@ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto"; my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80); +my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef; my $SHOWFREE = !exists $ENV{'showfree'} || $ENV{'showfree'}; @@ -154,7 +155,11 @@ if ( defined $ARGV[0] and $ARGV[0] eq "config" ) { - print "graph_title Apache processes\n"; + print "graph_title Apache processes"; + if ( $HOST ) { + print " for $HOST"; + } + print "\n"; print "graph_args --base 1000 -l 0\n"; print "graph_category apache\n"; print "graph_order "; diff -ur munin-2.0.69.orig/plugins/node.d/apache_volume.in munin-2.0.69/plugins/node.d/apache_volume.in --- munin-2.0.69.orig/plugins/node.d/apache_volume.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/apache_volume.in 2022-08-27 15:12:36.151833008 +0200 @@ -99,6 +99,7 @@ my $URL = exists $ENV{'url'} ? $ENV{'url'} : "http://127.0.0.1:%d/server-status?auto"; my @PORTS = exists $ENV{'ports'} ? split(' ', $ENV{'ports'}) : (80); +my $HOST = exists $ENV{'host'} ? $ENV{'host'} : undef; # Convert an URL with the %d placeholder into a string. Allow URL without placeholder. @@ -147,7 +148,11 @@ if ( defined $ARGV[0] and $ARGV[0] eq "config" ) { - print "graph_title Apache volume\n"; + print "graph_title Apache volume"; + if ( $HOST ) { + print " for $HOST"; + } + print "\n"; print "graph_args --base 1000\n"; print "graph_vlabel bytes per \${graph_period}\n"; print "graph_category apache\n"; diff -ur munin-2.0.69.orig/plugins/node.d/bind9.in munin-2.0.69/plugins/node.d/bind9.in --- munin-2.0.69.orig/plugins/node.d/bind9.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/bind9.in 2022-08-27 15:12:36.151833008 +0200 @@ -53,7 +53,7 @@ use strict; my $QUERYLOG = $ENV{logfile} || '/var/log/bind9/query.log'; -my $STATEFILE= "$ENV{MUNIN_PLUGSTATE}/bind9.state"; +my $STATEFILE= "@@PLUGSTATE@@/bind9.state"; my $OTHER=0; my %IN; @@ -63,7 +63,7 @@ open(Q, ">", $STATEFILE); close(Q); } - open(Q,"< $STATEFILE") or die ("Cannot open state file"); + open(Q,"< $STATEFILE") or return ("Cannot open state file"); while () { chomp; my ($q,$n) = split(/\s+/,$_,2); diff -ur munin-2.0.69.orig/plugins/node.d/courier_.in munin-2.0.69/plugins/node.d/courier_.in --- munin-2.0.69.orig/plugins/node.d/courier_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/courier_.in 2022-08-27 15:12:36.152833010 +0200 @@ -55,7 +55,7 @@ COURIER_LOG=${logfile:-/var/log/mail.log} SERVICE=${service:-$(basename "$0" | sed 's/^courier_//g')} OFFSET_FILE=${MUNIN_PLUGSTATE}/courier_${SERVICE}.offset -LOGTAIL=${logtail:-/usr/sbin/logtail} +LOGTAIL=${logtail:-`which logtail`} case $1 in diff -ur munin-2.0.69.orig/plugins/node.d/courier_mta_mailstats.in munin-2.0.69/plugins/node.d/courier_mta_mailstats.in --- munin-2.0.69.orig/plugins/node.d/courier_mta_mailstats.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/courier_mta_mailstats.in 2022-08-27 15:12:36.152833010 +0200 @@ -108,7 +108,9 @@ if($startsize < $pos) { # Log rotated - parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + if (-f $rotlogfile) { + parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + } $pos = 0; } diff -ur munin-2.0.69.orig/plugins/node.d/courier_mta_mailvolume.in munin-2.0.69/plugins/node.d/courier_mta_mailvolume.in --- munin-2.0.69.orig/plugins/node.d/courier_mta_mailvolume.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/courier_mta_mailvolume.in 2022-08-27 15:12:36.152833010 +0200 @@ -98,7 +98,9 @@ if($startsize < $pos) { # Log rotated - parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + if (-f $rotlogfile) { + parseLogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + } $pos = 0; } diff -ur munin-2.0.69.orig/plugins/node.d/cupsys_pages.in munin-2.0.69/plugins/node.d/cupsys_pages.in --- munin-2.0.69.orig/plugins/node.d/cupsys_pages.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/cupsys_pages.in 2022-08-27 15:12:36.155833015 +0200 @@ -105,7 +105,9 @@ } if ($startsize < $pos) { # Log rotated - parselogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + if (-f $rotlogfile) { + parselogfile ($rotlogfile, $pos, (stat $rotlogfile)[7]); + } $pos = 0; } @@ -152,7 +154,7 @@ while (tell(LOGFILE) < $stop) { my $line = ; chomp ($line); - if ($line =~ /^(\S+)\s+\S+\s+\d+\s+\[[^\]]+\]\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+)/) { + if ($line =~ /^(\S+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+(\d+)\s+(\d+)\s+(.+)$/) { if(!defined($printers{$1}) && keys(%printers) < $MAXLABEL) { $printers{$1} += int($2)*int($3); } elsif(defined($printers{$1})) { diff -ur munin-2.0.69.orig/plugins/node.d/foldingathome_rank.in munin-2.0.69/plugins/node.d/foldingathome_rank.in --- munin-2.0.69.orig/plugins/node.d/foldingathome_rank.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/foldingathome_rank.in 2022-08-27 15:12:36.155833015 +0200 @@ -12,7 +12,7 @@ # scripts): #%# family=contrib -statefile=$MUNIN_PLUGSTATE/plugin-fah_rank.state +statefile=@@PLUGSTATE@@/plugin-fah_rank.state if [ "$1" = "config" ]; then echo 'graph_title Folding@Home Rank' diff -ur munin-2.0.69.orig/plugins/node.d/mailman.in munin-2.0.69/plugins/node.d/mailman.in --- munin-2.0.69.orig/plugins/node.d/mailman.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/mailman.in 2022-08-27 15:12:36.156833017 +0200 @@ -39,7 +39,13 @@ # System paths $logfile = $ENV{'logfile'} || "/var/log/mailman/post"; $libdir = $ENV{'libdir'} || "/var/lib/mailman"; -$lister = $ENV{'lister'} || "/usr/lib/mailman/bin/list_members"; +$lister = $ENV{'lister'} || { + if (-f "/usr/lib64/mailman/bin/list_members") { + $lister = "/usr/lib64/mailman/bin/list_members"; + } else { + $lister = "/usr/lib/mailman/bin/list_members"; + } +} if (-f "$logfile.0") { diff -ur munin-2.0.69.orig/plugins/node.d/mysql_.in munin-2.0.69/plugins/node.d/mysql_.in --- munin-2.0.69.orig/plugins/node.d/mysql_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/mysql_.in 2022-08-27 15:12:36.156833017 +0200 @@ -50,6 +50,7 @@ env.mysqlconnection DBI:mysql:information_schema;host=127.0.0.1;port=3306 env.mysqluser munin env.mysqlpassword geheim + env.mysqlnosuperpriv 1 env.cachenamespace munin_mysql_pri [mysql2_*] env.mysqlconnection DBI:mysql:information_schema;host=127.0.0.1;port=13306 @@ -194,6 +195,7 @@ 'user' => $ENV{'mysqluser'} || 'root', 'password' => $ENV{'mysqlpassword'} || '', 'cache_namespace' => $ENV{'cachenamespace'} || 'munin_mysql', + 'nosuper' => $ENV{'mysqlnosuperpriv'} || 0, ); @@ -1117,8 +1119,10 @@ update_variables($dbh); update_plugins($dbh); update_innodb($dbh); - update_master($dbh); - update_slave($dbh); + if (!$config{nosuper}) { + update_master($dbh); + update_slave($dbh); + } $shared_memory_cache->set('data', $data); $shared_memory_cache->set('graphs', nfreeze(\%graphs)); diff -ur munin-2.0.69.orig/plugins/node.d/mysql_innodb.in munin-2.0.69/plugins/node.d/mysql_innodb.in --- munin-2.0.69.orig/plugins/node.d/mysql_innodb.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/mysql_innodb.in 2022-08-27 15:12:36.156833017 +0200 @@ -1,4 +1,4 @@ -#!@@GOODSH@@ +#!@@BASH@@ : << =cut diff -ur munin-2.0.69.orig/plugins/node.d/mysql_slowqueries.in munin-2.0.69/plugins/node.d/mysql_slowqueries.in --- munin-2.0.69.orig/plugins/node.d/mysql_slowqueries.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/mysql_slowqueries.in 2022-08-27 15:12:36.156833017 +0200 @@ -61,6 +61,6 @@ exit 0 fi -/usr/bin/printf "queries.value " +/bin/printf "queries.value " # shellcheck disable=SC2086 ("$MYSQLADMIN" $MYSQLOPTS status 2>/dev/null || echo a a a a a a a a U) | awk '{print $9}' diff -ur munin-2.0.69.orig/plugins/node.d/mysql_threads.in munin-2.0.69/plugins/node.d/mysql_threads.in --- munin-2.0.69.orig/plugins/node.d/mysql_threads.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/mysql_threads.in 2022-08-27 15:12:36.156833017 +0200 @@ -70,6 +70,6 @@ exit 0 fi -/usr/bin/printf "threads.value " +/bin/printf "threads.value " # shellcheck disable=SC2086 ("$MYSQLADMIN" $MYSQLOPTS status 2>/dev/null || echo 'a a a U') | awk '{print $4}' diff -ur munin-2.0.69.orig/plugins/node.d/ntp_.in munin-2.0.69/plugins/node.d/ntp_.in --- munin-2.0.69.orig/plugins/node.d/ntp_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_.in 2022-08-27 15:12:36.157833019 +0200 @@ -70,9 +70,9 @@ if (!$has_requirements) { print "no (missing Net::DNS or Net::IP modules)\n"; } else { - `ntpq -c help >/dev/null 2>/dev/null`; + `/usr/sbin/ntpq -c help >/dev/null 2>/dev/null`; if ($CHILD_ERROR eq "0") { - if (`ntpq -n -c peers | wc -l` > 0) { + if (`/usr/sbin/ntpq -n -c peers | wc -l` > 0) { print "yes\n"; } else { print "no (ntpq -p returned no peers)\n"; @@ -85,10 +85,10 @@ } if ($ARGV[0] and $ARGV[0] eq "suggest") { - foreach my $line (`ntpq -c associations`) { + foreach my $line (`/usr/sbin/ntpq -c associations`) { if ($line =~ m/^\s*\d+/) { my (undef, undef, $assid, undef, undef, undef, undef, undef, undef, undef) = split(/\s+/, $line); - chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr"`); + chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr"`); $peerinfo =~ s/\R/ /g; my ($peer_addr) = ($peerinfo =~ m/srcadr=(.*)/); print $peer_addr, "\n" unless $peer_addr eq "0.0.0.0"; @@ -120,12 +120,12 @@ my $delay = "U"; my $offset = "U"; my $jitter = "U"; -my @associations = `ntpq -c associations`; +my @associations = `/usr/sbin/ntpq -c associations`; foreach my $line (@associations) { if ($line =~ m/^\s*\d+/) { my (undef, undef, $assid, undef, undef, undef, undef, undef, undef, undef) = split(/\s+/, $line); - chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr,delay,offset,jitter"`); + chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr,delay,offset,jitter"`); $peerinfo =~ s/\R/ /g; ($srcadr) = ($peerinfo =~ m/srcadr=([^, ]+)/); ($delay) = ($peerinfo =~ m/delay=([^, ]+)/); @@ -165,7 +165,7 @@ ASSOCS: foreach my $line (@associations) { if ($line =~ m/^\s*\d+/) { my (undef, undef, $assid, undef, undef, undef, undef, undef, undef, undef) = split(/\s+/, $line); - chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr,delay,offset,jitter"`); + chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr,delay,offset,jitter"`); $peerinfo =~ s/\R/ /g; ($srcadr) = ($peerinfo =~ m/srcadr=([^, ]+)/); ($delay) = ($peerinfo =~ m/delay=([^, ]+)/); diff -ur munin-2.0.69.orig/plugins/node.d/ntp_kernel_err.in munin-2.0.69/plugins/node.d/ntp_kernel_err.in --- munin-2.0.69.orig/plugins/node.d/ntp_kernel_err.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_kernel_err.in 2022-08-27 15:12:36.157833019 +0200 @@ -32,7 +32,7 @@ export PATH=/usr/local/sbin:$PATH if [ "$1" = "autoconf" ]; then - { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null | + { /usr/sbin/ntpq -c kerninfo; /usr/sbin/ntpdc -c kerninfo; } 2>/dev/null | awk 'BEGIN { ev=1; } /^estimated error:/ { ev=0; } END { if (ev == 0) { print "yes";} else { print "no (command ntpq or ntpdc not found)"; } exit 0; }' @@ -51,10 +51,10 @@ printf 'ntp_err.value ' -ntpq_name=$(ntpq -c version | sed 's/[^[:alpha:]].*//') -ntpq_version=$(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') +ntpq_name=$(/usr/sbin/ntpq -c version | sed 's/[^[:alpha:]].*//') +ntpq_version=$(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') if [ "$ntpq_name" = "ntpq" ] && [ "$(echo "$ntpq_version" | tr -d '.')" -lt 427 ]; then - ntpdc -c kerninfo | awk '/^estimated error:/ { printf("%.9f\n", $3) }' + /usr/sbin/ntpdc -c kerninfo | awk '/^estimated error:/ { printf("%.9f\n", $3) }' else - ntpq -c kerninfo | awk '/^estimated error:/ { printf("%.9f\n", $3 / 1000) }' + /usr/sbin/ntpq -c kerninfo | awk '/^estimated error:/ { printf("%.9f\n", $3 / 1000) }' fi diff -ur munin-2.0.69.orig/plugins/node.d/ntp_kernel_pll_freq.in munin-2.0.69/plugins/node.d/ntp_kernel_pll_freq.in --- munin-2.0.69.orig/plugins/node.d/ntp_kernel_pll_freq.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_kernel_pll_freq.in 2022-08-27 15:12:36.157833019 +0200 @@ -35,7 +35,7 @@ export PATH=/usr/local/sbin:$PATH if [ "$1" = "autoconf" ]; then - { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null | + { /usr/sbin/ntpq -c kerninfo; /usr/sbin/ntpdc -c kerninfo; } 2>/dev/null | awk 'BEGIN { ev=1; } /^pll frequency:/ { ev=0; } END { if (ev == 0) { print "yes";} else { print "no (command ntpq or ntpdc not found)"; } exit 0; }' @@ -61,12 +61,12 @@ printf 'ntp_pll_freq.value ' -ntpq_name=$(ntpq -c version | sed 's/[^[:alpha:]].*//') -ntpq_version=$(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') +ntpq_name=$(/usr/sbin/ntpq -c version | sed 's/[^[:alpha:]].*//') +ntpq_version=$(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') if [ "$ntpq_name" = "ntpq" ] && [ "$(echo "$ntpq_version" | tr -d '.')" -lt 427 ]; then - cmd=ntpdc + cmd=/usr/sbin/ntpdc else - cmd=ntpq + cmd=/usr/sbin/ntpq fi "$cmd" -c kerninfo | awk -v "fcomp=$fcomp" '/^pll frequency:/ { printf("%.9f\n", $3 + fcomp) }' diff -ur munin-2.0.69.orig/plugins/node.d/ntp_kernel_pll_off.in munin-2.0.69/plugins/node.d/ntp_kernel_pll_off.in --- munin-2.0.69.orig/plugins/node.d/ntp_kernel_pll_off.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_kernel_pll_off.in 2022-08-27 15:12:36.159833023 +0200 @@ -32,7 +32,7 @@ export PATH=/usr/local/sbin:$PATH if [ "$1" = "autoconf" ]; then - { ntpq -c kerninfo; ntpdc -c kerninfo; } 2>/dev/null | + { /usr/sbin/ntpq -c kerninfo; /usr/sbin/ntpdc -c kerninfo; } 2>/dev/null | awk 'BEGIN { ev=1; } /^pll offset:/ { ev=0; } END { if (ev == 0) { print "yes";} else { print "no (command ntpq or ntpdc not found)"; } exit 0; }' @@ -51,10 +51,10 @@ printf 'ntp_pll_off.value ' -ntpq_name=$(ntpq -c version | sed 's/[^[:alpha:]].*//') -ntpq_version=$(ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') +ntpq_name=$(/usr/sbin/ntpq -c version | sed 's/[^[:alpha:]].*//') +ntpq_version=$(/usr/sbin/ntpq -c version | grep --extended-regexp --only-matching '[[:digit:]]\.[[:digit:]]\.[[:digit:]]') if [ "$ntpq_name" = "ntpq" ] && [ "$(echo "$ntpq_version" | tr -d '.')" -lt 427 ]; then - ntpdc -c kerninfo | awk '/^pll offset:/ { printf("%.9f\n", $3) }' + /usr/sbin/ntpdc -c kerninfo | awk '/^pll offset:/ { printf("%.9f\n", $3) }' else - ntpq -c kerninfo | awk '/^pll offset:/ { printf("%.9f\n", $3 / 1000) }' + /usr/sbin/ntpq -c kerninfo | awk '/^pll offset:/ { printf("%.9f\n", $3 / 1000) }' fi diff -ur munin-2.0.69.orig/plugins/node.d/ntp_offset.in munin-2.0.69/plugins/node.d/ntp_offset.in --- munin-2.0.69.orig/plugins/node.d/ntp_offset.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_offset.in 2022-08-27 15:12:36.160833025 +0200 @@ -43,9 +43,9 @@ do_autoconf () { - ntpq -c help >/dev/null 2>&1 || { echo 'no (no ntpq program)'; exit 0; } + /usr/sbin/ntpq -c help >/dev/null 2>&1 || { echo 'no (no ntpq program)'; exit 0; } - case "$(ntpq -n -p 2>/dev/null | wc -l)" in + case "$(/usr/sbin/ntpq -n -p 2>/dev/null | wc -l)" in 0) echo 'no (unable to list peers)' exit 0 @@ -62,7 +62,7 @@ } do_config () { - syspeer="$(ntpq -n -p | grep '^[*o]')" + syspeer="$(/usr/sbin/ntpq -n -p | grep '^[*o]')" # shellcheck disable=SC2086 set - $syspeer @@ -95,7 +95,7 @@ do_ () { # Fetch operation - syspeer="$(ntpq -n -p | grep '^[*o]')" + syspeer="$(/usr/sbin/ntpq -n -p | grep '^[*o]')" # shellcheck disable=SC2086 set - $syspeer diff -ur munin-2.0.69.orig/plugins/node.d/ntp_states.in munin-2.0.69/plugins/node.d/ntp_states.in --- munin-2.0.69.orig/plugins/node.d/ntp_states.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/ntp_states.in 2022-08-27 15:12:36.160833025 +0200 @@ -54,9 +54,9 @@ if (!$has_net_dns) { print "no (missing perl module Net::DNS)\n"; } else { - `ntpq -c help >/dev/null 2>/dev/null`; + `/usr/sbin/ntpq -c help >/dev/null 2>/dev/null`; if ($CHILD_ERROR eq "0") { - if (`ntpq -n -c peers | wc -l` > 0) { + if (`/usr/sbin/ntpq -n -c peers | wc -l` > 0) { print "yes\n"; } else { print "no (ntpq -p returned no peers)\n"; @@ -98,10 +98,10 @@ # 1 63933 931a yes yes none outlier sys_peer 1 # 2 63934 943a yes yes none candidate sys_peer 3 - foreach my $line (`ntpq -c associations`) { + foreach my $line (`/usr/sbin/ntpq -c associations`) { if ($line =~ m/^\s*\d+/) { my (undef, undef, $assid, undef, undef, undef, undef, $condition_str, undef, undef) = split(/\s+/, $line); - chomp(my $peerinfo = `ntpq -n -c "readvar $assid srcadr"`); + chomp(my $peerinfo = `/usr/sbin/ntpq -n -c "readvar $assid srcadr"`); $peerinfo =~ s/\s//g; my ($peer_addr) = ($peerinfo =~ m/srcadr=(.*)/); diff -ur munin-2.0.69.orig/plugins/node.d/nut_misc.in munin-2.0.69/plugins/node.d/nut_misc.in --- munin-2.0.69.orig/plugins/node.d/nut_misc.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/nut_misc.in 2022-08-27 15:12:36.160833025 +0200 @@ -38,7 +38,8 @@ my %status; my %config = ( - upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha@127.0.0.1', + upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha', + upshost => $ENV{"upshost"} ? $ENV{"upshost"} : '127.0.0.1', upsc => $ENV{"upsc"} ? $ENV{"upsc"} : 'upsc' ); @@ -48,11 +49,6 @@ type => 'GAUGE', draw => 'LINE2' }, - 'battery_voltage' => { - label => 'batt voltage - V', - type => 'GAUGE', - draw => 'LINE2' - }, 'battery_runtime' => { label => 'runtime - min', type => 'GAUGE', @@ -76,7 +72,12 @@ ); if ( defined $ARGV[0] and $ARGV[0] eq 'config' ) { - print "graph_title UPS Misc - $config{upsname}\n"; + my $s = $config{upsname}; + $s =~ s/_/ /g; + if ($config{upshost} ne "127.0.0.1" && $config{upshost} ne "localhost") { + $s .= " at $config{upshost}"; + } + print "graph_title UPS Misc - $s\n"; #print "graph_args -l 110\n"; #print "graph_vlabel Misc\n"; foreach my $key (keys %graph) { @@ -89,7 +90,7 @@ } sub fetch_values { - my $data = `$config{upsc} $config{upsname}`; + my $data = `$config{upsc} $config{upsname}\@$config{upshost}`; while ($data =~ /([a-z.]+): (.+)\b/g) { my $label = $1; my $value = $2; diff -ur munin-2.0.69.orig/plugins/node.d/nut_volts.in munin-2.0.69/plugins/node.d/nut_volts.in --- munin-2.0.69.orig/plugins/node.d/nut_volts.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/nut_volts.in 2022-08-27 15:12:36.160833025 +0200 @@ -14,7 +14,8 @@ my %status; my %config = ( - upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha@127.0.0.1', + upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha', + upshost => $ENV{"upshost"} ? $ENV{"upshost"} : '127.0.0.1', upsc => $ENV{"upsc"} ? $ENV{"upsc"} : 'upsc' ); @@ -24,16 +25,6 @@ type => 'GAUGE', draw => 'LINE2' }, - 'input_voltage_maximum' => { - label => 'max input seen', - type => 'GAUGE', - draw => 'LINE1' - }, - 'input_voltage_minimum' => { - label => 'min input seen', - type => 'GAUGE', - draw => 'LINE1' - }, 'output_voltage' => { label => 'output', type => 'GAUGE', @@ -42,7 +33,12 @@ ); if ( defined $ARGV[0] and $ARGV[0] eq 'config' ) { - print "graph_title UPS Voltages - $config{upsname}\n"; + my $s = $config{upsname}; + $s =~ s/_/ /g; + if ($config{upshost} ne "127.0.0.1" && $config{upshost} ne "localhost") { + $s .= " at $config{upshost}"; + } + print "graph_title UPS Voltages - $s\n"; print "graph_args -l 115\n"; print "graph_vlabel Volts\n"; foreach my $key (keys %graph) { @@ -55,7 +51,7 @@ } sub fetch_values { - my $data = `$config{upsc} $config{upsname}`; + my $data = `$config{upsc} $config{upsname}\@$config{upshost}`; while ($data =~ /([a-z.]+): (.+)\b/g) { my $label = $1; my $value = $2; diff -ur munin-2.0.69.orig/plugins/node.d/perdition.in munin-2.0.69/plugins/node.d/perdition.in --- munin-2.0.69.orig/plugins/node.d/perdition.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/perdition.in 2022-08-27 15:12:36.161833027 +0200 @@ -53,7 +53,7 @@ # Set the location of the perdition logs PERDITION_LOG=${logfile:-/var/log/perdition.log} OFFSET_FILE=${MUNIN_PLUGSTATE}/perdition.offset -LOGTAIL=${logtail:-/usr/sbin/logtail} +LOGTAIL=${logtail:-`which logtail`} case $1 in autoconf|detect) diff -ur munin-2.0.69.orig/plugins/node.d/pop_stats.in munin-2.0.69/plugins/node.d/pop_stats.in --- munin-2.0.69.orig/plugins/node.d/pop_stats.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/pop_stats.in 2022-08-27 15:12:36.161833027 +0200 @@ -68,7 +68,9 @@ if ($startsize < $pos) { # Log rotated - parseEximfile ($pop{'rotlogfile'}, $pos, (stat $pop{'rotlogfile'})[7]); + if (-f $pop{'rotlogfile'}) { + parseEximfile ($pop{'rotlogfile'}, $pos, (stat $pop{'rotlogfile'})[7]); + } $pos = 0; } diff -ur munin-2.0.69.orig/plugins/node.d/postgres_scans_.in munin-2.0.69/plugins/node.d/postgres_scans_.in --- munin-2.0.69.orig/plugins/node.d/postgres_scans_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/postgres_scans_.in 2022-08-27 15:12:36.161833027 +0200 @@ -65,7 +65,6 @@ vlabel => 'Scans / sec', basequery => "SELECT COALESCE(sum(seq_scan),0) AS sequential, COALESCE(sum(idx_scan),0) AS index FROM pg_stat_user_tables", - paramdatabase => 1, pivotquery => 1, configquery => "VALUES ('sequential','Sequential scans'), ('index','Index scans')", diff -ur munin-2.0.69.orig/plugins/node.d/postgres_tuples_.in munin-2.0.69/plugins/node.d/postgres_tuples_.in --- munin-2.0.69.orig/plugins/node.d/postgres_tuples_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/postgres_tuples_.in 2022-08-27 15:12:36.161833027 +0200 @@ -74,7 +74,6 @@ . " COALESCE(sum(n_tup_del),0) AS deleted FROM pg_stat_user_tables", ], ], - paramdatabase => 1, pivotquery => 1, configquery => [ "VALUES ('seqread','Tuples sequentally read'), ('idxfetch','Tuples index fetched'), ('inserted','Tuples inserted')," diff -ur munin-2.0.69.orig/plugins/node.d/slapd_.in munin-2.0.69/plugins/node.d/slapd_.in --- munin-2.0.69.orig/plugins/node.d/slapd_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d/slapd_.in 2022-08-27 15:12:36.161833027 +0200 @@ -37,7 +37,7 @@ # Change these to reflect your LDAP ACL. The given DN must have # read access to the Monitor branch. -my $basedn = "cn=Monitor"; +my $basedn = ($ENV{'basedn'} || "cn=Monitor"); my $server = ($ENV{'server'} || 'localhost'); my $userdn = ($ENV{'binddn'} || ''); my $userpw = ($ENV{'bindpw'} || ''); diff -ur munin-2.0.69.orig/plugins/node.d.linux/iostat.in munin-2.0.69/plugins/node.d.linux/iostat.in --- munin-2.0.69.orig/plugins/node.d.linux/iostat.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/iostat.in 2022-08-27 15:16:13.861246722 +0200 @@ -169,7 +169,7 @@ if ($tmpnam =~ /\d+$/ and !$include_numbered) { # Special case for devices like cXdXpX, like the cciss driver, # or nvmeXnXpX for nvme. - next unless ($tmpnam =~ /\/c\d+d\d+$/ || $tmpnam =~ /nvme\d+n\d+$/) + next unless ($tmpnam =~ /\/.*d\d+$/ || $tmpnam =~ /nvme\d+n\d+$/) } next unless grep { $_ } @fields; diff -ur munin-2.0.69.orig/plugins/node.d.linux/ip_.in munin-2.0.69/plugins/node.d.linux/ip_.in --- munin-2.0.69.orig/plugins/node.d.linux/ip_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/ip_.in 2022-08-27 15:12:36.162833029 +0200 @@ -128,14 +128,14 @@ # This is a fun hack to make the plugin ip6 compatible. # Suggested in ticket #439 by "jodal". eval 'iptables() { - ip6tables "$@" + /usr/sbin/ip6tables "$@" }' ;; esac if [[ "$1" == "autoconf" ]]; then if [[ -r /proc/net/dev ]]; then - if ! iptables -L "$INPUT" -v -n -w -x >/dev/null 2>/dev/null; then + if ! /usr/sbin/iptables -L "$INPUT" -v -n -w -x >/dev/null 2>/dev/null; then echo "no (could not run iptables as user $(whoami))" exit 0 else @@ -148,10 +148,10 @@ fi fi -if [[ "$1" == "suggest" ]]; then - iptables -L "$INPUT" -v -n -x -w 2>/dev/null | awk --posix '$8 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ { if (done[$8]!=1) {print $8; done[$8]=1;}}' - if [[ -x /sbin/ip6tables ]]; then - ip6tables -L "$INPUT" -v -n -x -w 2>/dev/null | awk --posix '$7 ~ /\/128$/ { if (done[$7]!=1) {a=$7;gsub(/\/128$/, "", a); print a; done[$7]=1;}}' +if [ "$1" == "suggest" ]; then + /usr/sbin/iptables -L "$INPUT" -v -n -x -w 2>/dev/null | awk --posix '$8 ~ /^([0-9]{1,3}\.){3}[0-9]{1,3}$/ { if (done[$8]!=1) {print $8; done[$8]=1;}}' + if [[ -x /usr/sbin/ip6tables ]]; then + /usr/sbin/ip6tables -L "$INPUT" -v -n -x -w 2>/dev/null | awk --posix '$7 ~ /\/128$/ { if (done[$7]!=1) {a=$7;gsub(/\/128$/, "", a); print a; done[$7]=1;}}' fi exit 0 fi @@ -185,5 +185,5 @@ # Escape .'s so they don't match _everything_? escaped_ip=${IP//./\\.} -iptables -L "$INPUT" -v -n -x -w | awk "/$escaped_ip"'[ /]/ { print "in.value " $2; exit 0; }' -iptables -L "$OUTPUT" -v -n -x -w | awk "/$escaped_ip"'[ /]/ { print "out.value " $2; exit 0; }' +/usr/sbin/iptables -L "$INPUT" -v -n -x -w | awk "/$escaped_ip"'[ /]/ { print "in.value " $2; exit 0; }' +/usr/sbin/iptables -L "$OUTPUT" -v -n -x -w | awk "/$escaped_ip"'[ /]/ { print "out.value " $2; exit 0; }' diff -ur munin-2.0.69.orig/plugins/node.d.linux/load.in munin-2.0.69/plugins/node.d.linux/load.in --- munin-2.0.69.orig/plugins/node.d.linux/load.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/load.in 2022-08-27 15:12:36.162833029 +0200 @@ -59,20 +59,20 @@ # one machine answer for several) # The title of the graph - echo 'graph_title Load average' + echo "graph_title Load average" # Arguments to "rrdtool graph". In this case, tell it that the # lower limit of the graph is '0', and that 1k=1000 (not 1024) - echo 'graph_args --base 1000 -l 0' + echo "graph_args --base 1000 -l 0" # The Y-axis label - echo 'graph_vlabel load' + echo "graph_vlabel load" # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of # 420 milliload) - echo 'graph_scale no' + echo "graph_scale no" # Graph category. Defaults to 'other' - echo 'graph_category system' + echo "graph_category system" # The fields. "label" is used in the legend. "label" is the only # required subfield. - echo 'load.label load' + echo "load.label load" # These two read the environment for warning values for the field # "load". If "load_warning" or "warning" aren't set in the # environment, no warning levels are set. Likewise for "load_critical" @@ -82,8 +82,8 @@ # This one is purely to add an explanation to the web page. The first # one is for the graph itself, while the second one is for the field # "load". - echo 'graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run "immediately").' - echo 'load.info 5 minute load average' + echo "graph_info The load average of the machine describes how many processes are in the run-queue (scheduled to run \"immediately\")." + echo "load.info 5 minute load average" # Last, if run with the "config"-parameter, quit here (don't # display any data) diff -ur munin-2.0.69.orig/plugins/node.d.linux/nfs_client.in munin-2.0.69/plugins/node.d.linux/nfs_client.in --- munin-2.0.69.orig/plugins/node.d.linux/nfs_client.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/nfs_client.in 2022-08-27 15:12:36.162833029 +0200 @@ -31,7 +31,7 @@ proc="getattr setattr lookup access readlink read write create mkdir symlink mknod remove rmdir rename link readdir readdirplus fsstat fsinfo pathconf commit" if [ "$1" = "autoconf" ]; then - if [ -f "$NFS" ]; then + if [ -r "$NFS" ]; then if grep -q proc3 "$NFS"; then echo yes else @@ -56,11 +56,66 @@ exit 0 fi -awk '/proc3/ { - split("'"$proc"'", names) - split($0,values) - for (e in names) { - printf("%s.value %d\n", names[++i], values[i+3]); - } +awk '/proc2/ { + nfs_getattr+=$4 + nfs_setattr+=$5 + nfs_lookup+=$6 + nfs_readlink+=$7 + nfs_read+=$8 + nfs_write+=$9 + nfs_create+=$10 + nfs_mkdir+=$11 + nfs_symlink+=$12 + nfs_remove+=$13 + nfs_rmdir+=$14 + nfs_rename+=$15 + nfs_link+=$16 + nfs_readdir+=$17 + nfs_fsstat+=$18 +} +/proc[34]/ { + nfs_getattr+=$4 + nfs_setattr+=$5 + nfs_lookup+=$6 + nfs_access+=$7 + nfs_readlink+=$8 + nfs_read+=$9 + nfs_write+=$10 + nfs_create+=$11 + nfs_mkdir+=$12 + nfs_symlink+=$13 + nfs_mknod+=$14 + nfs_remove+=$15 + nfs_rmdir+=$16 + nfs_rename+=$17 + nfs_link+=$18 + nfs_readdir+=$19 + nfs_readdirplus+=$20 + nfs_fsstat+=$21 + nfs_fsinfo+=$22 + nfs_pathconf+=$23 + nfs_commit+=$24 +} +END { + print "getattr.value " nfs_getattr + print "setattr.value " nfs_setattr + print "lookup.value " nfs_lookup + print "access.value " nfs_access + print "readlink.value " nfs_readlink + print "read.value " nfs_read + print "write.value " nfs_write + print "create.value " nfs_create + print "mkdir.value " nfs_mkdir + print "symlink.value " nfs_symlink + print "mknod.value " nfs_mknod + print "remove.value " nfs_remove + print "rmdir.value " nfs_rmdir + print "rename.value " nfs_rename + print "link.value " nfs_link + print "readdir.value " nfs_readdir + print "readdirplus.value " nfs_readdirplus + print "fsstat.value " nfs_fsstat + print "fsinfo.value " nfs_fsinfo + print "pathconf.value " nfs_pathconf + print "commit.value " nfs_commit }' $NFS - diff -ur munin-2.0.69.orig/plugins/node.d.linux/nfsd.in munin-2.0.69/plugins/node.d.linux/nfsd.in --- munin-2.0.69.orig/plugins/node.d.linux/nfsd.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/nfsd.in 2022-08-27 15:12:36.162833029 +0200 @@ -31,7 +31,7 @@ proc="getattr setattr lookup access readlink read write create mkdir symlink mknod remove rmdir rename link readdir readdirplus fsstat fsinfo pathconf commit" if [ "$1" = "autoconf" ]; then - if [ -f "$NFSD" ]; then + if [ -r "$NFSD" ]; then grep -q proc3 "$NFSD" if grep -q proc3 "$NFSD"; then echo yes @@ -57,9 +57,66 @@ exit 0 fi -awk '/proc3/ { - split("'"$proc"'", names) - split($0,values) - for (e in names) - printf("%s.value %d\n", names[++i], values[i+3]); - }' $NFSD +awk '/proc2/ { + nfs_getattr+=$4 + nfs_setattr+=$5 + nfs_lookup+=$6 + nfs_readlink+=$7 + nfs_read+=$8 + nfs_write+=$9 + nfs_create+=$10 + nfs_mkdir+=$11 + nfs_symlink+=$12 + nfs_remove+=$13 + nfs_rmdir+=$14 + nfs_rename+=$15 + nfs_link+=$16 + nfs_readdir+=$17 + nfs_fsstat+=$18 +} +/proc[34]/ { + nfs_getattr+=$4 + nfs_setattr+=$5 + nfs_lookup+=$6 + nfs_access+=$7 + nfs_readlink+=$8 + nfs_read+=$9 + nfs_write+=$10 + nfs_create+=$11 + nfs_mkdir+=$12 + nfs_symlink+=$13 + nfs_mknod+=$14 + nfs_remove+=$15 + nfs_rmdir+=$16 + nfs_rename+=$17 + nfs_link+=$18 + nfs_readdir+=$19 + nfs_readdirplus+=$20 + nfs_fsstat+=$21 + nfs_fsinfo+=$22 + nfs_pathconf+=$23 + nfs_commit+=$24 +} +END { + print "getattr.value " nfs_getattr + print "setattr.value " nfs_setattr + print "lookup.value " nfs_lookup + print "access.value " nfs_access + print "readlink.value " nfs_readlink + print "read.value " nfs_read + print "write.value " nfs_write + print "create.value " nfs_create + print "mkdir.value " nfs_mkdir + print "symlink.value " nfs_symlink + print "mknod.value " nfs_mknod + print "remove.value " nfs_remove + print "rmdir.value " nfs_rmdir + print "rename.value " nfs_rename + print "link.value " nfs_link + print "readdir.value " nfs_readdir + print "readdirplus.value " nfs_readdirplus + print "fsstat.value " nfs_fsstat + print "fsinfo.value " nfs_fsinfo + print "pathconf.value " nfs_pathconf + print "commit.value " nfs_commit +}' $NFSD diff -ur munin-2.0.69.orig/plugins/node.d.linux/vlan_inetuse_.in munin-2.0.69/plugins/node.d.linux/vlan_inetuse_.in --- munin-2.0.69.orig/plugins/node.d.linux/vlan_inetuse_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/vlan_inetuse_.in 2022-08-27 15:12:36.163833031 +0200 @@ -37,7 +37,7 @@ my %in_octets = (); my %out_octets = (); -open (IN, "/sbin/iptables -v -x -w -L $INTERFACE-in |") or +open (IN, "/usr/sbin/iptables -v -x -w -L $INTERFACE-in |") or die "Could not run iptables: $!\n"; while () { @@ -51,7 +51,7 @@ close IN; die "Error running iptables. Dying\n" if $?; -open (IN, "/sbin/iptables -v -x -w -L $INTERFACE-out |") or +open (IN, "/usr/sbin/iptables -v -x -w -L $INTERFACE-out |") or die "Could not run iptables: $!\n"; while () { @@ -67,7 +67,7 @@ } } close IN; -die "Error running iptables. Dying\n" if $?; +die "Error running /usr/sbin/iptables. Dying\n" if $?; if ($ARGV[0] and $ARGV[0] eq "config") { diff -ur munin-2.0.69.orig/plugins/node.d.linux/vlan_linkuse_.in munin-2.0.69/plugins/node.d.linux/vlan_linkuse_.in --- munin-2.0.69.orig/plugins/node.d.linux/vlan_linkuse_.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/vlan_linkuse_.in 2022-08-27 15:12:36.163833031 +0200 @@ -29,7 +29,7 @@ my %in_octets = (); my %out_octets = (); -open (IN, "/sbin/iptables -v -x -w -L $INTERFACE-in |") or +open (IN, "/usr/sbin/iptables -v -x -w -L $INTERFACE-in |") or die "Could not run iptables: $!\n"; while () { @@ -60,7 +60,7 @@ close IN; die "Error running iptables. Dying\n" if $?; -open (IN, "/sbin/iptables -v -x -w -L $INTERFACE-out |") or +open (IN, "/usr/sbin/iptables -v -x -w -L $INTERFACE-out |") or die "Could not run iptables: $!\n"; while () { @@ -84,5 +84,5 @@ } } close IN; -die "Error running iptables. Dying\n" if $?; +die "Error running /usr/sbin/iptables. Dying\n" if $?; # vim:syntax=perl diff -ur munin-2.0.69.orig/plugins/node.d.linux/vserver_resources.in munin-2.0.69/plugins/node.d.linux/vserver_resources.in --- munin-2.0.69.orig/plugins/node.d.linux/vserver_resources.in 2021-11-22 23:12:17.000000000 +0100 +++ munin-2.0.69/plugins/node.d.linux/vserver_resources.in 2022-08-27 15:12:36.163833031 +0200 @@ -247,6 +247,12 @@ echo 'graph_vlabel ANON pages' echo 'graph_info Shows anonymous memory (human readable) used by each vserver.' ;; + RMAP) + echo 'graph_title Mapped memory used by vserver' + echo 'graph_args --base 1024k -l 0' + echo 'graph_vlabel RMAP pages' + echo 'graph_info Shows mapped memory (human readable) used by each vserver.' + ;; FILES) echo 'graph_title Files used by vserver' echo 'graph_args --base 1024k -l 0' @@ -283,6 +289,30 @@ echo 'graph_vlabel SHM pages' echo 'graph_info Shows shared memory (human readable) used by each vserver.' ;; + SEMA) + echo 'graph_title Semaphore arrays used by vserver' + echo 'graph_args --base 1024k -l 0' + echo 'graph_vlabel Semaphore arrays' + echo 'graph_info Shows semaphore arrays used by each vserver.' + ;; + SEMS) + echo 'graph_title Semaphores used by vserver' + echo 'graph_args --base 1024k -l 0' + echo 'graph_vlabel Semaphores' + echo 'graph_info Shows semaphores used by each vserver.' + ;; + DENT) + echo 'graph_title dentry structs used by vserver' + echo 'graph_args --base 1024k -l 0' + echo 'graph_vlabel dentry structs' + echo 'graph_info Shows dentry structs used by each vserver.' + ;; + ALL) + echo 'graph_title Resources used by vserver' + echo 'graph_args --base 1024k -l 0' + echo 'graph_vlabel Resources' + echo 'graph_info Shows rsources used by each vserver.' + ;; *) echo "$RESOURCE not defined." exit 1 @@ -301,53 +331,108 @@ case "$RESOURCE" in PROC) - echo "$NAME.label $LABEL: processes" - echo "$NAME.info Number of processes used by $LABEL." + echo "${NAME}_PROC.label $LABEL: processes" + echo "${NAME}_PROC.info Number of processes used by $LABEL." ;; VM) - echo "$NAME.label $LABEL: Virtual memory" - echo "$NAME.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" - echo "$NAME.cdef $NAME,$pagesize,*" + echo "${NAME}_VM.label $LABEL: Virtual memory" + echo "${NAME}_VM.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" + echo "${NAME}_VM.cdef ${NAME}_VM,$pagesize,*" ;; VML) - echo "$NAME.label $LABEL: Locked memory" - echo "$NAME.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" - echo "$NAME.cdef $NAME,$pagesize,*" + echo "${NAME}_VML.label $LABEL: Locked memory" + echo "${NAME}_VML.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" + echo "${NAME}_VML.cdef ${NAME}_VML,$pagesize,*" ;; RSS) - echo "$NAME.label $LABEL: Resident set size" - echo "$NAME.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)" - echo "$NAME.cdef $NAME,$pagesize,*" + echo "${NAME}_RSS.label $LABEL: Resident set size" + echo "${NAME}_RSS.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_RSS.cdef ${NAME}_RSS,$pagesize,*" ;; ANON) - echo "$NAME.label $LABEL: Anonymous memory" - echo "$NAME.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" - echo "$NAME.cdef $NAME,$pagesize,*" + echo "${NAME}_ANON.label $LABEL: Anonymous memory" + echo "${NAME}_ANON.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_ANON.cdef ${NAME}_ANON,$pagesize,*" + ;; + RMAP) + echo "${NAME}_RMAP.label $LABEL: Mapped memory" + echo "${NAME}_RMAP.info Size of mapped memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_RMAP.cdef ${NAME}_RMAP,$pagesize,*" ;; FILES) - echo "$NAME.label $LABEL: Files" - echo "$NAME.info Number of files used by $LABEL." + echo "${NAME}_FILES.label $LABEL: Files" + echo "${NAME}_FILES.info Number of files used by $LABEL." ;; OFD) - echo "$NAME.label $LABEL: Open filedescriptors" - echo "$NAME.info Number of open filedescriptors used by $LABEL." + echo "${NAME}_OFD.label $LABEL: Open filedescriptors" + echo "${NAME}_OFD.info Number of open filedescriptors used by $LABEL." ;; LOCKS) - echo "$NAME.label $LABEL: Locks" - echo "$NAME.info Number of locks used by $LABEL." + echo "${NAME}_LOCKS.label $LABEL: Locks" + echo "${NAME}_LOCKS.info Number of locks used by $LABEL." ;; SOCK) - echo "$NAME.label $LABEL: Sockets" - echo "$NAME.info Number of sockets used by $LABEL." + echo "${NAME}_SOCK.label $LABEL: Sockets" + echo "${NAME}_SOCK.info Number of sockets used by $LABEL." ;; MSGQ) - echo "$NAME.label $LABEL: Message queues" - echo "$NAME.info Number of message queues used by $LABEL." + echo "${NAME}_MSGQ.label $LABEL: Message queues" + echo "${NAME}_MSGQ.info Number of message queues used by $LABEL." ;; SHM) - echo "$NAME.label $LABEL: Shared memory" - echo "$NAME.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" - echo "$NAME.cdef $1,$pagesize,*" + echo "${NAME}_SHM.label $LABEL: Shared memory" + echo "${NAME}_SHM.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_SHM.cdef ${NAME}_SHM,$pagesize,*" + ;; + SEMA) + echo "${NAME}_SEMA.label $LABEL: Semaphore arrays" + echo "${NAME}_SEMA.info Number of semaphore arrays used by $LABEL." + ;; + SEMS) + echo "${NAME}_SEMS.label $LABEL: Semaphores" + echo "${NAME}_SEMS.info Number of semaphores used by $LABEL." + ;; + DENT) + echo "${NAME}_DENT.label $LABEL: dentry structs" + echo "${NAME}_DENT.info Number of dentries used by $LABEL." + ;; + ALL) + echo "${NAME}_PROC.label $LABEL: processes" + echo "${NAME}_PROC.info Number of processes used by $LABEL." + echo "${NAME}_VM.label $LABEL: Virtual memory" + echo "${NAME}_VM.info Size of virtual memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" + echo "${NAME}_VM.cdef ${NAME}_VM,$pagesize,*" + echo "${NAME}_VML.label $LABEL: Locked memory" + echo "${NAME}_VML.info Size of locked memory used by $LABEL. (Number multipled by $pagesize to make it human readable)" + echo "${NAME}_VML.cdef ${NAME}_VML,$pagesize,*" + echo "${NAME}_RSS.label $LABEL: Resident set size" + echo "${NAME}_RSS.info Size of resident set size used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_RSS.cdef ${NAME}_RSS,$pagesize,*" + echo "${NAME}_ANON.label $LABEL: Anonymous memory" + echo "${NAME}_ANON.info Size of anonymous memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_ANON.cdef ${NAME}_ANON,$pagesize,*" + echo "${NAME}_RMAP.label $LABEL: Mapped memory" + echo "${NAME}_RMAP.info Size of mapped memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_RMAP.cdef ${NAME}_RMAP,$pagesize,*" + echo "${NAME}_FILES.label $LABEL: Files" + echo "${NAME}_FILES.info Number of files used by $LABEL." + echo "${NAME}_OFD.label $LABEL: Open filedescriptors" + echo "${NAME}_OFD.info Number of open filedescriptors used by $LABEL." + echo "${NAME}_LOCKS.label $LABEL: Locks" + echo "${NAME}_LOCKS.info Number of locks used by $LABEL." + echo "${NAME}_SOCK.label $LABEL: Sockets" + echo "${NAME}_SOCK.info Number of sockets used by $LABEL." + echo "${NAME}_MSGQ.label $LABEL: Message queues" + echo "${NAME}_MSGQ.info Number of message queues used by $LABEL." + echo "${NAME}_SHM.label $LABEL: Shared memory" + echo "${NAME}_SHM.info Size of shared memory used by $LABEL. (Number multiplied by $pagesize to make it human readable)" + echo "${NAME}_SHM.cdef ${NAME}_SHM,$pagesize,*" + echo "${NAME}_SEMA.label $LABEL: Semaphore arrays" + echo "${NAME}_SEMA.info Number of semaphore arrays used by $LABEL." + echo "${NAME}_SEMS.label $LABEL: Semaphores" + echo "${NAME}_SEMS.info Number of semaphores used by $LABEL." + echo "${NAME}_DENT.label $LABEL: dentry structs" + echo "${NAME}_DENT.info Number of dentries used by $LABEL." ;; *) echo "$RESOURCE not defined." @@ -358,7 +443,7 @@ if [ -n "$LIMITS" ] && [ "$LIMITS" = 1 ]; then LIMIT=$(grep "$RESOURCE" "/proc/virtual/$xid/limit" | cut -f 4) if [ "${LIMIT:-0}" -gt 0 ]; then - echo "$NAME.critical $LIMIT" + echo "${NAME}_${RESOURCE}.critical $LIMIT" fi fi done @@ -369,8 +454,18 @@ for xid in $XIDS ; do LABEL=$(grep "NodeName" "/proc/virtual/$xid/$NAMELOC" | cut -f 2) NAME=$(echo "$LABEL" | cut -d. -f1 | tr '-' '_') - awk -v name="${NAME}" -v resource="${RESOURCE}:" \ - '{ if ( $1 == resource ) printf "%s.value %d\n", name, $2 }' \ + if [ $RESOURCE = "ALL" ]; then + awk -v name="${NAME}" \ + '{ if ( $1 ~ /[A-Z]*:/ ) { + resource = $1 ; gsub(/:/, "", resource); + printf "%s_%s.value %d\n", name, resource, $2 + }}' \ + "/proc/virtual/$xid/limit" + else + awk -v name="${NAME}" -v resource="${RESOURCE}" \ + '{ if ( $1 ~ resource ) + printf "%s_%s.value %d\n", name, resource, $2 }' \ "/proc/virtual/$xid/limit" + fi done