Настройка мониторинга RAID LSI MegaRaid на Linux с помощью Zabbix

Обновлено и опубликовано Опубликовано:

Используемые термины: RAIDLinuxZabbix, S.M.A.R.T.

Разберем ситуацию, при которой нам нужно узнать состояние дискового RAID-массива, затем настроить мониторинг данного состояния сервером Zabbix. В качестве операционной системы, под управлением которой работает компьютер с LSI MegaRaid будем использовать Linux.

Установка megacli

Смотреть состояние массива RAID будем с помощью фирменной утилиты megacli.

Для начала, проверим, что на сервере используется контроллер LSI MegaRaid:

lspci -nn | grep -i lsi

Пример ответа:

02:00.0 RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID SAS 2108 [Liberator] [1000:0079] (rev 05)

Разберем процесс установка утилиты на Linux CentOS и Ubuntu.

CentOS

Устанавливаем пакеты для распаковки архивов и загрузки файлов:

yum install unzip wget

Переходим по ссылке download.hetzner.de/tools/LSI/tools/MegaCLI — логин hetzner и пароль download. В открывшемся окне копируем ссылку на нужную версию утилиты, например:

Копируем ссылку на утилиту для Linux

С помощью ссылки скачиваем утилиту на компьютер, на котором будет мониторить состояние контроллера:

wget --user hetzner --password download https://download.hetzner.de/tools/LSI/tools/MegaCLI/8.07.10_MegaCLI_Linux.zip

* в данном примере мы загружаем MegaCLI версии 8.07.10 для Linux. Для прохождения авторизации используем логин и пароль hetzner/download.
* если система вернет ошибку при выполнении команды, устанавливаем wget командой yum install wget.

Распаковываем скачанный архив:

unzip *_MegaCLI_Linux.zip

Устанавливаем RPM-пакет:

rpm -i 8.07.10_MegaCLI_Linux/Linux\ MegaCLI\ 8.07.10/MegaCli-8.07.10-1.noarch.rpm

* напомню, в данном примере устанавливаем версию 8.07.10.

Создаем ссылку на бинарник:

ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/megacli

Проверяем, что утилита работает:

megacli -V

Мы должны получить версию установленного пакета.

Ubuntu

Открываем настройки репозитория:

vi /etc/apt/sources.list

В самый низ добавляем:

deb http://hwraid.le-vert.net/ubuntu xenial main

* где xenial — выпуск Ubuntu (можно посмотреть командой lsb_release -a).

Обновляем список пакетов:

apt-get update

И устанавливаем megacli:

apt-get install megacli

Проверяем, что утилита работает:

megacli -V

Мы должны получить версию установленного пакета.

Использование megacli

Для работы нам могут быть полезны следующие команды.

1. Посмотреть модели контролера и версию прошивки:

megacli -AdpAllInfo -aAll | grep -E 'Product Name|Serial No|FW Package Build'

Пример ответа:

Product Name    : RAID Ctrl SAS 6G 5/6 512MB (D2616)
Serial No       :
FW Package Build: 12.12.0-0174

2. Состояние дисков:

megacli -PDList -Aall

Пример ответа:

Enclosure Device ID: 252
Slot Number: 0
Drive's position: DiskGroup: 2, Span: 0, Arm: 0
Enclosure position: N/A
Device Id: 2
WWN: 50014ee2662dd189
Sequence Number: 2
Media Error Count: 0
Other Error Count: 0
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SATA

Raw Size: 931.512 GB [0x74706db0 Sectors]
Non Coerced Size: 931.012 GB [0x74606db0 Sectors]
Coerced Size: 931.0 GB [0x74600000 Sectors]
Sector Size:  0
Logical Sector Size:  0
Physical Sector Size:  0
Firmware state: Online, Spun Up
Device Firmware Level: 1A02
Shield Counter: 0
Successful diagnostics completion on :  N/A
SAS Address(0): 0x4433221103000000
Connected Port Number: 1(path0)
Inquiry Data:      WD-WCC6Y1NURJ0VWDC WD10EZEX-08WN4A0    02.01A    02
FDE Capable: Not Capable
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:  Not Certified
Drive Temperature :30C (86.00 F)
PI Eligibility:  No
Drive is formatted for PI information:  No
PI: No PI
Port-0 :
Port status: Active
Port's Linkspeed: 6.0Gb/s
Drive has flagged a S.M.A.R.T alert : No

* в данном примере отображено состояние для одного диска. Нам могут быть полезны параметры Firmware state — показывает состояние диска; Drive has flagged a S.M.A.R.T alert — состояние SMART.

Скрипты для получения состояния дисков

В нашем примере мы напишем очень простой скрипт, который будет находить неправильное состояние диска. Если хотя бы один из носителей имеет тревоги по SMART или ошибки в состоянии, скрипт будет возвращать 1. Если проблем нет — 0. Сам скрипт будет написан на bash.

У меня не получилось сделать так, чтобы команда megacli нормально отрабатывала при запуске от zabbix агента, поэтому сам скрипт будет выполняться по крону и результат записывать в отдельный файл, который и будет читать агент заббикса.

Создаем каталог, в который поместим скрипт:

mkdir /scripts

Создаем файл скрипта:

vi /scripts/raid_mon_cron.sh

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

count_errors=`megacli -PDList -Aall | grep -e "S.M.A.R.T alert : Yes" -e "Firmware state: Fail" | wc -l`

if [ $count_errors -gt 0 ]
then
    echo 1 > /scripts/scan_result
else
    echo 0 > /scripts/scan_result
fi

exit 0

* это простой скрипт, который получает состояние всех дисков и проверяет, нет ли среди этих состояний тревог от SMART и состояния Failed — результат записывается в переменную count_errors в виде количества найденных проблем. Если значение данной переменной больше 0 (то есть, есть хотя бы одно состояние сбоя), скрипт записывает в файл /scripts/scan_result "1", иначе — "0".

Разрешаем запуск скрипта на выполнение:

chmod +x /scripts/raid_mon_cron.sh

Создадим задание в cron:

crontab -e

*/5 * * * * /scripts/raid_mon_cron.sh

* в данном примере мы будем запускать наш скрипт по проверке состояние дисков каждые 5 минут.

Теперь создадим скрипт, который будет запускать zabbix-agent:

vi /etc/zabbix/zabbix_agentd.d/raid_mon.sh

* обратите внимание, что скрипт создается в каталоге zabbix-агента. Если в нашей системе его нет, необходима установка — примеры установки для CentOS и Ubuntu.

Содержимое скрипта:

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

cat /scripts/scan_result

exit 0

* все, что делает скрипт — выводит содержимое файла /scripts/scan_result, в котором должно быть либо 0, либо 1.

Разрешаем запуск скрипта на выполнение и зададим владельца zabbix:

chmod 770 /etc/zabbix/zabbix_agentd.d/raid_mon.sh

chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/raid_mon.sh

Пробуем выполнить скрипты:

/scripts/raid_mon_cron.sh

/etc/zabbix/zabbix_agentd.d/raid_mon.sh

В зависимости от ситуации они вернут 0 или 1.

UserParameter для агента Zabbix

Запуск скрипта и передача результата его работы серверу мониторинга выполняется с помощью Zabbix-агента. Для этого необходимо настроить UserParameter.

Открываем настройки агента:

vi /etc/zabbix/zabbix_agentd.conf

В самый низ добавляем строку:

UserParameter=raid_mon[*],/etc/zabbix/zabbix_agentd.d/raid_mon.sh

* в данном случае, мы создаем в zabbix агенте пользовательский параметр с именем raid_mon — при его вызове будет запускаться скрипт /etc/zabbix/zabbix_agentd.d/raid_mon.sh, который мы ранее создали.

Перезапускаем агента:

systemctl restart zabbix-agent

Если используется SELinux, отключаем его:

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Проверяем работу параметра. Для этого с сервера zabbix выполняем команду:

zabbix_get -s 192.168.0.15 -k raid_mon

* в данном примере мы обращаемся к серверу 192.168.0.15 и запускаем пользовательский параметр raid_mon.

В итоге, мы должны получить такой же ответ, который получили, запустив скрипт локально с компьютера, на котором его создали.

Настройка сервера Zabbix

На сервере zabbix необходимо создать шаблон для сканирования дисков с триггером для получения данных от агента на сервере и в случае 1 выводить тревогу. После необходимо добавить данный шаблон для всех узлов, на которых необходим мониторинг дисков.

Создание шаблона

Открываем веб-панель управления Zabbix. Выполним ряд шагов для достижения цели.

1. Переходим в Настройка - Шаблоны:

Переходим в настройки шаблонов

Справа сверху кликаем по Создать шаблон:

Создаем новый шаблон

В открывшемся окне называем шаблон, например, Template Scan RAID - добавляем его в группы, например Linux Servers и Windows Servers (нам никто не мешает также сканировать диски на серверах Windows):

Заполняем начальные данные для шаблона

Кликаем по Добавить. Будет создан шаблон.

2. В списке шаблонов находим свой и кликаем для его настройки:

Находим созданный шаблон и кликаем по нему

Переходим в Группы элементов данных:

Переходим на вкладку групп элементов данных

Кликаем по Создать группу элементов данных:

Кликаем по создать группу элементов данных

Даем название для группы, например, RAID:

Даем название для группы элементов данных

... и кликаем по Добавить. Группа элементов создана.

3. Переходим на вкладку Элементы данных и кликаем по Создать элементы данных:

Создаем элемент данных

В открывшемся окне даем название для элемента, например, RAID: Status Monitoring - прописываем ключ raid_mon (тот, что задали в UserParameter) - ставим интервал обновления в 5 минут (так как в кроне мы сканируем состояние каждые 5 минут, проверять чаще нет смысла) - выбираем созданную ранее группу элементов данных (RAID):

Задаем настройки для элемента данных

... и кликаем по Добавить. Элемент данных добавлен.

4. Создаем триггер — для этого переходим на вкладку Триггеры - кликаем по Создать триггер:

Создаем тригер

Даем название для триггера, например, RAID: Status Error - меняем значение для важности, например, на Высокая - задаем выражение {Template Scan RAID:raid_mon.last()}=1 (триггер должен реагировать на значение равное 1):

Параметры для создаваемого тригера

Нажимаем Добавить.

Шаблон готов и настроен.

Применение шаблона

Теперь можно применить наш шаблон к узлу. Переходим в Настройка - Узлы сети - выбираем узел, на котором создан скрипт для мониторинга дисков - переходим на вкладку Шаблоны и добавляем созданный нами шаблон:

Присоединение шаблона к узлу

Нажимаем Обновить.

Мониторинг состояния дисков настроен. При возникновении критического состояния мы увидим проблему «RAID: Status Error».

# Железо # Linux
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет