В тази статия ще обсъдим наблюдението на СХД IBM Storwize и други СХД, поддържащи протоколите CIM/WBEM. Необходимостта от такова наблюдение оставяме извън обсъждане, ще приемем това за аксиома. Като система за наблюдение ще използваме Zabbix.
В последните версии на Zabbix компанията започна да обръща много повече внимание на шаблоните — започнаха да се появяват шаблони за наблюдение на услуги, СУБД, сървърно оборудване (IMM/iBMC) чрез IPMI. Наблюдението на СХД все още остава извън предварително дефинираните шаблони, затова за интеграция в Zabbix на информацията за статус и производителност на компонентите на СХД е необходимо да се използват персонализирани шаблони. Един от тези шаблони предлагам на вашето внимание.
Първо малко теория.
За достъп до статус и статистика на СХД IBM Storwize можете да използвате:
- Протоколите CIM/WBEM;
- (в IBM Storwize е поддържан, започвайки от версия на софтуера 8.1.3);
- SNMP Traps (ограничен набор от trap'ове, без статистика);
- Свързване по SSH с последваща отдалечена .
Интересуващите се могат да се запознаят по-подробно с различните методи за наблюдение в съответните раздели на документацията на вендора, а също и в документа .
Ще използваме протоколите CIM/WBEM, които позволяват получаване на параметри за работа на СХД без значителни промени в софтуера за различни СХД. Протоколите CIM/WBEM работят в съответствие с . Storage Management Initiative – спецификацията е основана на отворени стандарти и , определяни от .
WBEM работи на основата на протокола HTTP. Чрез WBEM можете да работите не само с СХД, но и с HBA, комутатори и лентови библиотеки.
Според и , основният компонент на реализиране на SMI е WBEM-сервер, обработващ CIM-XML заявки от WBEM-клиенти (в нашия случай — от скриптове за наблюдение):

CIM — обектно-ориентирана модел, основан на Unified Modeling Language (UML).
Управляемите елементи се определят под формата на CIM-класове, които имат свойства и методи за представяне на управляеми данни и функции.
Според , за достъп до СХД чрез CIM/WBEM може да се използва PyWBEM — open source библиотека, написана на Python, която осигурява на разработчиците и системните администратори имплементация на протокола CIM за достъп до CIM-обекти и извършване на различни операции с WBEM-сървър, работещ според SMI-S или други CIM-спецификации.
За свързване с WBEM-сървъра използваме конструктора на класа :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
Това е виртуално свързване, тъй като CIM-XML/WBEM работи над HTTP, действителното свързване се осъществява при извикване на методите на класа WBEMConnection. В съответствие с IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Пример C-8, стр. 412), за CIM namespace на СХД IBM Storwize ще използваме „root/ibm“.
Обърнете внимание, че за събиране на статистика по протокола CIM-XML/WBEM, е необходимо да се включи потребителят в съответната група за сигурност. В противен случай при изпълнение на WBEM-запроси, извода на атрибутите от класа ще бъде празно..
За достъп до статистиката на СХД потребителят, под който ще извършва конструктора , трябва да притежава права поне RestrictedAdmin (налични за code_level > 7.8.0) или Administrator (не препоръчвам по съображения за сигурност).
Свързваме се с СХД чрез SSH и разглеждаме номера на групите:
> lsusergrp
id name role remote
0 SecurityAdmin SecurityAdmin no
1 Administrator Administrator no
2 CopyOperator CopyOperator no
3 Service Service no
4 Monitor Monitor no
5 RestrictedAdmin RestrictedAdmin no
Добавяме потребителя zabbix в необходимата група:
> chuser -usergrp 5 zabbix
Освен това, в съответствие с IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (стр. 415), е необходимо да се включи събиране на статистика на СХД. Така, за събиране на статистика всяка минута:
> startstats -interval 1
Проверяваме:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
За да получим всички съществуващи класове на СХД, е необходимо да използваме метода EnumerateClassNames().
Пример:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
За получаване на стойностите на параметрите на СХД е предназначен методът на класа WBEMConnection, който връща списък с экземпляри .
Пример:
instances = conn.EnumerateInstances(classname,
namespace=nd_parameters['name_space'])
for instance in instances:
for prop_name, prop_value in instance.items():
print(' %s: %r' % (prop_name, prop_value))
За някои класове, съдържащи голям брой инстанции, като IBMTSSVC_StorageVolume, пълното запитване на всички инстанции може да бъде доста бавно. То може да генерира големи обеми данни, които трябва да бъдат подготовени от СХД, предадени по мрежата и обработени от скрипт. В такъв случай съществува метод , който позволява да получим само интересуващите ни свойства на инстанцията на класа. Този метод предполага използването на език за запитвания, подобен на SQL — или CIM Query Language (DMTF:CQL), или WBEM Query Language (WQL), за запитване на CIM-обекти на СХД:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
За да определим кои класове са ни необходими за получаване на параметрите на обектите на СХД, прочитаме документацията, например .
Така, за да получим параметрите (не бройчетата за производителност) на физическите дискове (Disk Drives), ще запитваме Class IBMTSSVC_DiskDrive; за получаване на параметри на Volumes — Class IBMTSSVC_StorageVolume; за получаване на параметри на масиви — Class IBMTSSVC_Array; за получаване на параметри на MDisks — Class IBMTSSVC_BackendVolume и т.н.
За производителността може да се прочете (конкретно — ) и IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Example C-11, стр. 415).
За получаване на статистиката на СХД по Volumes, е необходимо като стойност на параметъра ClassName да посочим IBMTSSVC_StorageVolumeStatistics. Необходимите за събиране на статистика свойства на класа IBMTSSVC_StorageVolumeStatistics могат да се видят в .
Също така за анализ на производителността могат да се използват класовете IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
За запис на данни в системата за мониторинг ще използваме механизма , реализиран на python в модула . Структурата на класовете на СХД и техните свойства ще разположим в речник във формат JSON.
Качим шаблон на сървъра Zabbix, уверяваме се, че съществува достъп до СХД от сървъра за мониторинг по протокол WEB (TCP/5989), разполагаме конфигурационни файлове, скриптове за откриване и мониторинг на сървъра за мониторинг. След това добавяме в планировчика стартиране на скриптове. В резултат: откриваме обекти на СХД (массиви, физически и виртуални дискове, enclosures и много други), предаваме ги към откритията в Zabbix, считаме статуса на техните параметри, считаме статистика за производителността (performance counters) и предаваме всичко това на съответните Zabbix Items на нашия шаблон.
Шаблон Zabbix, python-скриптове, структура на класовете на СХД и техните свойства, както и примери за конфигурационни файлове, могат .
Източник: habr.com
