I denna artikel kommer vi att diskutera övervakning av IBM Storwize och andra lagringssystem som stödjer CIM/WBEM-protokollen. Behovet av sÄdan övervakning lÀmnas osagt, vi antar att detta Àr en axiom. Vi kommer att anvÀnda Zabbix som övervakningssystem.
I de senaste versionerna av Zabbix har företaget lagt mycket mer vikt vid mallarna â det har dykt upp mallar för övervakning av tjĂ€nster, databashanterare och servers hĂ„rdvara (IMM/iBMC) via IPMI. Ăvervakning av lagringssystem Ă€r fortfarande utanför standardmallarna, sĂ„ för att integrera information om status och prestanda för lagringssystemskomponenter i Zabbix mĂ„ste man anvĂ€nda anpassade mallar. En sĂ„dan mall erbjuder jag er.
Först lite teori.
För att fÄ tillgÄng till status och statistik för IBM Storwize kan man anvÀnda:
- CIM/WBEM-protokoll;
- (stöds av IBM Storwize frÄn mjukvaruversion 8.1.3);
- SNMP Traps (begrÀnsad uppsÀttning traps, ingen statistik);
- Anslutning via SSH följt av fjÀrrÄtkomst .
Intresserade kan lÀsa mer om olika övervakningsmetoder i relevanta avsnitt av leverantörens dokumentation, samt i dokumentet .
Vi kommer att anvĂ€nda CIM/WBEM-protokoll, som möjliggör Ă„tkomst till lagringssystemets driftparametrar utan betydande Ă€ndringar av mjukvaran för olika lagringssystem. CIM/WBEM-protokoll fungerar enligt . Storage Management Initiative â Specification Ă€r baserad pĂ„ öppna standarder och , definierade av .
WBEM fungerar över HTTP-protokollet. Genom WBEM kan man arbeta inte bara med lagringssystem utan Àven med HBA, switchar och bibliotek för bandlagring.
Enligt och , Ă€r den grundlĂ€ggande komponenten för implementeringen av SMI WBEM-servern, som hanterar CIM-XML-förfrĂ„gningar frĂ„n WBEM-klienter (i vĂ„rt fall â frĂ„n övervakningsskript):

CIM Àr en objektorienterad modell baserad pÄ Unified Modeling Language (UML).
De hanterade elementen definieras som CIM-klasser som har egenskaper och metoder för att representera hanterade data och funktioner.
Enligt , för att fĂ„ Ă„tkomst till lagringssystemet via CIM/WBEM kan man anvĂ€nda PyWBEM â ett open source-bibliotek skrivet i Python, vilket ger utvecklare och systemadministratörer möjlighet att implementera CIM-protokollet för att fĂ„ Ă„tkomst till CIM-objekt och utföra olika operationer med WBEM-servern som arbetar enligt SMI-S eller andra CIM-specifikationer.
För att ansluta till WBEM-servern anvÀnder vi klassens konstruktor :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
Detta Àr en virtuell anslutning eftersom CIM-XML/WBEM fungerar över HTTP; den verkliga anslutningen sker vid anrop av metoder för instansen av klassen WBEMConnection. I enlighet med IBM System Storage SAN Volume Controller och Storwize V7000 Best Practices and Performance Guidelines (Exempel C-8, s. 412), kommer vi att anvÀnda "root/ibm" som CIM-namnrymd för IBM Storwize-lagringssystem.
Observera att för att samla statistik via CIM-XML/WBEM mÄste anvÀndaren ingÄ i lÀmplig sÀkerhetsgrupp. Annars, vid utförande av WBEM-förfrÄgningar, kommer attribututsignalen för klassinstansen att vara tom..
För att fÄ Ätkomst till statistiken för lagringssystemet mÄste anvÀndaren som anropar konstruktorn , ha rÀttigheter minst som RestrictedAdmin (finns för code_level > 7.8.0) eller Administrator (inte rekommenderat av sÀkerhetsskÀl).
Anslut till lagringssystemet via SSH och kolla gruppnumren:
> 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
LÀgg till anvÀndaren zabbix i rÀtt grupp:
> chuser -usergrp 5 zabbix
Dessutom, enligt IBM System Storage SAN Volume Controller och Storwize V7000 Best Practices and Performance Guidelines (s. 415) Àr det nödvÀndigt att aktivera insamling av statistik pÄ lagringssystemet. SÄ, för att samla statistik varje minut:
> startstats -interval 1
Kontrollerar:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
För att fÄ alla befintliga klasser av lagringssystemet, anvÀnd metoden EnumerateClassNames().
Exempel:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
För att fÄ vÀrden pÄ lagringssystemets parametrar finns metoden för klassen WBEMConnection, som returnerar en lista av instanser .
Exempel:
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))
För vissa klasser som innehĂ„ller mĂ„nga instanser, sĂ„som IBMTSSVC_StorageVolume, kan en fullstĂ€ndig förfrĂ„gan av alla instanser vara ganska lĂ„ngsam. Den kan generera stora datamĂ€ngder som mĂ„ste förberedas av Lagringssystemet, överföras över nĂ€tverket och bearbetas av skriptet. I sĂ„dana fall finns det en metod , som möjliggör att endast hĂ€mta de egenskaper hos klassinstanserna som vi Ă€r intresserade av. Denna metod förutsĂ€tter anvĂ€ndning av en frĂ„gesprĂ„k som liknar SQL â antingen CIM Query Language (DMTF:CQL) eller WBEM Query Language (WQL), för att frĂ„ga CIM-objekt i Lagringssystemet:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
För att faststÀlla vilka klasser vi behöver för att hÀmta egenskaperna för Lagringssystemets objekt lÀser vi dokumentationen, till exempel .
SĂ„ för att hĂ€mta parametrar (inte prestationsrĂ€knare) för fysiska diskar (Disk Drives) kommer vi att frĂ„ga klass IBMTSSVC_DiskDrive, för att hĂ€mta parametrar för Volumes â klass IBMTSSVC_StorageVolume, för att hĂ€mta parametrar för array â klass IBMTSSVC_Array, för att hĂ€mta parametrar för MDisks â klass IBMTSSVC_BackendVolume etc.
För att lĂ€sa om prestanda kan man kolla pĂ„ (specifikt â ) och IBM System Storage SAN Volume Controller och Storwize V7000 BĂ€sta praxis och prestationsriktlinjer (Exempel C-11, s. 415).
För att fÄ statistik över Lagringssystemet för Volumes, Àr det nödvÀndigt att ange IBMTSSVC_StorageVolumeStatistics som vÀrde för parameter ClassName. De egenskaper hos klassen IBMTSSVC_StorageVolumeStatistics som behövs för att samla statistik kan ses i .
Dessutom kan klasserna IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics anvÀndas för prestationsanalys.
För att skriva data till övervakningssystemet kommer vi att anvÀnda mekanismen , implementerad i python i modulen . Vi kommer att organisera strukturen av klasser för Lagringssystemet och deras egenskaper i en ordbok i JSON-format.
Laddar upp en mall till Zabbix-servern, sÀkerstÀller att det finns Ätkomst till lagringssystemet via WEB-protokollet (TCP/5989) frÄn övervakningsservern, placerar konfigurationsfiler, upptÀckts- och övervakningsskript pÄ övervakningsservern. DÀrefter lÀgger vi till skriptupplÀgg i schemalÀggaren. Slutresultatet: vi upptÀcker objekt i lagringssystemet (arrayer, fysiska och virtuella diskar, inneslutningar och mycket mer), överför dem till Zabbix-uppdagningar, lÀser av status för deras parametrar, lÀser av prestandastatistik (prestanda rÀknare) och överför allt detta till motsvarande Zabbix-objekt i vÄr mall.
Zabbix-mall, python-skript, strukturen för lagringssystemsklasser och deras egenskaper, samt exempel pÄ konfigurationsfiler kan .
KĂ€lla: habr.com
