- Настройка мониторинга RAID LSI MegaRaid на Linux с помощью Zabbix
- Установка megacli
- CentOS
- Ubuntu
- Использование megacli
- Скрипты для получения состояния дисков
- UserParameter для агента Zabbix
- Настройка сервера Zabbix
- Создание шаблона
- Применение шаблона
- Мониторим всё: расширение агентов Windows и Linux при помощи скриптов
- Немного матчасти
- Мониторинг SMART через UserParameter
- Мониторинг SMART через Flexible UserParameter
- Мониторинг SMART через Flexible UserParameter c Low-level Discovery
- Контроль за установкой новых программ на Windows
- В итоге
Настройка мониторинга 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».
Источник
Мониторим всё: расширение агентов Windows и Linux при помощи скриптов
Если нам нужно мониторить состояние серверов и прочих компьютеризированных рабочих мест при помощи Zabbix, то это можно сделать двумя способами.
Первый способ — это при помощи SNMP-запросов, с отправкой которых Zabbix замечательно справляется. Так можно вытащить и загрузку сетевых интерфейсов, и загрузку процессора, памяти. Поверх этого, производители сервера могут выдать нам по SNMP еще много информации о состоянии железа.
Второй заключается в использовании Zabbix агента, который мы будем запускать на наблюдаемой системе. Список наблюдаемых параметров включает в себя как и такие простые вещи, как загрузка процессора, использование памяти, так и более хитрые, такие как чтение текстовых лог-файлов с поддержкой ротации или отслеживание факта изменения любого файла. Можно даже в качестве параметра использовать вывод любой произвольной команды на системе. Возможности Zabbix агента растут от версии к версии.
Что делать, если того, что мы хотим контролировать через Zabbix нет в списке возможностей Zabbix агента? Ждать пока это имплементируют разработчики в следующем релизе? Не обязательно.
Нам оставили несколько стандартных интерфейсов для того, чтобы расширить возможности Заббикса по мониторингу серверов настолько, насколько позволит нам наша фантазия и наличие свободного времени на написание скриптов. Интерфейсы эти UserParameter и zabbix_sender. О первом и пойдет речь, а в качестве примеров будет показано как можно собирать состояние S.M.A.R.T жестких дисков и контролировать, когда кто-то удаляет или устанавливает новые программы на своей Windows-машине.
Немного матчасти
Если вы уже хоть раз настраивали Zabbix агент на сервере, то начать использовать UserParameter не составит труда. Чтобы добавить новый параметр нужно сделать несколько вещей:
- Добавить в конце конфигурационного файла zabbix_agentd.conf строчку вида
где:
— уникальное имя, которое мы придумываем сами. Будем его использовать при настройке элемента данных в Zabbix.
— команда, которую нужно выполнить на наблюдаемом узле сети.
А вот сразу очень простой пример, который лежит в каждом стандартном конфиге для Linux:
Итак, ключ здесь system.test, а выполняем команду who | wc -l, которая возвращает нам количество открытых сессий в системе. Добавляем (или раскомментируем данную строчку если уже есть), идем дальше.
- В Веб-консоли Zabbix создать новый элемент данных с ключом, который мы использовали, если брать пример выше, то это system.test.
Для этого нажимаем «Создать элемент данных»
и затем выставляем ключ такой же, как указали в конфиг-файле, а тип Zabbix агент:
- Перезагрузить Zabbix агента, чтобы изменения в конфиг-файле вступили в силу
Наблюдаем результат в последних данных:
Мониторинг SMART через UserParameter
Пример выше имеет мало практического применения, учитывая, что уже итак существует стандартный ключ system.users.num, который делает ровно тоже самое.
Так что теперь рассмотрим пример, который уже больше будет походить на реалистичный.
Если нам интересно мониторить момент, когда пора планово менять жесткие диски, то есть два варианта:
- Если диски за аппаратным RAID-контроллером, то, как правило, сами диски операционная система «не видит». Поэтому ищем способы как вытащить информацию о состоянии жестких дисков через утилиты или SNMP-сабагента, которые нам любезно предоставил(или не предоставил) производитель RAID-контроллера. Для каждой отдельной серии контроллеров свой путь до этой информации.
- Если речь идет о просто рабочих станциях, серверах с софтовом RAID и т.д., то тогда к дискам есть доступ из операционной системы, и мы вольны использовать различные утилиты для чтения их статуса. В случае Zabbix нам подходит утилита smartctl, из пакета SMARTMONTOOLS.
В Debian установка SMARTMONTOOLS сводится к:
и утилита готова к использованию.
Для каждого диска, который есть в системе сначала проверим, что SMART включен:
если вдруг SMART поддерживается диском, но выключен, то активируем его:
Теперь мы можем проверять статус SMART командой:
Именно эту команду мы и запишем в наш zabbix_agentd.conf:
где uHDD.health — ключ.
Мониторинг SMART через Flexible UserParameter
Тут возникает резонный вопрос, как быть если дисков два. Легче всего решить эту проблему поможет способность UserParameter передавать параметры агенту, про которую мы еще не упоминали. Но делается все очень просто, сразу пример:
В веб-интерфейсе Zabbix в ключе мы будем подставлять параметры в квадратные скобки вместо *. Например, для одного элемента данных мы напишем sda, а для другого sdb. В команде этот параметр найдет отражение там, где стоит переменная $1.
Создадим для второго диска элемент данных:
И через некоторое время сможем наблюдать результат в последних данных:
Мониторинг SMART через Flexible UserParameter c Low-level Discovery
Все получилось. Но тут возникает резонный вопрос, как быть если дисков не два, а двадцать два. И тут нам пригодится замечательная возможность низкоуровнего обнаружения (LLD), про которую мы уже говорили.
Низкоуровневое обнаружение позволяет системе мониторинга обнаруживать какое количество однотипных элементов присутствует на узле сети и динамически по шаблону создавать необходимые элементы данных, триггеры и графики для этих элементов. «Из коробки» системе доступна возможность находить файловые системы, сетевые интерфейсы и SNMP OID’ы. Однако, и здесь разработчики оставили возможность дополнить стандартные возможности, нужно просто передать в систему информацию о том, какие элементы обнаружены в формате JSON. Этим и воспользуемся.
Создадим маленький скрипт на perl, smartctl-disks-discovery.pl. Он будет находить все диски в системе и выводить эту информацию в JSON, передавая также информацию, включен ли у диска SMART или нет, а также попытается сам включить SMART, если он выключен:
При запуске скрипт выдает:
Теперь, для того чтобы скрипт автоматически запускался Zabbix’ом, просто добавим еще один UserParameter в zabbix_agentd.conf:
Покончив с настройкой конфига, переходим в веб-интерфейс, где создаем новое правило обнаружения для smartctl:
Обратите внимание на ключ и на фильтр, (<#SMART_ENABLED>=1) благодаря последнему будут добавляться только те обнаруженные диски, которые поддерживают SMART. Теперь мы можем переписать два наших элемента данных для дисков sda и sdb в один прототип элементов данных, просто заменив имя диска на макрос <#DISKNAME>:
Последнее, перед тем, как Zabbix сможет запускать команды, которые мы прописали в zabbix_agentd.conf из-под root и мониторить SMART, нужно добавить разрешения для его пользователя запускать эту команду без ввода пароля, для этого добавим в /etc/sudoers строчку:
Готовый шаблон для мониторинга SMART с остальными элементами данных, триггерами прикладываю, так же как и настроенный под него конфиг.
Контроль за установкой новых программ на Windows
Zabbix агент, установленный на Windows, точно также может быть расширен через UserParameter, только команды будут уже другие. Хотя, например, smartctl — кроссплатформенная утилита, и точно также можно ее использовать для контроля за жесткими дисками в Windows.
Кратко рассмотрим еще другой пример. Задача получать уведомление каждый раз, когда пользователь самостоятельно удаляет или устанавливает программы.
Для этого будем использовать наш vbs-скрипт:
Для его интеграции с Zabbix добавим UserParameter в конфиг-файл:
Добавим элемент данных в шаблон для Windows:
Добавим триггер:
и действие, которое будет отправлять e-mail уведомление:
Весь процесс мониторинга выглядит так: каждый час запускается скрипт Zabbix агентом, который сравнивает два списка программ: текущий и предыдущий. Затем скрипт выписывает все изменения в отдельный файл. Если же изменений нет, то в файл пишется 0x0
Содержимое файла уходит на Zabbix сервер, где поднимается триггер в случае, если значение элемента данных uDiffProgramms отлично от 0x0. Затем отдельное действие отправляет по почте уведомление со списком того, что было установлено или удалено на данном компьютере:
В итоге
UserParameter — отличная и простая возможность расширить функционал системы самостоятельно. Стоит упомянуть и альтернативы: zabbix_sender, который, например, подойдет для тех случаев, когда нужно отправлять данные в Zabbix не по расписанию, (как это делает UserParameter), а по какому-то событию; и system.run[], который похож на UserParameter, но удобнее тем, что не нужно вносить изменения во все конфиги агентов, достаточно просто добавить этот элемент данных в шаблон. Более того, в следующем крупном релизе Zabbix 2.2 нас ожидает еще один новый способ расширить возможности агента- это подключаемые модули. Ждем с нетерпением!
Вот так, считайте, что если вы можете узнать что-то о системе скриптом или командой, значит, вы всегда можете передать это в Zabbix.
Источник