Overvågning af IBM Storwize Lagringssystem ved hjælp af Zabbix

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:

  1. CIM/WBEM-protokoller;
  2. RESTful API (understøttes i IBM Storwize fra softwareversion 8.1.3);
  3. SNMP Traps (begrænset sæt af traps, ingen statistik);
  4. SSH-forbindelse med efterfølgende fjernadgang er velegnet til langsommelig bash-scripting.

Interesserede kan finde ud af mere om de forskellige overvågningsmetoder i de relevante sektioner af leverandørens dokumentation samt i dokumentet IBM Spectrum Virtualize scripting.

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 (SMI-S). Storage Management Initiative – Specification er baseret på åbne standarder CIM (Common Information Model) og WBEM (Web-Based Enterprise Management), defineret af Distributed Management Task Force.

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 SMI Architecture og Determine Infrastructure, 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):

Overvågning af IBM Storwize Lagringssystem ved hjælp af Zabbix

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 www.snia.org/pywbem, 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 WBEMConnection:

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 WBEMConnection(), 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 EnumerateInstances() af klassen WBEMConnection, der returnerer en liste af instanser CIMInstance().

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 ExecQuery(), 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, How system concepts map to CIM concepts.

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 Functional diagrams of the Common Information Model agent (specifically — Block server performance subprofile) 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 Node Statistics.

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 zabbix traps, implemented in Python in the module py-zabbix. 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 findes her.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster