Настройка Zabbix мониторинга серверов по протоколу IPMI средствами ipmitool
Invite pending
Введение
Предупрежден — значит вооружен. Думаю, не стоит пускаться в долгие объяснения, зачем нужен мониторинг, и нужен ли вообще, в сети полно подробных статей по этой теме. Здесь же я хотел остановиться на проблеме, возможно надуманной, настройки мониторинга серверов по iLO портам.
Когда первый раз столкнулся с данной задачей очень удивился, обнаружил в сети несколько статей, по большей части переводов, одного источника. Настройка по этой статье, выдала результат, но имела несколько недостатков:
- При запросе каждого элемента мониторинга (item), Zabbix генерирует вызов стороннего скрипта, а на один сервер этих элементов приходиться более 50 штук, что повышает нагрузку на сервер.
- Ответ от iLO интерфейса приходят не мгновенно. Происходят разрывы в графиках.
Как я решил эти недостатки, я хотел бы рассказать, возможно куму то будет интересно.
Мысли
Решение первой проблемы, было через запрос всех параметров с помощью команды:
ipmitool -U zabbix -P password -H <hostname> -L USER -I lanplus sdr
(Предварительно, создаем пользователя «zabbix», с минимальным привилегиями, для доступа к iLO)
Далее вывод команды помещаем в файл, и уже из файла парсим нужные данные.
Вторая проблема, была решена, через создание буферного файла, между скриптом парсинга, и выводом результата запроса от утилиты ipmitool.
Настройка
Все действия производились на сервере с ОС CentOS 6.5. Zabbix 2.0.
Результатом умозаключений стало 2 фала-скрипта.
- buffer.sh#!/bin/bash
IP=$1
ipmitool -U zabbix -P password -H $IP -L USER -I lanplus sdr > /usr/lib/zabbix/externalscripts/temp_iLO/$IP«T»
cat /usr/lib/zabbix/externalscripts/temp_iLO/$IP«T» > /usr/lib/zabbix/externalscripts/temp_iLO/$IP
- query_iLO3.sh#!/bin/bash
PASSW=$1
IP=$2
KEY=$3
# Блок компенсации разницы вывода iLO4 hp 360e g7 и iLO4 hp 360d g7
fan=$(cat /usr/lib/zabbix/externalscripts/temp_iLO/$IP | grep «Fan 1»| awk -F"|" "{print $ 1}")
fan=$(echo $fan | sed s/" "//)
if [ "$fan" = «Fan 1» ]
then
if [[ "$KEY" =~ «Fan Block» ]]
then
KEY=$(echo $KEY | sed s/" Block"//)
fi
fi
# конец блока
cat /usr/lib/zabbix/externalscripts/temp_iLO/$IP | grep "$KEY "| awk -F"|" '{print $ 2}' | awk '{print $ 1}'
crontab -e
*/1 * * * * /usr/lib/zabbix/externalscripts/buffer.sh <ip_addres_iLO>
Скрипт принимает результат от ipmitool, и складывает в файл с именем формата +T. После завершения записи в файл, происходит перемещение информации в файл с именем формата: , для дальнейшего парсинга. Этими манипуляциями мы решаем проблему задержки при получении данных.
Далее Zabbix через внешние проверки запускаем скрипт парсинга query_iLO3.sh, передавая в него имена интересующих датчиков.

Заключение
Конечно алгоритм не предусматривает, полной потери соединения на длительный срок но решает проблему прерывания графиков, и множественных запросов на iLO интерфейс. Возможно, есть более изящные решения о которых я с удовольствием прочитаю в комментариях.