어제 내 서버를 Debian 9에서 Debian 10으로 업그레이드했습니다. 서버는 nagios에 의해 모니터링됩니다. 업그레이드 후 상태를 알 수 없다는 알림을 받았습니다.
"볼륨 그룹 array03-0이 유효하지 않거나 '-v Volumegroup'으로 지정되지 않았습니다. false
이 서비스는 VG baie03-0 사용법이고 해당 명령은 check_nrpe!check_vgs_array03-0입니다. 이 서비스의 목표는 어레이의 스토리지가 거의 가득 찼을 때 경고를 생성하는 것입니다.
check_nrpe 명령은 표준입니다.
# 'check_NRPE' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
제가 정확하게 기억한다면 이는 감독 대상 서버의 /etc/nagios/nrpe.cfg에 check_vgs_array03-0 명령이 있다는 의미입니다. 살펴보자. 그것은 다음과 같다:
명령 [check_vgs_array03-0]=/usr/lib/nagios/plugins/check_vg_size -w 20 -c 10 -v array03-0
감독되는 서버에 이 명령을 입력하면 오류가 없으며 작동합니다.
VG array03-0 확인 사용 가능한 공간은 805GB입니다. array03-0=805GB;20;10;0;19155
예를 들어, 존재하지 않는 볼륨 그룹 이름을 입력하면 오류 메시지가 나타납니다.
check_vg_size 플러그인 스크립트는 다음과 같습니다:
#!/bin/bash
#check_vg_size
#set -x
# Plugin for Nagios
# Written by M. Koettenstorfer ([email protected])
# Some additions by J. Schoepfer ([email protected])
# Major changes into functions and input/output values J. Veverka ([email protected])
# Last Modified: 2012-11-06
#
# Description:
#
# This plugin will check howmany space in volume groups is free
# Nagios return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
SERVICEOUTPUT=""
SERVICEPERFDATA=""
PROGNAME=$(basename $0)
vgs_bin=`/usr/bin/whereis -b -B /sbin /bin /usr/bin /usr/sbin -f vgs | awk '{ print $2 }'`
_vgs="$vgs_bin --units=g"
bc_bin=`/usr/bin/whereis -b -B /sbin /bin /usr/bin /usr/sbin -f bc | awk '{ print $2 }'`
exitstatus=$STATE_OK #default
declare -a volumeGroups;
novg=0; #number of volume groups
allVG=false; #Will we use all volume groups we can find on system?
inPercent=false; #Use percentage for comparison?
unitsGB="GB"
unitsPercent="%"
units=$unitsGB
########################################################################
### DEFINE FUNCTIONS
########################################################################
print_usage() {
echo "Usage: $PROGNAME -w <min size warning level in gb> -c <min size critical level in gb> -v <volumegroupname> [-a] [-p]"
echo "If '-a' and '-v' are specified: all volumegroups defined by -v will be ommited and the remaining groups which are found on system are checked"
echo "If '-p' is specified: the warning and critical levels are represented as the percent space left on device"
echo ""
}
print_help() {
print_usage
echo ""
echo "This plugin will check how much space is free in volume groups"
echo "usage: "
exit $STATE_UNKNOWN
}
checkArgValidity () {
# Check arguments for validity
if [[ -z $critlevel || -z $warnlevel ]] # Did we get warn and crit values?
then
echo "You must specify a warning and critical level"
print_usage
exitstatus=$STATE_UNKNOWN
exit $exitstatus
elif [ $warnlevel -le $critlevel ] # Do the warn/crit values make sense?
then
if [ $inPercent != 'true' ]
then
echo "CRITICAL value of $critlevel GB is less than WARNING level of $warnlevel GB"
print_usage
exitstatus=$STATE_UNKNOWN
exit $exitstatus
else
echo "CRITICAL value of $critlevel % is higher than WARNING level of $warnlevel %"
print_usage
exitstatus=$STATE_UNKNOWN
exit $exitstatus
fi
fi
}
#Does volume group actually exist?
volumeGroupExists () {
local volGroup="$@"
VGValid=$($_vgs 2>/dev/null | grep "$volGroup" | wc -l )
if [[ -z "$volGroup" || $VGValid = 0 ]]
then
echo "Volumegroup $volGroup wasn't valid or wasn't specified"
echo "with \"-v Volumegroup\", bye."
echo false
return 1
else
#The volume group exists
echo true
return 0
fi
}
getNumberOfVGOnSystem () {
local novg=$($_vgs 2>/dev/null | wc -l)
let novg--
echo $novg
}
getAllVGOnSystem () {
novg=$(getNumberOfVGOnSystem)
local found=false;
for (( i=0; i < novg; i++)); do
volumeGroups[$i]=$($_vgs | tail -n $(($i+1)) | head -n 1 | awk '{print $1}')
found=true;
done
if ( ! $found ); then
echo "$found"
echo "No Volumegroup wasn't valid or wasn't found"
exit $STATE_UNKNOWN
fi
}
getColumnNoByName () {
columnName=$1
result=$($_vgs 2>/dev/null | head -n1 | awk -v name=$columnName '
BEGIN{}
{ for(i=1;i<=NF;i++){
if ($i ~ name)
{print i } }
}')
echo $result
}
convertToPercent () {
#$1 = xx%
#$2 = 100%
# Make values numbers only
local input="$(echo $1 | sed 's/g//i')"
local max="$(echo $2 | sed 's/g//i')"
local onePercent='';
local freePercent='';
if [ -x "$bc_bin" ] ; then
onePercent=$( echo "scale=2; $max / 100" | bc );
freePercent=$( echo "$input / $onePercent" | bc );
else
freePercent=$(perl -e "print int((($max-$input)*100/$max))")
fi
echo $freePercent;
return 0;
}
getSizesOfVolume () {
volumeName="$1";
#Check the actual sizes
cnFree=`getColumnNoByName "VFree"`;
cnSize=`getColumnNoByName "VSize"`;
freespace=`$_vgs $volumeName 2>/dev/null | awk -v n=$cnFree '/[0-9]/{print $n}' | sed -e 's/[\.,\,].*//'`;
fullspace=`$_vgs $volumeName 2>/dev/null | awk -v n=$cnSize '/[0-9]/{print $n}' | sed -e 's/[\.,\,].*//'`;
if ( $inPercent ); then
#Convert to Percents
freespace="$(convertToPercent $freespace $fullspace)"
fi
}
setExitStatus () {
local status=$1
local volGroup="$2"
local formerStatus=$exitstatus
if [ $status -gt $formerStatus ]
then
formerStatus=$status
fi
if [ $status = $STATE_UNKNOWN ] ; then
SERVICEOUTPUT="${volGroup}"
exitstatus=$STATE_UNKNOWN
return
fi
if [ "$freespace" -le "$critlevel" ]
then
SERVICEOUTPUT=$SERVICEOUTPUT" VG $volGroup CRITICAL Available space is $freespace $units;"
exitstatus=$STATE_CRITICAL
elif [ "$freespace" -le "$warnlevel" ]
then
SERVICEOUTPUT=$SERVICEOUTPUT"VG $volGroup WARNING Available space is $freespace $units;"
exitstatus=$STATE_WARNING
else
SERVICEOUTPUT=$SERVICEOUTPUT"VG $volGroup OK Available space is $freespace $units;"
exitstatus=$STATE_OK
fi
SERVICEPERFDATA="$SERVICEPERFDATA $volGroup=$freespace$units;$warnlevel;$critlevel"
if [ $inPercent != 'true' ] ; then
SERVICEPERFDATA="${SERVICEPERFDATA};0;$fullspace"
fi
if [ $formerStatus -gt $exitstatus ]
then
exitstatus=$formerStatus
fi
}
checkVolumeGroups () {
checkArgValidity
for (( i=0; i < novg; i++ )); do
local status="$STATE_OK"
local currentVG="${volumeGroups[$i]}"
local groupExists="$(volumeGroupExists "$currentVG" )"
if [ "$groupExists" = 'true' ]; then
getSizesOfVolume "$currentVG"
status=$STATE_OK
else
status=$STATE_UNKNOWN
setExitStatus $status "${groupExists}"
break
fi
setExitStatus $status "$currentVG"
done
}
########################################################################
### RUN PROGRAM
########################################################################
########################################################################
#Read input values
while getopts ":w:c:v:h:ap" opt ;do
case $opt in
h)
print_help;
exit $exitstatus;
;;
w)
warnlevel=$OPTARG;
;;
c)
critlevel=$OPTARG;
;;
v)
if ( ! $allVG ); then
volumeGroups[$novg]=$OPTARG;
let novg++;
fi
;;
a)
allVG=true;
getAllVGOnSystem;
;;
p)
inPercent=true;
units=$unitsPercent
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
checkVolumeGroups
echo $SERVICEOUTPUT"|"$SERVICEPERFDATA
exit $exitstatus
check_nrpe 명령에 다른 인수(다른 스크립트)를 사용했는데 작동합니다.
예를 들어:
root@nagiosserver:/usr/local/nagios# /usr/local/nagios/libexec/check_nrpe -H srv-supervised04 -c check_load OK - 로드 평균: 3.79, 2.99, 1.83|load1=3.790;25.000;30.000;0; 로드 5=2.990;20.000;25.000;0; 로드 15=1.830;15.000;20.000;0;
VG array03-0이 존재합니다:
root@srv-supervised04:/usr/lib/nagios/plugins# vgdisplay --- 볼륨 그룹 --- VG 이름 array03-0 시스템 ID 형식
lvm2 메타데이터 영역 1 메타데이터 일련 번호 34 VG 액세스 읽기/쓰기 VG 상태 확인 크기 조정 최대 LV 0 현재 LV 5 공개 LV 4 최대 PV
0 현재 PV 1 실제 PV 1 VG 크기
<18,71TiB PE 크기 4,00MiB 총 PE
4903887 할당된 PE/크기 4697600/<17,92TiB 무료 PE/크기 206287/ < 805,81 GiB VG UUID
OgzAMF-DGbW-3t3L-Wk7k-gY1g-s6fH-zYECad
그래서. VG가 존재합니다. check_vg_size 플러그인은 로컬에서 사용할 때 작동하고 check_nrpe 명령은 다른 플러그인과 함께 사용할 때 nagios 서버에서 작동하지만 check_vg_size는 nagios 서버에서 작동하지 않습니다. 오류 메시지는 분명히 array03-0이 존재하지 않는다는 것입니다. 모든 파일에서 아무것도 변경하지 않았습니다. Debian 업데이트가 9에서 10으로 제공되었습니다(설치하는 동안 nrpe.cfg 수정 파일을 유지하기로 결정했습니다).
어디서 나오는지 아는 사람 있나요? 데비안 버전? 어쩌면 새로운 bash 버전일까요? nagios 서버(여전히 Debian 9)와 감독되는 서버(Debian 10)가 호환되지 않습니까?
답변1
나는 그것을 고쳤다.
이는 권한 문제입니다. 플러그인에서 nagios 사용자에게 sudo 권한을 부여해야 합니다.
nagios ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_vg_size
그런 다음 수정
/etc/nrpe.cfg
명령이 시작되기 전에 sudo 추가
command[check_vgs_array03-0]= sudo /usr/lib/nagios/plugins/check_vg_size -w 20 -c 10 -v array03-0