From f21a2fe4325161a9214a478961cb27be7314d910 Mon Sep 17 00:00:00 2001 From: JoHartmann Date: Wed, 8 Feb 2017 15:23:44 +0100 Subject: [PATCH] Update quota2percent_ add POD documentation add env.language add example graph for Munin Plugin Gallery remove German comments --- plugins/disk/quota2percent_ | 208 +++++++++++++++++++++++------------- 1 file changed, 135 insertions(+), 73 deletions(-) diff --git a/plugins/disk/quota2percent_ b/plugins/disk/quota2percent_ index 37879970..d372fc41 100644 --- a/plugins/disk/quota2percent_ +++ b/plugins/disk/quota2percent_ @@ -1,45 +1,116 @@ #!/bin/bash +# -*- sh -*- +: <<=cut -# Das Plugin zeigt die Festplattenbelegung in Prozent des Quota-Hard-Limits. -# Munin plugin to show the disk usage in percent of the quota hard limit. -# The base frame is copied from the proftp plugin +=head1 NAME -########################################################################################## -# Folgende Eintraege in der Datei /etc/munin/plugin-conf.d/munin-node nicht vergessen ! # -# Don't forget to add following lines to the file /etc/munin/plugin-conf.d/munin-node # -# [quota2percent_*] # -# user root # -# # -# Weiterhin sind folgende Environment-Variablen erlaubt: # -# Following environment variables are allowed: # -# env.warning [value] # -# env.critical [value] # -# V17.0124 Jo Hartmann # -########################################################################################## +quota2percent - Plugin to show disk usage in percent of quota hard limit. -# Spachauswahl -# Language selection - Language="de" +=head1 APPLICABLE SYSTEMS +All systems with "bash", "quota", "repquota" and "munin" + +=head1 CONFIGURATION + +The following is the default configuration + + [quota2percent_*] + user root + +You could define two alert levels and the graph language + + [quota2percent_*] + env.warning [value] (default: 90) + env.critical [value] (default: 95) + env.language [en|de|es] (default: en) + +=head1 DESCRIPTION + +Wild card Plugin for monitoring the utilization of devices with quota rules. +A graph is drawn for each user, which shows the usage as a percentage of his hard limit. System accounts (UID <1000) are suppressed. +In addition, a graph is displayed which indicates the ratio device size to device coverage. +The script repqutoa, usually part of the package quota, is needed. +The plugin itself can be stored in any directory. For example, the device sdb1 shell be monitored, a symbolic link must be created +in the /etc/munin/plugins/ directory as follows: + +=over + +I<<< ln -s //quota2percent_ quota2percent_sdb1 >>> + +=back + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=head1 VERSION + +17.0131 + +=head1 HISTORY + +V17.0131 + + add POD documentation + add env.language + add example graph for Munin Plugin Gallery + remove German comments + +V17.0124 + + first version, not munin rules conform + +=head1 AUTHOR + +Jo Hartmann + +=head1 LICENSE + +GPLv2 (L) + +=cut + +################################################### +# Preparation section # +################################################### + +# Load munin's shell libary + . "$MUNIN_LIBDIR/plugins/plugin.sh" + +# if any fetch from munin-node file + Warning=${warning:-90} + Critical=${critical:-95} + Language=${language:-en} + +# Ensure that the 'root' path is valid + PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +# Checking if repquota installed and on the path + repquota -V &> /dev/null + if ! repquota -V &> /dev/null ; then + echo "The script 'repquota' is not installed or on the path" + # Send the exit code FATAL ERROR happens + exit 127 + fi -# Wildcard-Text erkennen # get tehe wild card text - Id=$0 - Id=${Id##*_} + Id=${0##*_} + +################################################### +# Data reading sections # +################################################### -# Einlesen der Quoten für das entsprechende Laufwerk mit repquota # Reading the quotes for the selected device, using repquota - readarray Quotas < <( repquota /dev/$Id | grep " -- " ) - readarray Totals < <( df /dev/$Id ) + readarray Quotas < <( repquota "/dev/$Id" | grep " -- " ) + readarray Totals < <( df "/dev/$Id" ) -# Anzahl der Nutzer ermitteln # Get the count of Users Users=${#Quotas[@]} ################################################### -# Beginn der Standard-Konfigurationsbereiches # -# Standard Config Section Begin # +# Munin Configuration Section # ################################################### if [ "$1" = "autoconf" ]; then @@ -47,97 +118,88 @@ exit 0 fi -. $MUNIN_LIBDIR/plugins/plugin.sh if [ "$1" = "config" ]; then - # Anpassung der Texte in der Grafik # Localisation of the graphic texts case $Language in de) - echo graph_title Quota-Hard-Limit von $Id - echo graph_vlabel Nutzung in % Hardlimit + echo graph_title "Quota-Hard-Limit von $Id" + echo graph_vlabel "Nutzung in % Hardlimit" echo graph_info "Die Grafik zeigt die Belegung des durch Quota reglementierten Speicherplatzes für alle regulären Nutzer (UID >=1000) in Prozent des Hardlimits." Total_txt="Su. aller Nutzer" Total_info="Inklusive Systemnutzer (UID < 1000)" ;; es) - echo graph_title Cuota de límite absoluto de $ Id - echo graph_vlabel el % de uso del límite duro + echo graph_title "Cuota de límite absoluto de $Id" + echo graph_vlabel "el % de uso del límite duro" echo graph_info "El gráfico muestra la disponibilidad de espacio regulado por cuotas para todos los usuarios regulares (UID> = 1000) como porcentaje de límites duros." Total_txt="Suma de todos los usuarios " Total_info="La inclusión de usuario del sistema (UID <1000) " ;; *) - echo graph_title quota hard limit of %Id - echo graph_vlabel Usage in % - Total_txt="all users" + echo graph_title "quota hard limit of $Id" + echo graph_vlabel "Usage in %" echo graph_info "The graphic shows the allocation of the quota-regulated storage space for all regular users (UID> = 1000) as a percentage of the hard limit ." + Total_txt="all users" Total_info="system users (UID < 1000) included" ;; esac - # Standard Konfiguration # Defaults configuration echo graph_category disk echo graph_args --lower-limit 0 --upper-limit 100 echo graph_printf %5.2lf %% echo graph_scale no - # Ggf. Werte aus der Datei munin-node uebernehmen - # if any fetch from munin-node file - Warning=${warning:-90} - Critical=${critical:-95} - - # Die Quota-Nutzer und deren Real-Namen ermitteln, das Root-Problem beheben, die Kondfigurationsdaten ausgeben # For each quota user fetch his real name, solve the root problem, Output the configuration data - for((i=0; i<$Users; i++));do + for((i=0; i<"$Users"; i++));do Quota=( ${Quotas[$i]} ) - User=${Quota[0]} - Passwd=$(cat /etc/passwd | grep $User) + UserName=${Quota[0]} + #Passwd=$(cat /etc/passwd | grep $UserName) + Passwd=$(grep "$UserName" /etc/passwd) OLDIFS=$IFS IFS=':' Infos=($Passwd) IFS=$OLDIFS - Name=${Infos[4]} - Name=${Name%%,*} + UserInfo=${Infos[4]} + UserInfo=${UserInfo%%,*} - [ $User == "root" ] && { User="__root"; Name="__root";} - [ ! -n "$Name" ] && Name=$User - [ $(id -u ${Quota[0]}) -lt 1000 ] && echo $User.graph no - echo $User.label $Name - echo $User.warning $warning - echo $User.critical $critical + UserName="$(clean_fieldname "$UserName")" + UserInfo="$(clean_fieldname "$UserInfo")" + + [ ! -n "$UserInfo" ] && UserInfo="$UserName" + [ "$(id -u "${Quota[0]}")" -lt 1000 ] && echo "$UserName.graph no" + echo "$UserName.label $UserInfo" + echo "$UserName.warning $Warning" + echo "$UserName.critical $Critical" done - # Die Summenzeile konfigurieren - # configure the total line - echo total.label $Total_txt - echo total.warning $Warning - echo total.critical $Critical - echo total.info $Total_info - exit 0 + # configure the total line and send exit code NO ERROR happens + echo total.label "$Total_txt" + echo total.warning "$Warning" + echo total.critical "$Critical" + echo total.info "$Total_info" + exit 0 fi ################################################### -# Ende der Standard-Konfigurationsbereiches # -# Standard Config Section End # +# Munin value section # ################################################### -# Die Werte (Belegung und Hardlimit) je Nutzer ermitteln, das Root-Problem umgehen, die Prozente berechnen # fetch the needed values (used and hard limit) for each user, work around the root problem, calculate the percent value - for((i=0; i<$Users; i++));do + for((i=0; i<"$Users"; i++));do Quota=( ${Quotas[$i]} ) - User=${Quota[0]} - [ $User == "root" ] && User="__root" - Prozent=`echo "scale=2 ; ${Quota[2]}*100/${Quota[4]}" | bc` - - echo $User.value $Prozent + UserName="$(clean_fieldname "${Quota[0]}")" + echo "${Quota[2]} ${Quota[4]} $UserName.value" | awk '{printf "%s %.2f\n", $3 ,$1*100/$2}' done -# Die Summenwerte # the value for the total line Total=( ${Totals[1]} ) - Summe=`echo "scale=2;${Total[2]}*100/${Total[1]}" | bc` - echo total.value $Summe + echo "${Total[2]} ${Total[1]} total.value" | awk '{printf "%s %.2f\n", $3, $1*100/$2}' +# send the exit code NO ERROR happens exit 0 + +################################################### +# Script end # +###################################################