Голь на выдумки хитра

в 11:28, , рубрики: ESXi, nagios, raid, windows, Песочница, метки: , , ,

Большинство администраторов знает, что для сохранности своего времени, нервов и данных пользователей необходимо использовать RAID массивы. Однако их использование оправдано только в случае, если существует адекватная система мониторинга.
В случае если используется полноценная операционная система, проблем, как правило, не возникает: драйвера и программное обеспечение для получения информации от RAID-контроллера обычно есть.

Но в случае использования ESXi сервера без дополнительной обвязки в виде vCenter, получение информации от контроллеров может быть не совсем тривиальным.

Во-первых, ESXi это не полноценная операционная система, соответственно, мы ограничены в выборе ПО, которое можем установить на него. Теоретически возможна установка дополнительных библиотек на сервер, что даст возможность запускать cli интерфейс для управления контроллером. Но это решение плохо тем, что надо вмешиваться в структуру системы, что может привести к плохо предсказуемым последствиям, кроме того не дает решения основной задачи — получение интерфейса для автоматического мониторинга.

Для решения нашей задачи можно использовать предоставляемый с ESXi CIM сервер. В этом случае нам понадобятся: драйвер с поддержкой CIM, CIM провайдер для VMware и ПО, способное общаться с этим CIM сервером.

Итак, у нас есть — Nagios, Nagios клиент на Windows системе и ESXi.

Сама по себе установка драйверов на ESXi, как правило, не вызывает проблем: необходимо только закачать vib пакет на сервер и установить его, используя esxcli или esxupdate, как и любой другой vib пакет. Разумеется, что перед этим необходимо выключить все гостевые системы и перевести ESXi в maintenance mode.

Самое интересное начинается потом – при загрузке сервера обнаруживается, что наш datastore больше не подключен к хосту. Для подключения datastore в ESXi 5 достаточно добавить его в список через оснастку VMware клиента с сохранением UUID, для версии ESXi 4.1 придется немного поработать в консоли.
Сначала просмотреть список доступных томов:
esxcfg-volume -l
Затем смонтировать необходимый нам том, ключ –M указывает на то что мы хотим смонитровать том перманентно:
esxcfg-volume -M <VMFS UUID>

Далее необходимо установить cim пакет для нужного рейд контроллера. (Тут следует учитывать тот факт, что производители RAID контроллеров не очень любят своих пользователей. Например, инструкции по установке ПО могут находиться на странице загрузки старого драйвера, а новый лежит в новой части сайта.) После чего можно последний раз перезагрузить хост и вывести его из maintenance режима.

Еще одна неприятная особенность использования CIM провайдера от Adaptec является то что в процессе эксплуатации провайдер активно пишет в /var/log/adcconf.log, по этому поводу придется озаботится ротацией лога. Т.к. информация в логе нужна только для отладки ротацию будем осуществлять быструю и беспощадную:

  1. Изменить файл /var/spool/cron/crontabs/root, добавить в конец строку:
    */05 * * * * /vmfs/volumes/4ef49f1a-b2abe2ec-32c6-00123t13a19e2/arcconf_del.sh
  2. Изменить файл /etc/rc.local добавить туда, это нужно для того чтобы измениня в cron сохранились после перезагрузки:
    /bin/kill $(cat /var/run/crond.pid)
    /bin/echo '*/05 * * * * /vmfs/volumes/4ef49f1a-b2ааabe2ec-32c6-001b213a19e2/arcconf_del.sh' >> /var/spool/cron/crontabs/root
    /bin/busybox crond
  3. Создать файл /vmfs/volumes/4ef49f1a-b2abe2ecаа-32c6-001b213a19e2/arcconf_del.sh:
    #!/bin/sh
    rm -f /var/log/arcconf.log
  4. Изменить разрешения для запуска файла: chmod +x /vmfs/volumes/4ef49f1a-b2abe2ec-32c6-001b213a19eрр2/arcconf_del.sh
  5. Проверить что файл с логом удаляется каждые 5 минут.

Закрываем SSH, открываем CIM сервер для доступа из виртуальной машины в свойствах сетевого экрана.

Далее внутри виртуальной машины настраиваем ПО для получения данных о RAID-контроллере. Тут есть одна интересная особенность данного типа ПО. Обработать спецсимволы, а в некоторых случаях и отдельные буквы, оно не в состоянии, не спасает даже экранирование кавычками. Например, Adaptec arcconf не поддерживает символы Y, E и K в пароле пользователя (в версии 18856 обещали исправить, но у нас эта ошибка так и осталась).

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

Теперь необходимо решить вопрос с тем, чтобы понять и передать данные с контроллера на сервер мониторинга. Для Windows NSClient++ есть скрипт exchange.nagios.org/directory/Plugins/Hardware/Storage-Systems/RAID-Controllers/Windows-nrpe-3A-Check-Raid-adaptec-AAC/details

Однако он позволяет работать только c одним массивом, а в том виде как он есть – только с одним контроллером, поэтому мы используем следующий скрипт на PowerShell:

	$outputPath = 'C:Program Files (x86)NagiosscriptsMegaSAS.log'
 
	Set-Content $outputPath "";

 	$raidCLI = 'C:Program Files (x86)CLI_Win_8.04.07megacli64.exe'
 
	$raidArgs = '-LDInfo -Lall -aALL’

	$shiftString = 5
 
	$searchPattern = "Virtual Drive:"

 	Start-Process -FilePath $raidCLI -ArgumentList $raidArgs -Wait

	$arcconfOutput = Get-Content -Path $outputPath

 	$logicalDevices = Select-String -Path $outputPath -Pattern $searchPattern;

 	$healthCheckIndex = 0;

 	foreach($logicalDevice in $logicalDevices)
	{
	 $deviceState = $logicalDevice.get_linenumber();
	 $deviceStatus = $arcconfOutput.Get($deviceState+$shiftString);
	 if($deviceStatus -match "/?Optimal")
		{
 	 		$healthCheckIndex = $healthCheckIndex+1;
 		}
	}
	if($healthCheckIndex -lt $logicalDevices.Count)
	{
 		Write-Host "CRITICAL: Logical Device state failed";
	}
	if($healthCheckIndex -eq $logicalDevices.Count)
	{
		Write-Host "OK: All logical devices works fine";
	}
	else
	{
		Write-Host "Unknown: Error occured";
	}

В такой схеме мы получаем статусы всех контроллеров вне зависимости от того какой тип ПО для контроля мы используем – Adaptec, LSI или что-то еще. LSI по умолчанию складывает данные в файл в директории где запускается скрипт, для Adaptec к списку команд необходимо будет добавить вывод в файл.

Как уже в дальнейшем реагировать на инцидент – вопрос планирования. Можно и просто уведомления слать, а можно автоматизировать переход на резервный сервер. Тут все зависит от архитектуры инфраструктуры, которая обслуживается администратором. Ну и от продвинутости рук.

Автор: ofis24

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js