Мониторинг Intel raid с помощью raidcfg и Zabbix

У меня есть группа серверов с настроенным intel raid и установленными поверх Windows Hyper-V Server. Возникло больше желание с помощью zabbix наблюдать за состоянием массивов и предупреждать в случае проблем. Готового решения нигде не нашел, поэтому пораскинул мозгами и придумал свое, чем и хочу поделиться с вами.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Цели статьи

  1. Настроить передачу в zabbix состояния рейд массивов, настроенных с помощью встроенной в материнскую плату технологии intel raid.
  2. При настройке совершать минимум действий на целевых серверах, а максимум на zabbix сервере.
  3. Настроить триггеры и уведомления на случай, если состояние рейда отличается от рабочего Normal.

Введение

На серверах уже настроен мониторинг состояния SMART дисков. При использовании встроенного intel raid, состояние дисков с целевой системы нормально наблюдается. В принципе, мне этого хватало, но подумал, почему бы и состояние массивов не замониторить, ведь массив может развалиться и при нормальных показателях смарта дисков.

В первую очередь погуглил и не нашел практически ничего, что помогло бы настроить мониторинг интел рейдов в zabbix. На целевых системах установлена интеловская утилита raidcfg, с помощью которой можно посмотреть на состояние массивов и дисков. Например, с ключом /st получается вот такой вывод.

Статус raid массивов

Красиво и наглядно, но для автоматизации не очень подходит. Лучше подойдет ключ /stv.

raidcfg /stv

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

В этот раз мне не захотелось такие костыли городить на каждом сервере. Я в итоге решил поступить по-другому. На zabbix сервере сделать скрипт для внешних проверок. Этот скрипт будет на целевом сервере с помощью zabbix_get забирать вывод команды raidcfg.exe /stv, запущенной через system.run. Дальше вывод команды в исходном виде поступает на zabbix сервер. Его можно парсить каким-то образом, но я решил этого не делать. Вывод и так короткий, много места не занимает. Проверка на наличие тревожных слов будет уже в триггере с помощью regexp.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Скрипт для внешних проверок raid массивов

В директорию на zabbix сервере /usr/lib/zabbix/externalscripts кладем скрипт intelraid.sh для внешних проверок.

#!/bin/bash

/usr/bin/zabbix_get -s $1 -k system.run["c:\windows\raidcfg.exe /stv"]

Скрипт, как вы видите, очень простой. Для того, чтобы он работал, вам обязательно нужно на каждом агенте разрешить выполнение внешних команд. По-умолчанию они отключены. Добавляем в агенте параметр:

EnableRemoteCommands=1

И перезапускаем агент. Это все, что надо делать на целевых серверах. Теперь можно проверить работу скрипта. Для этого выбираете любой сервер и передаем его ip адрес в качестве параметра скрипту.

# /usr/lib/zabbix/externalscripts/intelraid.sh 10.1.4.9
;Index,Level,StripSize,SizeinMB,Status,Bootable,Array,Name
0,1,64kB,1907726,"Normal","Yes",0,"System"
1,1,64kB,2861586,"Normal","Yes",1,"Storage"

Если получаете результат работы утилиты raidcfg, значит все в порядке. Можно переходить в web интерфейс сервера мониторинга.

Шаблон для мониторинга за intel raid

Шаблон очень простой - один элемент и один триггер, поэтому экспорт шаблона делать не буду, лучше создать вручную, чтобы точно работало на всех версиях Zabbix. Вот элемент данных.

Шаблон для мониторинга intel raid в zabbix

А вот триггер к нему.

Триггер о статусе массива

Выражение триггера:

{Intel raid with raidcfg:intelraid.sh[{HOST.CONN}].regexp(Failed|Disabled|Degraded|Rebuild|Updating|Critical)}=1

Если в строке будет найдено одно из слов Failed|Disabled|Degraded|Rebuild|Updating|Critical, то он сработает. Я на практике не проверял работу триггера, так как не хотелось рейд ломать. А потестил следующим образом. Добавил в проверочную строку название одного из массивов, к примеру, Storage, который встречается не на всех серверах. В итоге, триггер сработал только там, где было такое название. Так что в теории, проверка должна работать корректно.

Теперь можно добавлять шаблон к необходимым хостам и ждать поступление данных. В Latest Data должны увидеть следующее содержимое итема.

Мониторинг intel raid

Вот и все. Теперь все intel raid массивы подключены к мониторингу.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Так быстро и просто решается прикладная задача по мониторингу с помощью Zabbix. Сел, прикинул и сразу сделал. Вариантов решения обычно несколько, выбирай на свой вкус. Можно было на клиенте распарсить вывод и передавать в Zabbix сразу состояние массива в одно слово. А можно было просто True/False или 1/0.

Я последнее время стараюсь максимально выполнять на сервере и минимально на клиенте, благо в заббиксе появилась куча средств для этого - пост обработка данных, зависимые элементы и т.д. Буду рад замечаниям и предложениям по теме в комментариях. Если вам интересен Zabbix, читайте мои остальные статьи по нему.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

22 комментария

  1. День добрый
    Решил повторить ваш путь, только испульзуя RSTCLI и заббикс 5.4
    тут ребята выкладывали ссылку: https://github.com/mykolq/zabbix_intel_rst_template
    как подключить их вариант по их инструкции ума не хватило, не настолько знаю заббикс
    но из их архива взял один из rstcli.exe, который на моих драйверах видит рейд и выводит его состояние
    он при параметрах rstcli.exe -I -a --comma выдаёт что-то похожее на вывод raidcfg, только больше инфы
    закинул это всё по вашей инструкции на zabbix (кто будет повторять, не забудьте права на файл поправить, что был доступ у всех,
    и пишите скрипт сразу на заббиксе в каком нибудь линуховом редакторе, а не в виндовом блокноте, а то там вставляется какой-то символ перевода строки)
    в заббиксе создал шаблон, а вот когда начал делать триггер с выражением:
    {Intel raid with rst:intelraid.sh[{HOST.CONN}].regexp(Failed|Disabled|Degraded|Rebuild|Updating|Critical)}=1
    при сохранении триггера выдаёт ошибку:
    Ошибочный параметр "/1/expression": некорректное выражение начиная с "{Intel raid with rst:intelraid.sh[{HOST.CONN}].regexp(Failed|Disabled|Degraded|Rebuild|Updating|Critical)}=1".
    я никак не могу разобраться в синтаксисе, сколько не читаю
    помогите пожалуйста

    • Я не смогу помочь. У вас другая программа и другой синтаксис вывода. Для его парсинга нужно составлять другое регулярное выражение. Без рабочего примера под рукой и отладки трудно сразу сказать решение. Покажите вывод вашей программы о состоянии массивов.

      Но судя по Вашим вопросам, вы не очень разбираетесь в Zabbix. Либо придётся разбираться самостоятельно, либо использовать готовые решения.

      • Спасибо за ответ. Заббикс к сожелению знаю слабовато. Разбираюсь по вашим статьям, но туго идёт с регулярными выражениями.
        вывод утилита даёт такой:
        --ARRAY INFORMATION--

        Name: SATA_Array_0000, Size: 1863 GB, Free: 0 GB, Num Disks: 2, Num Vols: 1, Write Cache: Off

        --VOLUMES IN ARRAY: SATA_Array_0000 --

        Name: raid, Raid Level: 1, Size: 932 GB, StripeSize: 64 KB, Num Disks: 2, State: Normal, System: True, Initialized: True, Cache Policy: Off

        --DISKS IN ARRAY: SATA_Array_0000 --

        ID: 0-0-0-0, Type: Disk, Disk Type: SATA Disk, State: Normal, Size: 932 GB, Free Size: 0 GB, System Disk: False, Usage: Array member, Serial Number: ZFA1B4QR, Model: ST1000NM0008-2F2100

        ID: 0-1-0-0, Type: Disk, Disk Type: SATA Disk, State: Normal, Size: 932 GB, Free Size: 0 GB, System Disk: False, Usage: Array member, Serial Number: ZFA1B6E7, Model: ST1000NM0008-2F2100

        у меня вопрос больше по первой части выражения, я не очень понимаю синтаксис вот этого выражения:
        Intel raid with raidcfg:intelraid.sh[{HOST.CONN}]
        ибо выборка второй части (.regexp(xxx)) будет как у вас. те же failed и так далее
        или нужно перед этим сделать вывод в текстовый файл и распарсить его (у вас была статья на эту тему)?

        • В первой части стандартное выражение для триггера. Там всего лишь указан айтем, который будет использоваться. Сначала идёт название шаблона Intel raid with raidcfg, а потом ключ айтема intelraid.sh[{HOST.CONN}]
          Это синтаксис версии Zabbix до 5.4. В ней уже по-другому надо писать это выражение. Под рукой нет примера.

        • Если кто-то, как и я, не разберётся с Заббиксом в связке с RST, то можно сделать топорно, через планировщик задач запуск файла, например раз в 10 минут такого содержания:

          @echo off
          setlocal enableextensions enabledelayedexpansion
          set file_blat=C:\RaidTest\blat.exe (нашёл на просторах сети утилиту, отправляет из командной строки почту)
          set file_text=C:\RaidTest\report.txt
          set file_log=C:\RaidTest\log_blat.txt
          set from_server=Ваш SMTP сервер в сети (я поднял на контроллере домена)
          set from_port=25
          set from_mail=с какой почты отправлять
          set to_mail=на какую почту отправлять
          set subj1="Problem with RAID on the ваш сервер (array status: Failed)"
          set subj2="Problem with RAID on the ваш сервер (array status: Disabled)"
          set subj3="Problem with RAID on the ваш сервер (array status: Degraded)"
          set subj4="Problem with RAID on the ваш сервер (array status: Rebuild)"
          set subj5="Problem with RAID on the ваш сервер (array status: Updating)"
          set subj5="Problem with RAID on the ваш сервер (array status: Critical)"
          
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Failed" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj1% -log %file_log%
          pause
          	)
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Disabled" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj2% -log %file_log%
          pause
          	)
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Degraded" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj3% -log %file_log%
          pause
          	)
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Rebuild" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj4% -log %file_log%
          pause
          	)
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Updating" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj5% -log %file_log%
          pause
          	)
          c:\Raidtest\rst.exe -I -a --comma | find.exe /i "Critical" && (
          %file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -to %to_mail% -s %subj6% -log %file_log%
          pause
          	)
          		endlocal
          		exit /b
          • Нормальный вариант для одиночного сервера. Раньше все так и мониторили, пока не внедрили какую-нибудь систему мониторинга.

  2. Добрый день. Есть необходимость использовать MIB для мониторинга различного железа. Вычитал, что есть snmp builder для заббикса. Она актуален для последних версий? Если да, то не могли бы вы об этом написать статью? Ну или консультацию дать лично, там договоримся. Спасибо

    • Не слышал ничего об этом и не занимался. Вряд ли смогу чем-то помочь по этому поводу.

  3. Андрей

    Zerox, Здравствуйте, а где брать raidcfg? intel не выпускает уже эту утилиту? Получается этот метод подходит для компов 5-ти летней давности(когда в irst входил raidcfg)

    • Сейчас не знаю. Писал статью недавно, этим летом, нашел без проблем в гугле ее. Настраивал несколько серверов.

    • Сергей

      Брал здесь, называется только иначи.
      https://github.com/mykolq/zabbix_intel_rst_template
      Там несколько версий CLI есть в архиве, 13-16 у меня заработала на версии IntelRST 14

    • Решил оставить здесь информацию.
      Какое-то время не было решений для драйверов 14-16 версий.
      Сейчас Intel наконец вернула поддержку Cli на свежих версиях IRST драйверов.
      Итого обновил драйвер IRST до последнего 18.0.1.1138 (при условии поддержки оборудованием).
      И через RST_CLI_Pro_x64 все работает!

  4. а где взять этот raidcfg? windows server 2012 r2 что то у меня не работает

      • у меня почему то пишет не подходит для этой платформы хотя выбирвю свою ос

      • E Win32 exception occurred!!
        2019:07:11 12:08:25:216: Error code: 0x4E24 (20004)
        2019:07:11 12:08:25:217: Error text: ''
        2019:07:11 12:08:25:217: Extended error text: 'Error in device matching'
        2019:07:11 12:08:25:217: Debug info: 'Setup.cpp (900)'
        2019:07:11 12:08:25:217: Node is not valid. Failed to resolved error string from config file error: 20004
        2019:07:11 12:08:25:217: propertyId: 8095, serror: Эта платформа не поддерживается. errorCode: 20004

        строчки лога с ошибкой

      • Андрей

        как пишут на форуме intel, последняя raidcfg32 содержится в версии 13.2, но найти так и не получилось. Удалось найти версию RST_11.0.0.1032. Установив эту версию на Asus PRIME H270-PLUS не удается загрузить windows 7 в обычном режиме, только с "отключением проверки цифровой подписи драйверов". Способ мониторинга в данной статье рабочий, вот только intel эту утилиту (raidcfg32) уже не поддерживает.

  5. для информации, на центе последнем (7,6) zabbix не заводится
    https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/359132-server-won-t-start
    https://bugzilla.redhat.com/show_bug.cgi?id=1658352
    все что описано в инете у меня не сработало, обещали починить в 7,7

    в дебе 9.х с пол тычка

    ни кто не сталкивался: в virtualbox 6.хх (тестово погонять) поставил debian 9.9, на первый zabbix lts + mysql, на второй zabbix lts + postgre, первый забивает i/o, пришлось шаманить и отключать jbd2 (по шаманским факам), второй в пределах нормы, ни mysql ни postgre не тюнил

  6. Максим

    Вот бы под виндоус такой мониторинг настроить.
    У меня hp smartarray p212, попробовал https://share.zabbix.com/storage-devices/hp/hp-smart-array-controller , у меня не взлетело.

    • Так эта инструкция по windows и сделана. Но для hp smartarray p212 она не подходит. Это же другой рейд контроллер. Тут речь именно про intel raid.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar