Мониторинг LSI MegaRAID в Zabbix
В моем варианте я рассчитываю мониторинг только Adapter #0 т.е. когда в система только одна плата raid контроллера (опция -a0)
MegaRAID SAS 9261-8i
sys-block/megacli-8.02.21
net-analyzer/zabbix-2.0.9
Примеры вывода команд megacli
megacli -LDInfo -LAll -a0 -NoLog
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name :
RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3
Size : 3.271 TB
Parity Size : 1.089 TB
State : Optimal
Strip Size : 256 KB
Number Of Drives : 8
Span Depth : 1
Default Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteThrough, ReadAhead, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy : Disk's Default
Encryption Type : None
Bad Blocks Exist: No
Is VD Cached: No
Exit Code: 0x00
megacli -PDlist -a0 -NoLog
Adapter #0
Enclosure Device ID: 252
Slot Number: 0
Drive's postion: DiskGroup: 0, Span: 0, Arm: 0
Enclosure position: 0
Device Id: 8
WWN: 5000CCA041887C5B
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SAS
Raw Size: 558.911 GB [0x45dd2fb0 Sectors]
Non Coerced Size: 558.411 GB [0x45cd2fb0 Sectors]
Coerced Size: 558.406 GB [0x45cd0000 Sectors]
Firmware state: Online, Spun Up
Is Commissioned Spare : NO
Device Firmware Level: A760
Shield Counter: 0
Successful diagnostics completion on : N/A
SAS Address(0): 0x5000cca041887c59
SAS Address(1): 0x0
Connected Port Number: 3(path0)
Inquiry Data: HITACHI HUS156060VLS600 A760CZXE1XXN
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Needs EKM Attention: No
Foreign State: None
Device Speed: 6.0Gb/s
Link Speed: 6.0Gb/s
Media Type: Hard Disk Device
Drive Temperature :43C (109.40 F)
PI Eligibility: No
Drive is formatted for PI information: No
PI: No PI
Drive's write cache : Disabled
Port-0 :
Port status: Active
Port's Linkspeed: 6.0Gb/s
Port-1 :
Port status: Active
Port's Linkspeed: Unknown
Drive has flagged a S.M.A.R.T alert : No
Установка скрипта
Создание папки для скриптов:
mkdir /etc/zabbix/scripts/
chown root:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/
Создадим сам скрипт:
Листинг
/etc/zabbix/scripts/lsimegaraid.sh
#!/bin/bash
export LC_ALL=""
export LANG="en_US.UTF-8"
#
MEGACLI="sudo /opt/bin/megacli"
#
if [[ -n ${1} && -n ${2} && -z ${3} ]]; then
##### DISCOVERY #####
TYPE="${2}"
if [[ ${TYPE} == "virtdiskovery" ]]; then
DRIVES=`${MEGACLI} -LDInfo -LAll -a0 -NoLog | awk '/Virtual Drive:/ {printf("VirtualDrive%d\n", $3)}'`
if [[ -n ${DRIVES} ]]; then
JSON="{ \"data\":["
SEP=""
for DRIVE in ${DRIVES}; do
JSON=${JSON}"$SEP{\"{#VIRTNUM}\":\"${DRIVE}\"}"
SEP=", "
done
JSON=${JSON}"]}"
echo ${JSON}
fi
elif [[ ${TYPE} == "physdiskovery" ]]; then
DRIVES=`${MEGACLI} -PDlist -a0 -NoLog | awk '/Slot Number:/ {printf("DriveSlot%d\n", $3)}'`
if [[ -n ${DRIVES} ]]; then
JSON="{ \"data\":["
SEP=""
for DRIVE in ${DRIVES}; do
JSON=${JSON}"$SEP{\"{#PHYSNUM}\":\"${DRIVE}\"}"
SEP=", "
done
JSON=${JSON}"]}"
echo ${JSON}
fi
fi
exit 0
elif [[ -n ${1} && -n ${2} && -n ${3} ]]; then
##### PARAMETERS #####
HOST="${1}"
DRIVE="${2}"
METRIC="${3}"
FILECACHE="/tmp/zabbix.lsimegaraid.cache"
TTLCACHE="55"
TIMENOW=`date '+%s'`
##### CACHE #####
if [ -s "${FILECACHE}" ]; then
TIMECACHE=`stat -c"%Y" "${FILECACHE}"`
else
TIMECACHE=0
fi
if [ "$((${TIMENOW} - ${TIMECACHE}))" -gt "${TTLCACHE}" ]; then
echo "" >> ${FILECACHE} # !!!
DATACACHE=`${MEGACLI} -PDlist -a0 -NoLog | awk -F':' '
function ltrim(s) { sub(/^[ \t]+/, "", s); return s }
function rtrim(s) { sub(/[ \t]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
/Slot Number/ {slotcounter+=1; slot[slotcounter]=trim($2)}
/Inquiry Data/ {inquiry[slotcounter]=trim($2)}
/Firmware state/ {state[slotcounter]=trim($2)}
/Drive Temperature/ {temperature[slotcounter]=trim($2)}
/S.M.A.R.T/ {smart[slotcounter]=trim($2)}
/Media Error Count/ {mediaerror[slotcounter]=trim($2)}
/Other Error Count/ {othererror[slotcounter]=trim($2)}
/Predictive Failure Count/ {failurecount[slotcounter]=trim($2)}
END {
for (i=1; i<=slotcounter; i+=1) {
printf ( "DriveSlot%d inquiry:%s\n",slot[i], inquiry[i]);
printf ( "DriveSlot%d state:%s\n", slot[i], state[i]);
printf ( "DriveSlot%d temperature:%d\n", slot[i], temperature[i]);
printf ( "DriveSlot%d smart:%s\n", slot[i], smart[i]);
printf ( "DriveSlot%d mediaerror:%d\n", slot[i], mediaerror[i]);
printf ( "DriveSlot%d othererror:%d\n", slot[i], othererror[i]);
printf ( "DriveSlot%d failurecount:%d\n", slot[i], failurecount[i]);
}
}';
${MEGACLI} -LDInfo -LAll -a0 -NoLog | awk -F':' '
function ltrim(s) { sub(/^[ \t]+/, "", s); return s }
function rtrim(s) { sub(/[ \t]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
/Virtual Drive:/ {drivecounter+=1; slot[drivecounter]=trim($2);}
/State/ {state[drivecounter]=trim($2)}
/Bad Blocks/ {badblock[drivecounter]=trim($2)}
END {
for (i=1; i<=drivecounter; i+=1) {
printf ( "VirtualDrive%d state:%s\n", slot[i], state[i]);
printf ( "VirtualDrive%d badblock:%s\n", slot[i], badblock[i]);
}
}'` || exit 1
echo "${DATACACHE}" > ${FILECACHE} # !!!
fi
#
cat "${FILECACHE}" | grep -i ${DRIVE} | awk -F':' "/${METRIC}/ {print \$2}" | head -n1
exit 0
#
else
exit 0
fi
Скрипт поддерживает обнаружение (discovery) виртуальных дисков и физических в слотах.
Скрипт предусматривает кэш, что позволяет сократить количество реальных обращений к серверу.
Время действия кэша в секундах должно устанавливается чуть меньше чем минимальный период опроса элементов.
Установка прав
chown root:zabbix /etc/zabbix/scripts/lsimegaraid.sh
chmod 550 /etc/zabbix/scripts/lsimegaraid.sh
Настройка прав пользователю zabbix в sudo
/etc/sudoers
...
##### CUSTOM #####
zabbix ALL=(ALL) NOPASSWD: /opt/bin/megacli -LDInfo -LAll -a0 -NoLog
zabbix ALL=(ALL) NOPASSWD: /opt/bin/megacli -PDlist -a0 -NoLog
Проверить работу скрипта для zabbix:
sudo -u zabbix /etc/zabbix/scripts/lsimegaraid.sh none virtdiskovery
sudo -u zabbix /etc/zabbix/scripts/lsimegaraid.sh none physdiskovery
sudo -u zabbix /etc/zabbix/scripts/lsimegaraid.sh none VirtualDrive0 state
Вы должны получить данные, если этого не произошло, то конфигурация выполнена не правильно.
Настройка Zabbix сервера
Вызов скрипта через zabbix-agent
Настройка
/etc/zabbix/zabbix_agentd.conf
...
UserParameter=lsimegaraid[*],/etc/zabbix/scripts/lsimegaraid.sh "none" $1 $2
Перезапустить
/etc/init.d/zabbix-agentd restart
Проверка
zabbix_get -s HOST -k "lsimegaraid[DriveSlot0, inquiry]"
Для контролируемых данных в Zabbix нужно создать соответствующее элементы с типом «Zabbix агент» и ключом типа:
lsimegaraid[disk, key]
где disk - имя виртуального диска VirtualDrive<X> или слота физического диска DriveSlot<X>
key - контролируемая метрика
Готовый Шаблон для мониторинга LSI MegaRAID (agent) с уже настроенными элементами и графиками.
Результат
Пример графиков:
Изображения не найдены
Обсуждение
Обнаружил, что не все megacli выдают megacli -LDInfo -LAll -a0 -NoLog|grep "Bad Blocks Exist" В результате этого, происходят алармы для некоторых хостов - LSIMegaRaid: VirtualDrive0 Bad Blocks Exist on hostname. Сможете сделать отдельную проверку на наличие строки в выхлопе megacli?
Заменил в проверке на - {MyTemplate_LSIMegaRaid_agent:lsimegaraid[{#VIRTNUM}, badblock].str(Yes)}=1
Уберите
и дезактивируйте элемент для таких хостов
Второй вариант, который я предложил предпочтителен, серверов очень много, везде править это дикий костыль. Спасибо.
Спасибо за скрипт и шаблон !
Правда что то не хочет работать :(
Ошибка в заббиксе. Value should be a JSON object.
версия сервера 2.2.7, агента 2.2.1
Подскажите плз, как быть.
Все спасибо ! Разобрался.
Добрый день! Подскажите, в чем была проблема? Тоже самое, только версии агентов и сервера другие. 2.4.8
Маленькое дополнение !
Если в /etc/sudoers по умолчанию включена опция "Defaults requiretty", то ничего не заработает.
Нужно добавить еще такую строчку "Defaults:zabbix !requiretty"
Пример:
Спасибо за дополнение
Думаю так будет проще:
Если значение не было получено от megaCli, то будет присвоено Unknown.
Антон, а можете уточнить, где именно Вы изменили проверку?
Если можно, максимально подробно: только начинаю с zabbix'ом знакомиться.
День добрый! Только начинаю пользовать заббикс и нашел этот сайт с инструкцией по мониторингу LSI. Сделал как здесь написано, начинаю смотреть логи на сервере и вижу
Сам ключ такой:
Подскажите куда копать
Фигня какая-то, сверьте формат вывода команд megacli у вас с примером или выложите на pastbin.
Где результаты проверки работы скрипта при ручном запуске из примеров
Ребята, а ни у кого не вешал контроллер?
Начинаю собирать информацию и через несколько часов вешается контроллер.
Как при таких правах должно работать
?
Верное замечание, исправил, спасибо.
Спасибо за скрипт и шаблон. Актуализировал его для версии 4.4 - _yadi.sk/d/CWcjdUin6ve34Q
Добрый день! RAID-контроллер LSI MegaRAID 9260-8i MegaCLI стоит и пашет Подсобите, проблема следующая. Проксмокс 6й стоит там где рейд воткнут 1 рейд контроллер. Силанукса нет. От рута запускается скрипт а от заббикса нет, всё что можно уже перепробовал! Файл кеша, с ним проблема!
На сервере зббикс
На тачке с рейд контроллером
Похоже, где-то с правами ошиблись, попробуй