У дадзеным артыкуле мы крыху пагаворым аб маніторынгу СХД IBM Storwize і іншых СХД, якія падтрымліваюць пратаколы CIM / WBEM. Неабходнасць такога маніторынгу пакінута за дужкамі, будзем лічыць гэта аксіёмай. У якасці сістэмы маніторынгу будзем выкарыстоўваць Zabbix.
У апошніх версіях Zabbix кампанія стала надаваць шаблонам значна больш увагі – сталі з'яўляцца шаблоны для маніторынгу сэрвісаў, СКБД, Servers hardware (IMM/iBMC) праз IPMI. Маніторынг СХД пакуль застаецца па-за шаблонамі са скрынкі, таму для інтэграцыі ў Zabbix інфармацыі аб статусе і прадукцыйнасці кампанентаў СХД трэба выкарыстоўваць кастомныя шаблоны. Адзін з такіх шаблонаў я прапаную вашай увазе.
Спачатку крыху тэорыі.
Для доступу да статуту і статыстыцы СХД IBM Storwize можна выкарыстоўваць:
Пратаколы CIM/WBEM;
RESTful API (у IBM Storwize падтрымліваецца, пачынальна з ПА версіі 8.1.3);
SNMP Traps (абмежаваны набор trap'аў, няма статыстыкі);
Якія цікавяцца могуць падрабязней азнаёміцца з рознымі метадамі маніторынгу ў адпаведных раздзелах вендорскай дакументацыі, а таксама ў дакуменце IBM Spectrum Virtualize scripting.
WBEM працуе па-над пратаколам HTTP. Праз WBEM можна працаваць не толькі з СГД, але і з HBA, камутатарамі і істужачнымі бібліятэкамі.
Згодна з SMI Architecture и Determine Infrastructure, Асноўным кампанентам рэалізацыі SMI з'яўляецца WBEM-сервер, які апрацоўвае CIM-XML запыты ад WBEM-кліентаў (у нашым выпадку – ад скрыптоў маніторынгу):
CIM – аб'ектна-арыентаваная мадэль, заснаваная на Unified Modeling Language (UML).
Кіраваныя элементы вызначаюцца ў выглядзе CIM-класаў, у якіх ёсць уласцівасці і метады для падання кіраваных дадзеных і функцый.
Згодна з www.snia.org/pywbem, для доступу да СХД праз CIM/WBEM можна выкарыстоўваць PyWBEM — open source бібліятэку, напісаную на Python, і якая забяспечвае распрацоўнікам і сістэмным адміністратарам рэалізацыю пратаколу CIM для доступу да CIM-аб'ектаў і правядзенні розных аперацый з WBEM-серверам, якія працуюць паводле SMI-S ці іншым CIM-спецыфікацыям.
Для злучэння з WBEM-серверам выкарыстоўваем канструктар класа WBEMConnection:
Гэта віртуальнае злучэнне, паколькі CIM-XML/WBEM працуе па-над HTTP, рэальнае злучэнне адбываецца ў момант выкліку метадаў для асобніка класа WBEMConnection. У адпаведнасці з IBM System Storage SAN Volume Controller і Storwize V7000 Best Practices and Performance Guidelines (Example C-8, стар. 412), у якасці CIM namespace для СХД IBM Storwize будзем выкарыстоўваць "root/ibm".
Звярніце ўвагу, што для збору статыстыкі па пратаколе CIM-XML/WBEM неабходна ўключыць карыстальніка ў адпаведную групу бяспекі. У адваротным выпадку пры выкананні WBEM-запытаў, вывад атрыбутаў экзэмпляра класа будзе пустым..
Для доступу да статыстыкі СГД карыстальнік, пад якім ажыццяўляецца выклік канструктара WBEMConnection(), павінен валодаць правамі па меншай меры 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 і 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)
Для атрымання значэнняў параметраў СГД прызначаны метад EnumerateInstances() класа WBEMConnection, які вяртае спіс асобнікаў CIMInstance().
Прыклад:
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, поўны запыт усіх асобнікаў можа быць даволі павольным. Ён можа генераваць вялікія аб'ёмы дадзеных, якія павінны быць падрыхтаваны СГД, перададзены па сетцы і апрацаваны скрыптам. На такі выпадак ёсць метад ExecQuery(), які дазваляе атрымаць толькі якія цікавяць нас уласцівасці асобніка класа. Гэты метад мяркуе выкарыстанне мовы запытаў, падобнага 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 – BackVTS.
Для атрымання статыстыкі СХД па Volumes, неабходна ў якасці значэння параметра ClassName паказаць IBMTSSVC_StorageVolumeStatistics. Неабходныя для збору статыстыкі ўласцівасці класа IBMTSSVC_StorageVolumeStatistics можна паглядзець у Node Statistics.
Таксама для аналізу прадукцыйнасці можна выкарыстоўваць класы IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Для запісу дадзеных у сістэму маніторынгу будзем выкарыстоўваць механізм zabbix traps, рэалізаваны на python у модулі py-zabbix. Структуру класаў СХД і іх уласцівасцяў размесцім у слоўніку ў фармаце JSON.
Загружаем шаблон на сервер Zabbix, пераконваемся, што з сервера маніторынгу ёсць доступ да СХД па пратаколе WEB (TCP/5989), размяшчаем канфігурацыйныя файлы, скрыпты выяўлення і маніторынгу на серверы маніторынгу. Далей дадаем у планавальнік запуск скрыптоў. У выніку: мы выяўляем аб'екты СХД (масівы, фізічныя і віртуальныя дыскі, enclosures і шматлікае іншае), перадаем іх у Zabbix discoveries, счытваем статут іх параметраў, счытваем статыстыку прадукцыйнасці (perfomance counters), перадаем усё гэта ў якія адпавядаюць Zabbix Items.
Шаблон Zabbix, python-скрыпты, структуру класаў СХД і іх уласцівасцяў, а таксама прыклады канфігурацыйных файлаў, можна знайсці тут.