- Настройка мониторинга RAID LSI MegaRaid на Linux с помощью Zabbix
- Установка megacli
- CentOS
- Ubuntu
- Использование megacli
- Скрипты для получения состояния дисков
- UserParameter для агента Zabbix
- Настройка сервера Zabbix
- Создание шаблона
- Применение шаблона
- Мониторинг значений из текстового файла в Zabbix
- Введение
- Скрипты для парсинга значений
- Добавляем UserParameter в zabbix agent
- Настройка новый итемов на сервере zabbix
- Заключение
Настройка мониторинга RAID LSI MegaRaid на Linux с помощью Zabbix
Разберем ситуацию, при которой нам нужно узнать состояние дискового 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. В открывшемся окне копируем ссылку на нужную версию утилиты, например:
С помощью ссылки скачиваем утилиту на компьютер, на котором будет мониторить состояние контроллера:
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.
Распаковываем скачанный архив:
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
Проверяем, что утилита работает:
Мы должны получить версию установленного пакета.
Ubuntu
Открываем настройки репозитория:
В самый низ добавляем:
deb http://hwraid.le-vert.net/ubuntu xenial main
* где xenial — выпуск Ubuntu (можно посмотреть командой lsb_release -a).
Обновляем список пакетов:
И устанавливаем megacli:
apt-get install megacli
Проверяем, что утилита работает:
Мы должны получить версию установленного пакета.
Использование 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 агента, поэтому сам скрипт будет выполняться по крону и результат записывать в отдельный файл, который и будет читать агент заббикса.
Создаем каталог, в который поместим скрипт:
Создаем файл скрипта:
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
* это простой скрипт, который получает состояние всех дисков и проверяет, нет ли среди этих состояний тревог от SMART и состояния Failed — результат записывается в переменную count_errors в виде количества найденных проблем. Если значение данной переменной больше 0 (то есть, есть хотя бы одно состояние сбоя), скрипт записывает в файл /scripts/scan_result «1», иначе — «0».
Разрешаем запуск скрипта на выполнение:
chmod +x /scripts/raid_mon_cron.sh
Создадим задание в cron:
* в данном примере мы будем запускать наш скрипт по проверке состояние дисков каждые 5 минут.
Теперь создадим скрипт, который будет запускать zabbix-agent:
* обратите внимание, что скрипт создается в каталоге zabbix-агента. Если в нашей системе его нет, необходима установка — примеры установки для CentOS и Ubuntu.
* все, что делает скрипт — выводит содержимое файла /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
Пробуем выполнить скрипты:
В зависимости от ситуации они вернут 0 или 1.
UserParameter для агента Zabbix
Запуск скрипта и передача результата его работы серверу мониторинга выполняется с помощью Zabbix-агента. Для этого необходимо настроить UserParameter.
Открываем настройки агента:
В самый низ добавляем строку:
* в данном случае, мы создаем в zabbix агенте пользовательский параметр с именем raid_mon — при его вызове будет запускаться скрипт /etc/zabbix/zabbix_agentd.d/raid_mon.sh, который мы ранее создали.
systemctl restart zabbix-agent
Если используется SELinux, отключаем его:
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 — меняем значение для важности, например, на Высокая — задаем выражение =1 (триггер должен реагировать на значение равное 1):
Нажимаем Добавить.
Шаблон готов и настроен.
Применение шаблона
Теперь можно применить наш шаблон к узлу. Переходим в Настройка — Узлы сети — выбираем узел, на котором создан скрипт для мониторинга дисков — переходим на вкладку Шаблоны и добавляем созданный нами шаблон:
Нажимаем Обновить.
Мониторинг состояния дисков настроен. При возникновении критического состояния мы увидим проблему «RAID: Status Error».
Источник
Мониторинг значений из текстового файла в Zabbix
Недавно мне досталась любопытная задача по мониторингу системы управления насосами и электрооборудованием. Как сами эти системы работают не знаю, для меня значения с контроллеров вывели в текстовые файлы на компьютере под управлением Windows. Моей задачей было передать параметры из текстового файла в систему мониторинга Zabbix.
Введение
Если у вас еще нет готовой системы мониторинга, можете воспользоваться моей статьей по установке и настройке zabbix на centos или freebsd.
Задача по своей сути не сложная. Нечто похожее я уже делал, когда настраивал мониторинг температуры процессора в windows сервере. Мы берем текстовый файл, парсим его с помощью bat файлов и передаем готовые числовые или строковые значения в Zabbix через windows агента и функционал UserParameter.
Пишу эту статью в основном для того, чтобы поделиться примерами написания bat файлов для парсинга и передачи в заббикс. Для меня это было самое сложное, так как приходилось сталкиваться с различными проблемами по вычленению значений и искать варианты для преобразования строк. Я не очень разбираюсь в программировании, особенно в bat файлах. В основном ищу готовые варианты и переделываю под себя. Тут ничего готового я не нашел и пришлось ковыряться и разбираться самому.
Скрипты для парсинга значений
Первый текстовый файл имел примерно такое содержание:
Описание возможных значений параметров:
- state_pump может принимать значения on или off
- running_time_pump имеет нарастающее числовое значение
- sensor может принимать 3 значения: empty, full, overflow
- general_state либо ОК, либо номер ошибки
Рисуем батник для первого параметра. Если значение on, передаем в заббикс 1, если off — 0.
Обращаю внимание на то, что у меня имя файла было на русском языке. Чтобы его корректно обрабатывало, необходимо сохранить файл в кодировке OEM 866. ПО крайней мере так она называлась в Notepad++, который я использовал для изменения кодировки. Это была самая простая задача, которая решилась прямо в лоб. По аналогии написал скрипт для параметра sensor:
Дальше пришлось соображать, как передать числовое значение, обрезав все, что стоит перед ним. Наверное, для любого программиста это простая задача, для скрипта в linux я тоже не вижу больших проблем придумать что-нибудь с sed, cat, grep или чем-то еще. Но тут у меня в распоряжении bat. Можно было на vbs написать, но для меня это было бы еще сложнее.
Начал читать документацию по for и find, смотреть примеры и пробовать. В итоге все получилось очень просто и коротенько, но повозиться мне пришлось прилично, пока родились эти строки:
Подробно описывать не буду, что тут к чему, при желании сами можете поискать описание параметров. Обращу внимание только на строку set d=%str:
21,25%. Она меня очень выручила. Наткнулся где-то в примере на описание обрезания строк по заданным колонкам. Тут мы выводим значения с 21 по 25 колонки найденной строки. Как раз то, что мне нужно. На выходе просто цифры, которые отлично принимает zabbix.
Обработку параметра general_state делаем аналогичным способом:
Поступающее значение я передаю в заббикс как простую строку, в отличие от чисел в предыдущих примерах.
Второй текстовый файл был примерно такого содержания:
Здесь по аналогии делается все так же, как и в первом примере за одним исключением. Я в какой-то момент поставил в команде find ключ /i, который означает, что значение ищется без учета регистра. В итоге в новом файле я получил проблемы при поиске строк, где есть слово power. Таких строк несколько, причем первая точно повторяет 6-ю, где встречается точно такая же конструкция:
Или еще пример со строками:
Я начал думать, гадать и заходить окольными путями для решения проблемы. В цикле for есть параметр eol, который позволяет задать символ начала строки, при встрече которого строка не обрабатывается. Например вот так:
То есть я нахожу первую и нужную мне строку с active_power, а вторую, где тоже есть эта фраза пропускаю, так как она начинается с символа R. Такой вот костыль придумал, но тем не менее поставленную задачу эта конструкция решает. Рассказываю об этом, чтобы поделиться опытом и самому потом не забыть эти подходы. В итоге я просто убрал ключ /i в команде find и поиск стал работать с учетом регистра без лишних телодвижений.
Распарсил в итоге второй файл. Проверять работу скриптов нужно в командной строке, просто их запуская. На выходе вы должны получать готовые значения, без лишних строк. Теперь двигаемся дальше и настраиваем zabbix agent на сбор данных.
Добавляем UserParameter в zabbix agent
Открываем конфигурационный файл агента и добавляем в самый конец новые параметры, которые будет собирать zabbix:
И так далее. Не стал приводить полный вывод своего файла. По аналогии делаете у себя. Первое значение это название ключа, который будет указан в итеме на сервере, второе это путь к батнику.
После изменения конфигурационного файла нужно перезапустить службу агента. Проверить, все ли сделано правильно можно с помощью команды в консоли:
Если у вас все работает и значения правильные выводятся, идем на сервер, настраивать сбор параметров.
Настройка новый итемов на сервере zabbix
Мы можем добавить новые итемы на одиночный хост, в котором указаны в агенте необходимые для сбора UserParameter, либо создать сразу шаблон и потом его добавить к нужным хостам. Если у вас хостов с одинаковым мониторингом больше одного, то делать нужно шаблон, чтобы упростить себе жизнь.
Создаем новый итем в хосте, либо шаблоне. Указываете следующие обязательные параметры (я рекомендую использовать английский язык везде):
Имя | Произвольное имя итема |
Тип | В общем случае используются пассивные проверки (Zabbix agent) |
Ключ | Название ключа, который указан в агенте в UserParameter |
Тип данных | Выбираете в зависимости от типа поступаемых данных. В моем случае это были цифровые целые или с плавающей точкой, если значения дробные, и текстовые. Здесь важно не перепутать тип. Если перепутаете, получите ошибку итема. |
Интервал обновления | Как часто будут поступать новые данные |
На этом все. Сохраняете итем и ждете поступление данных. Числовые значения, которые генерируют скрипты на клиенте с агентом будут поступать на сервер.
Заключение
Подобным способом можно настроить мониторинг любых значений текстового файла. Достаточно его распарсить нужным образом. Хотя в большинстве случаев это будет костылем. У заббикса очень много способов получения данных. Лучше обходиться без промежуточных звеньев в виде текстового файла и передавать данные напрямую в zabbix. Но конкретно в данной ситуации это было самое простое и быстрое решение.
Источник