- PVSM.RU - https://www.pvsm.ru -
В процессе обновления парка серверов в компании, я столкнулся с потребностью мониторить их на аппаратном уровне, без привязки к вендору и с минимальными трудозатратами для включения мониторинга на новых железках.
В качестве средства мониторинга у нас используется Zabbix 3.0. Вопрос аппаратного мониторинга до этого не поднимался.
В ходе поисков способа решения данной задачи я остановился на мониторинге через IPMI. Дальнейшие поиски решения навели меня на замечательную статью Vengant [1] Мониторинг серверов HP через iLO в Zabbix [2]. К сожалению его решение подошло мне не полностью, поскольку ориентировано только на HP и не всегда корректно получает информацию с сенсоров. Но сам ход мыслей понравился и я решил действовать в этом же направлении.
По итогам решения этой задачи был создано универсальное решение, которое:
В решении Vengant [1] для поиска сенсоров используется пакет FreeIPMI [3]. К сожалению на серверах HP Gen10 FreeIPMI отдаёт неверные имена сенсоров и zabbix не может корректно по ним получить информацию.
Было принято решение писать свои скрипты. Логически конструкция делится на 2 части
В качестве языка выбран bash. В качестве источника данных zabbix-server.log в debug режиме.
Zabbix сервер переведён в режим debug для ведения лога. В этом режиме он пишет подробную информацию по всем найденным IPMI сенсорам в строки вида:
20764:20180322:095415.913 Added sensor: host:'192.168.17.50:623' id_type:0 id_sz:15 id:'21-VR P2 Mem 2' reading_type:0x1 ('threshold') type:0x1 ('temperature') full_name:'0(20.24).21-VR P2 Mem 2'
В этой строке нас интересуют 4 значения:
Была создана отдельная таблица в БД zabbix. Все найденные сенсоры аккуратно туда заносятся. На выходе получается такой результат
Скрипт запускает cron каждые 3 минуты.
#!/bin/bash
# options
zabbixlogtemp=/tmp/zabbixlogtemp
IFS=$'n'
db="zabbix"
table="ipmi_sensors"
dbuser="user"
dbuserpass="password"
# body
cat /var/log/zabbix/zabbix_server.log | grep 'Added sensor' > $zabbixlogtemp
for line in $( cat $zabbixlogtemp)
do
host=`echo "$line" | cut -d ":" -f 5 | sed "s/'//g"`
id=`echo "$line" | cut -d ":" -f 9 | sed "s/'//g" | sed 's/ reading_type//g'`
rtype=`echo "$line" | cut -d ':' -f 10 | cut -d ' ' -f -1`
type=`echo "$line" | cut -d ':' -f 11 | cut -d ' ' -f -1`
chk=`mysql -u $dbuser -p$dbuserpass -D $db -e 'SELECT * FROM '$table' WHERE host = "'$host'" and id = "'$id'" and rtype = "'$rtype'" and type="'$type'";';`
if [ -z $chk ]
then
mysql -u $dbuser -p$dbuserpass -D $db -e 'INSERT INTO '$table' (host, id, rtype, type) VALUES ("'$host'", "'$id'", "'$rtype'", "'$type'");';
fi
done
В правилах Auto Discovery этому скрипту отдаются 3 переменные. ip адрес хоста, тип считывания и тип сенсора. Скрипт ищет совпадения в mysql таблице. Если такие совпадения находятся, он генерирует JSON с именами всех найденных сенсоров и срабатывает правило Auto Discovery.
#!/bin/bash
# mysql options
db="zabbix"
table="ipmi_sensors"
dbuser="user"
dbuserpass="password"
# variables
host="$1"
rtype="$2"
stype="$3"
IFS=$'n'
awk="/usr/bin/awk"
# check mysql
if [ -z $stype ]
then
sensorsmysql=`mysql -u $dbuser -p$dbuserpass -D $db -e 'SELECT id FROM '$table' WHERE host = "'$host'" and rtype = "'$rtype'";';`
else
sensorsmysql=`mysql -u $dbuser -p$dbuserpass -D $db -e 'SELECT id FROM '$table' WHERE host = "'$host'" and rtype = "'$rtype'" and type="'$stype'";';`
fi
# json
echo "$sensorsmysql" | sed '1,1d' | ${awk} '
BEGIN {
FS = "|"
printf "{"
printf "n "data" : ["
sep="" # Initialize the object separator empty on the first run
}
{
printf sep
printf "n {"
printf "n "{#KEY}" : ""$sensor"""
printf "n }"
sep = ","
}
END {
printf "n ]"
printf "n}"
}
'
В шаблон добавлены правила Auto Discovery для основных сенсоров, прототипы элементов данных и прототипы триггеров к ним.
Для использования этого решения у себя, нужно сделать следующие шаги:
На выходе получается следующее:
HP Gen10
Старый SuperMicro
Работоспособность решения была проверена на серверах HP и SuperMicro разных поколений. Все сенсоры корректно находятся и обрабатываются. В планах протестировать сервера Dell и реализовать сбор общей информации (версии прошивок, серийные номера).
Автор: Лунтик
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sistemnoe-administrirovanie/276605
Ссылки в тексте:
[1] Vengant: https://habrahabr.ru/users/vengant/
[2] Мониторинг серверов HP через iLO в Zabbix: https://sohabr.net/habr/post/218781/
[3] FreeIPMI: http://www.gnu.org/software/freeipmi/
[4] архив c шаблоном и скриптами: https://yadi.sk/d/Bbka67kD3TvurW
[5] Источник: http://habrahabr.ru/sandbox/114940/
Нажмите здесь для печати.