I denne artikel vil vi kort diskutere overvågning af IBM Storwize SAN og andre SAN'er, der understøtter CIM/WBEM-protokoller. Behovet for sådan overvågning vil vi antage som en axiom. Vi vil bruge Zabbix som overvågningssystem.
I de seneste versioner af Zabbix er virksomheden blevet meget mere opmærksom på skabeloner — der er kommet skabeloner til overvågning af tjenester, databasesystemer, serverhardware (IMM/iBMC) via IPMI. Overvågning af SAN'er er endnu ikke en del af de indbyggede skabeloner, så for at integrere status og ydeevne fra SAN-komponenter i Zabbix skal der anvendes brugerdefinerede skabeloner. En af disse skabeloner præsenterer jeg for dig.
Først lidt teori.
For at få adgang til status og statistik fra IBM Storwize SAN kan man bruge:
- CIM/WBEM-protokoller;
- (understøttes i IBM Storwize fra softwareversion 8.1.3);
- SNMP Traps (begrænset sæt af traps, ingen statistik);
- SSH-forbindelse med efterfølgende fjernadgang .
Interesserede kan finde ud af mere om de forskellige overvågningsmetoder i de relevante sektioner af leverandørens dokumentation samt i dokumentet .
Vi vil bruge CIM/WBEM-protokoller, der muliggør indhentning af SAN'ens driftsparametre uden væsentlige ændringer af softwaren for forskellige SAN'er. CIM/WBEM-protokoller fungerer i overensstemmelse med . Storage Management Initiative – Specification er baseret på åbne standarder og , defineret af .
WBEM fungerer oven på HTTP-protokollen. Gennem WBEM kan man arbejde ikke kun med SAN'er, men også med HBA'er, switche og båndbiblioteker.
Ifølge og , den vigtigste komponent i implementeringen af SMI er en WBEM-server, der behandler CIM-XML-anmodninger fra WBEM-klienter (i vores tilfælde – fra overvågningsscripts):

CIM er en objektorienteret model baseret på Unified Modeling Language (UML).
De administrerede elementer defineres i form af CIM-klasser, som har egenskaber og metoder til at repræsentere administrerede data og funktioner.
Ifølge , for at få adgang til SAN-lagring gennem CIM/WBEM kan man bruge PyWBEM - et open source-bibliotek skrevet i Python, der giver udviklere og systemadministratorer mulighed for at implementere CIM-protokollen til adgang til CIM-objekter og udføre forskellige operationer med en WBEM-server, der fungerer i overensstemmelse med SMI-S eller andre CIM-specifikationer.
For at oprette forbindelse til WBEM-serveren bruger vi klassens konstruktør :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
Dette er en virtuel forbindelse, da CIM-XML/WBEM fungerer over HTTP; den faktiske forbindelse sker, når metoder til instansklassen WBEMConnection kaldes. I henhold til IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (Eksempel C-8, s. 412), vil vi bruge «root/ibm» som CIM-namespace for IBM Storwize SAN.
Bemærk, at for at indsamle statistik via CIM-XML/WBEM skal brugeren inkluderes i den relevante sikkerhedsgruppe. Ellers vil output af attributter for instansklassen være tomt, når WBEM-forespørgsler udføres..
For at få adgang til statistik fra SAN-lagring skal brugeren, der inviterer konstruktøren , have rettigheder på mindst RestrictedAdmin (tilgængelig for code_level > 7.8.0) eller Administrator (jeg anbefaler ikke dette af sikkerhedsmæssige årsager).
Vi opretter forbindelse til SAN-lagringen via SSH og ser gruppe-ID'erne:
> 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
Vi tilføjer brugeren zabbix til den ønskede gruppe:
> chuser -usergrp 5 zabbix
Derudover, ifølge IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (s. 415), skal indsamlingen af statistik aktiveres på SAN-lagringen. For at indsamle statistik hvert minut:
> startstats -interval 1
Vi tjekker:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
For at få alle eksisterende klasser af SAN-lagring skal metoden EnumerateClassNames() bruges.
Eksempel:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
For at hente værdier for SAN-lagringsparametre bruges metoden af klassen WBEMConnection, der returnerer en liste af instanser .
Eksempel:
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))
For certain classes that contain a large number of instances, such as IBMTSSVC_StorageVolume, retrieving all instances can be quite slow. It can generate large volumes of data that need to be prepared by the storage system, transmitted over the network, and processed by the script. In this case, there is a method , which allows us to obtain only the properties of the class instance that interest us. This method requires the use of a query language similar to SQL — either CIM Query Language (DMTF:CQL) or WBEM Query Language (WQL) — to query CIM objects in the storage system:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
To determine which classes we need to retrieve the parameters of storage objects, we refer to the documentation, for example, .
Thus, to obtain parameters (not performance counters) for physical disks (Disk Drives), we will query Class IBMTSSVC_DiskDrive, for obtaining parameters for Volumes — Class IBMTSSVC_StorageVolume, for obtaining parameters for Arrays — Class IBMTSSVC_Array, for obtaining parameters for MDisks — Class IBMTSSVC_BackendVolume, and so on.
Performance information can be read in (specifically — ) and IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Example C-11, p. 415).
To obtain SCSI statistics for Volumes, the parameter ClassName must be set to IBMTSSVC_StorageVolumeStatistics. The necessary properties for collecting statistics from the IBMTSSVC_StorageVolumeStatistics class can be found in .
Additionally, for performance analysis, classes IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, and IBMTSSVC_NodeStatistics can be used.
To write data to the monitoring system, we will use the mechanism , implemented in Python in the module . We will structure the classes of the storage system and their properties in a dictionary in JSON format.
Vi uploader skabelonen til Zabbix-serveren, og sikrer, at der er adgang til SAN fra overvågningsserveren via WEB-protokollen (TCP/5989). Vi placerer konfigurationsfilerne og scripts til opdagelse og overvågning på overvågningsserveren. Derefter tilføjer vi scriptkørsler til planlæggeren. Resultatet er, at vi opdager SAN-objekter (arrays, fysiske og virtuelle diske, enclosures og meget mere), sender dem til Zabbix-opdagelser, indlæser status for deres parametre, indlæser ydelsestatistik (performance counters) og sender alt dette til de tilsvarende Zabbix-elementer i vores skabelon.
Zabbix-skabelonen, python-scripts, strukturen for SAN-klasser og deres egenskaber samt eksempler på konfigurationsfiler kan .
Kilde: habr.com
