Check HDD SMART ESXi host from linux guest script bash

Челябинская область

Автор:Dmitriy Altuhov

Check HDD SMART ESXi host from linux guest script bash

Гипервизор (сервер виртуальных машин) VMware ESXi установлен на несерверном оборудовании с обычными жесткими дисками (без RAID в режиме AHCI).

Также имеется Linux-машина (Ubuntu server).

Требуется максимально просто мониторить состояние жестких дисков (SMART) на хосте VMware ESXi.
Для это нам потребуется добавить нижеприведённый скрипт (с исправлением нужных переменных) в планировщик cron.

На ESXi host должен быть включен SSH
С Linux-машины должен быть настроен беспарольный доступ по SSH на ESXi хост.
Об этом писал тут: http://it74.net/techblog/vyklyuchaem-vmware-esxi-host-iz-gostevoj-ubuntu/

#!/bin/bash

#admin email
adminemail=root

#set this to the count of disk in your ESXi host
devicescount=2

#set this to ssh ESXi source
#datasource="cat smtest"
datasource="ssh root@10.0.0.4 /usr/lib/vmware/vm-support/bin/smartinfo.sh"

#minimal and maximal HDD temps
hddtempmin=25
hddtempmax=35

#hostname
hostname=esxi1

#Magick begins
deviceindex=0

while read data; do

data_device="^Device:[[:space:]]+(.*)$"
if [[ $data =~ $data_device ]]; then
((deviceindex++))
device[$deviceindex]=${BASH_REMATCH[1]}
fi

data_health="^Health Status[[:space:]]+([[:alnum:]]+)[[:space:]]"
if [[ $data =~ $data_health ]]; then
health[$deviceindex]=${BASH_REMATCH[1]}
if [ "${health[$deviceindex]}" != 'OK' ]; then
message="$message Health status on drive ${device[$deviceindex]} is NOT OK \n"
fi
fi

data_realoc="^Reallocated Sector Count[[:space:]]+([[:digit:]]+)[[:space:]]"
if [[ $data =~ $data_realoc ]]; then
realoc[$deviceindex]=${BASH_REMATCH[1]}
if [[ "${realoc[$deviceindex]}" -lt "100" ]]; then
message="$message Reallocated Sector Count on drive ${device[$deviceindex]} = ${realoc[$deviceindex]} is less than 100 \n"
fi
fi
data_ponhours="^Power-on Hours[[:space:]]+([[:digit:]]+)[[:space:]]"
if [[ $data =~ $data_ponhours ]]; then
ponhours[$deviceindex]=${BASH_REMATCH[1]}
if [[ "${ponhours[$deviceindex]}" -lt "30" ]]; then
message="$message Power-on Hours on drive ${device[$deviceindex]} = ${ponhours[$deviceindex]} is less than 30 \n"
fi
fi

data_temper="^Drive Temperature[[:space:]]+([[:digit:]]+)[[:space:]]"
if [[ $data =~ $data_temper ]]; then
temper[$deviceindex]=${BASH_REMATCH[1]}
if [[ "${temper[$deviceindex]}" -lt "$hddtempmin" ]] || [[ "${temper[$deviceindex]}" -gt "$hddtempmax" ]]; then
message="$message TEMP on drive ${device[$deviceindex]} = ${temper[$deviceindex]} is OUT OF RANGE $hddtempmin and $hddtempmax \n"
fi
fi

done < <($datasource)

#Overall checks
if [ "$deviceindex" -ne $devicescount ]; then
message="$message MISSING HDD DRIVE! Devicescount = $devicescount and devices reported by smart = $deviceindex \n"
fi

#send mail to admin
if [ -n "$message" ]; then
#echo -e $message
echo -e $message | mail -s "ESXi host $hostname" $adminemail
#exit 1
#else
#exit 0
fi

Comments Are Closed!!!