Bonjour à tous,

Voilà mon souci: j'ai trouvé sur le net un plugin Nagios me permettant de checker la taille de mes partitions unix.

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#!/bin/bash
 
# check_snmp_disksize
# Description : Check the disk size of Windows server and Unix server
# Version : 1.6
# Author : Yoann LAMY
# Licence : GPLv2
 
# Commands
CMD_BASENAME="/bin/basename"
CMD_SNMPGET="/usr/bin/snmpget"
CMD_SNMPWALK="/usr/bin/snmpwalk"
CMD_BC="/usr/bin/bc"
CMD_AWK="/bin/awk"
CMD_GREP="/bin/grep"
CMD_EXPR="/usr/bin/expr"
 
# Script name
SCRIPTNAME=`$CMD_BASENAME $0`
 
# Version
VERSION="1.6"
 
# Plugin return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
 
# 'hrStorageDescr', HOST-RESOURCES-MIB
OID_DESC=".1.3.6.1.2.1.25.2.3.1.3"
 
# 'hrStorageAllocationUnits', HOST-RESOURCES-MIB
OID_UNIT=".1.3.6.1.2.1.25.2.3.1.4"
 
# 'hrStorageSize', HOST-RESOURCES-MIB
OID_TOTAL=".1.3.6.1.2.1.25.2.3.1.5"
 
# 'hrStorageUsed', HOST-RESOURCES-MIB
OID_USED=".1.3.6.1.2.1.25.2.3.1.6"
 
# Default variables
DESCRIPTION="Unknown"
STATE=$STATE_UNKNOWN
CODE=0
 
# Default options
COMMUNITY="public"
HOSTNAME="127.0.0.1"
DISK=""
WARNING=0
CRITICAL=0
 
# Option processing
print_usage() {
  echo "Usage: ./check_snmp_disksize -H 127.0.0.1 -C public -d C: -w 80 -c 90"
  echo "  $SCRIPTNAME -H ADDRESS"
  echo "  $SCRIPTNAME -C STRING"
  echo "  $SCRIPTNAME -d STRING"
  echo "  $SCRIPTNAME -w INTEGER" 
  echo "  $SCRIPTNAME -c INTEGER" 
  echo "  $SCRIPTNAME -h"
  echo "  $SCRIPTNAME -V"
}
 
print_version() {
  echo $SCRIPTNAME version $VERSION
  echo ""
  echo "This nagios plugins comes with ABSOLUTELY NO WARRANTY."  
  echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2." 
}
 
print_help() {
  print_version
  echo ""
  print_usage
  echo ""
  echo "Check the disk size of Windows server and Unix server"
  echo ""
  echo "-H ADDRESS"
  echo "   Name or IP address of host (default: 127.0.0.1)"
  echo "-C STRING"
  echo "   Community name for the host's SNMP agent (default: public)"
  echo "-d STRING"
  echo "   Drive letter (C:) or mount point (/home)"
  echo "-w INTEGER"
  echo "   Warning level for size in percent (default: 0)"
  echo "-c INTEGER"
  echo "   Critical level for size in percent (default: 0)"  
  echo "-h"
  echo "   Print this help screen"
  echo "-V"
  echo "   Print version and license information"
  echo ""
  echo ""
  echo "This plugin uses the 'snmpget' command and the 'snmpwalk' command included with the NET-SNMP package."
  echo "This plugin support performance data output."
  echo "If the percentage of the warning and critical levels are set 0, then the script returns a OK state."      
}
 
while getopts H:C:d:w:c:hV OPT
do
  case $OPT in
    H) HOSTNAME="$OPTARG" ;;
    C) COMMUNITY="$OPTARG" ;;
    d) DISK="$OPTARG" ;;
    w) WARNING=$OPTARG ;;
    c) CRITICAL=$OPTARG ;; 
    h) 
      print_help
      exit $STATE_UNKNOWN
      ;;
    V)
      print_version
      exit $STATE_UNKNOWN
      ;;
   esac
done
 
# Plugin processing
if [  ${DISK: 0:1} != "/" ]; then
  if [  ${DISK: -1} != ":" ]; then
    DISK="${DISK}:"
  fi
fi
 
size_convert() {
  if [ $VALUE -ge 1099511627776 ]; then
    VALUE=`echo "scale=2 ; ( ( ( $VALUE / 1024 ) / 1024 ) / 1024 ) / 1024" | $CMD_BC`
    VALUE="$VALUE To"
  elif [ $VALUE -ge 1073741824 ]; then
    VALUE=`echo "scale=2 ; ( ( $VALUE / 1024 ) / 1024 ) / 1024" | $CMD_BC`
    VALUE="$VALUE Go"
  elif [ $VALUE -ge 1048576 ]; then
    VALUE=`echo "scale=2 ; ( $VALUE / 1024 ) / 1024" | $CMD_BC`
    VALUE="$VALUE Mo"
  else
    VALUE=`echo "scale=2 ; $VALUE / 1024" | $CMD_BC`
    VALUE="$VALUE Octets"
  fi
}
 
size_fix() {
  if [  ${VALUE: 0:1} = "-" ]; then
    VALUE=`$CMD_EXPR 4294967294 - \( 0 - $VALUE \)`
  fi
}
 
DISK_DESC=`$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME "$OID_DESC" | $CMD_GREP "$DISK"`
 
if [ -n "$DISK_DESC" ]; then
  DISK_ID=`echo $DISK_DESC | $CMD_AWK '{print $1}' | $CMD_AWK -F "." '{print $NF}'`
  if [  ${DISK: 0:1} != "/" ]; then
    DISK_LABEL=`echo $DISK_DESC | $CMD_AWK '{ print $5 }' | $CMD_AWK -F ':' '{ print $2 }'`
  fi
 
  DISK_UNIT=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_UNIT}.${DISK_ID}"`
  DISK_TOTAL=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_TOTAL}.${DISK_ID}"`
  DISK_USED=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_USED}.${DISK_ID}"`
 
  if [ $DISK_TOTAL != 0 ]; then
    VALUE=$DISK_TOTAL
    size_fix
    DISK_TOTAL=$VALUE
 
    VALUE=$DISK_USED
    size_fix
    DISK_USED=$VALUE
 
    DISK_TOTAL=`$CMD_EXPR $DISK_TOTAL \* \( $DISK_UNIT \)`
    DISK_USED=`$CMD_EXPR $DISK_USED \* \( $DISK_UNIT \)`
    PERFDATA_WARNING=0
    PERFDATA_CRITICAL=0
 
    if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then
      DISK_USED_POURCENT=`$CMD_EXPR \( $DISK_USED \* 100 \) / $DISK_TOTAL`
      PERFDATA_WARNING=`$CMD_EXPR \( $DISK_TOTAL \* $WARNING \) / 100`
      PERFDATA_CRITICAL=`$CMD_EXPR \( $DISK_TOTAL \* $CRITICAL \) / 100`
 
      if [ $DISK_USED_POURCENT -gt $CRITICAL ] && [ $CRITICAL != 0 ]; then
        STATE=$STATE_CRITICAL
      elif [ $DISK_USED_POURCENT -gt $WARNING ] && [ $WARNING != 0 ]; then
        STATE=$STATE_WARNING
      else
        STATE=$STATE_OK
      fi
    else
      STATE=$STATE_OK
    fi
 
    VALUE=$DISK_TOTAL
    size_convert
    DISK_TOTAL_FORMAT=$VALUE
 
    VALUE=$DISK_USED
    size_convert
    DISK_USED_FORMAT=$VALUE
 
    DESCRIPTION="Disk/partition usage '$DISK' $DISK_LABEL : $DISK_USED_FORMAT utilise sur $DISK_TOTAL_FORMAT (${DISK_USED_POURCENT}%) | total=${DISK_TOTAL}B;$PERFDATA_WARNING;$PERFDATA_CRITICAL;0 used=${DISK_USED}B;0;0;0"
  fi
fi
 
echo $DESCRIPTION
exit $STATE
Il fonctionne parfaitement pour toutes mes partitions à l'exception de la partition "/". Pour cette dernière il me ressort juste :

]

Malgré mes efforts, je n'arrive pas à décrypter tout le code afin de trouver la cause.

Avez-vous une idée?
Merci d'avance...