Добрый день, форумчане. Помогите советом. Есть хранилище HP ProLiant DL360 Gen9 , которое мониторится с помощью zabbix 5.0.3 как по SNMP, так и по IPMI. Параметры температуры, вентиляторов, блоков питания, ОЗУ и т.п. получаю без проблем. Но ни один из протоколов не даёт информацию по HDD. А при подключении к серверу по iLo, вкладка Storage выдаёт такую надпись "There are no drives available in this system." Может кто сталкивался с такой проблемой? (Прошивка iLo не решила проблему)
Ad Widget
Collapse
HP ProLiant DL360 Gen9 (не отдаёт информацию о HDD)
Collapse
X
-
Есть два пути.
1.
Установите HP Insight Management WBEM Providers https://support.hpe.com/hpsc/swd/pub...471baddb6eadfe
Далее вы получаете доступ к пространству имён WMI в котором содержится информация о состоянии дисков, массива, датчиков и пр. Я писал скрипт для получения информации очень давно, когда ещё не было команды wmigetall. Поэтому подучал все параметры через утилиту WMIC.
Ниже работающий скрипт выдающий OK или же номер сбойного диска и его состояние. На вход он получает имя требуемого параметра. Скрипт не рассчитан на все случаи жизни. У меня были простые конфигурации с одним RAID контролером. Наверное можно не использовать ExternalParameters, а получать всю информацию через wmigetall, а затем через предобработку вытаскивать нужное.
echo off
rem Version 3.0
set class=%1
SetLocal EnableExtensions EnableDelayedExpansion
set status=
set Exist=false
set LIST=
set numerr=0
rem Возвращает OK или состояние и номер(а) сбойного диска(ов) Если RAID контролер в состоянии 6 (ошибка), состояние диcков недоступно, поле будет пустое
rem Описание статусов - взять из описания HP
IF %class%==HP_Diskdrive (
for /F "tokens=1-4* delims={,} " %%i in ('WMIC /Namespace:\\root\hpq path HPSA_Diskdrive get ElementName^,OperationalStatus ^|FIND "Port"') do (
set Exist=true
if %%l NEQ 2 (
set numerr=1
if %%l==5 set status=Predictive Failure
if %%l==6 set status=Error
set LIST=!LIST!%%j %%k !status!
)
)
IF !Exist!==true (
IF !numerr!==0 (
set LIST=OK
rem echo !LIST! !Exist! !numerr!
)
)
)
rem Просто выводим статус RAID контроллера и преобразовываем значения в статус через zabbix
rem Описание статусов - взять из описания HP
IF %class%==HP_RAID (
for /F "tokens=1,2 delims={} " %%i in ('WMIC /Namespace:\\root\hpq path HPSA_Arraysystem get OperationalStatus ^,CreationClassName ^|FIND "HPSA"') do (
set Exist=true
if %%j NEQ 2 (
set numerr=1
if %%j==3 set status=Degrade
if %%j==6 set status=Error
set LIST=!status!
rem Удаляем кавычки
rem set LIST=!LIST:"=!
)
)
IF !Exist!==true (
IF !numerr!==0 (
set LIST=OK
)
)
)
IF %class%==HP_Fan (
for /F "tokens=1-3* delims={} " %%i in ('WMIC /Namespace:\\root\hpq path HP_Fan get Name^, OperationalStatus ^|FIND "Fan"') do (
set Exist=true
if %%k NEQ 2 (
set numerr=1
set LIST=!LIST!%%i %%j %%l
)
)
IF !Exist!==true (
IF !numerr!==0 (
set LIST=OK
)
)
)
rem Возвращает OK или температуру и номер(а) температурного датчика(ов) превысившего установленные предельные значения
IF %class%==HP_NumericSensor (
for /F "tokens=1-5 delims={} " %%i in ('WMIC /Namespace:\\root\hpq path HP_NumericSensor get Name^,CurrentState^,OperationalStatus^|FIND "Sensor"') do (
set Exist=true
if %%m NEQ 2 (
set numerr=1
set LIST=!LIST! %%l-%%i
)
)
IF !Exist!==true (
IF !numerr!==0 (
set LIST=OK
)
)
)
rem echo %Exist%
IF %Exist%==true (
echo %LIST%
) ELSE (@echo Bad parameter)
EndLocal
exit
2. Использовать возможности командной строки утилиты для RAID контроллера типа SSACLI. Например в серверах G10 первый путь недоступен. Вот пример обнаружения:
SetLocal EnableExtensions EnableDelayedExpansion
set LIST=[
set LISTC=[
set LISTA=
set LISTD=
IF %1==discovery (
rem For discovery. First parameter - discovery, second parameter - contr, array, disk
for /F "tokens=1-9*" %%a in ('C:\zabbix\script\ssacli.exe controller all show') do (
set CONTRNAME=%%a %%b %%c %%d
set CONTRADDR=%%i
set LISTC=!LISTC!{"{#CONTRNAME}":"%%a %%b %%c %%d","{#CONTRADDR}":"%%i"},
for /F "tokens=1-2*" %%k in ('C:\zabbix\script\ssacli.exe controller slot^=%%i array all show ^| FINDSTR /C:" Array"') do (
set ARRNAME=%%k %%l
set ARRADDR=%%l
set LISTA=!LISTA!{"{#CONTRNAME}":"!CONTRNAME!","{#CONT RADDR}":"!CONTRADDR!","{#ARRNAME}":"%%k %%l","{#ARRADDR}":"%%l"},
for /F "tokens=1-6* delims=,() " %%A in ('C:\zabbix\script\ssacli.exe controller slot^=%%i array %%l physicaldrive all show ^| FINDSTR " physicaldrive"') do (
set LISTD=!LISTD!{"{#CONTRNAME}":"!CONTRNAME!","{#CONT RADDR}":"!CONTRADDR!","{#ARRNAME}":"!ARRNAME!","{# ARRADDR}":"!ARRADDR!","{#DISKNAME}":"HDD %%C %%D %%E %%F","{#DISKADDR}":"%%B"},
)
)
)
if %2==contr (echo !LISTC:~0,-1!])
if %2==array (echo [!LISTA:~0,-1!])
if %2==disk (echo [!LISTD:~0,-1!])
)Last edited by Victor Sklyarov; 07-12-2020, 17:13. -
Скрипт рабочий, стоит более чем на 2000 северах. Если вы копируете текст с сайта, вставьте его в Notepad++ и проверьте кодировку и отсутствие всяких лишних символов. Как известно все bat файлы работают в кодировке OEM 866. Выполните на сервере просто команду WMIC /Namespace:\\root\hpq path HPSA_Diskdrive get ElementName,OperationalStatus или любую из скрипта, вызывающую WMIC. Если она не работает, то это значит, что у вас либо WBEM не установлен, либо не прописан путь к WMIC, либо вообще WMI не работает, что тоже бывает. И только когда вы добьётесь получения данных от WMI можно пробовать тестировать через zabbix_get, но сначала в конфиге агента прописать UserParameter=hpserver[*], c:\zabbix\scripts\server.bat $1, где sever.bat, имя скрипта, на ваше усмотрение, место его расположения тоже на ваше усмотрение, имя параметра hpserver- на ваше усмотрение. Далее проверяем прямо на сервере в командной строке zabbix_get -s 127.0.0.1 -k hpserver[HP_RAID] Имена передаваемых в скрипт параметров видны в скрипте в командах IF %class%==Last edited by Victor Sklyarov; 10-12-2020, 10:26.Comment
Comment