Bewaking van IBM Storwize opslag met Zabbix

In dit artikel gaan we het hebben over de bewaking van IBM Storwize opslag en andere opslagsystemen die CIM/WBEM-protocollen ondersteunen. De noodzaak voor deze bewaking laten we achterwege, laten we dit als een axioma beschouwen. We zullen Zabbix als bewakingsysteem gebruiken.

In de laatste versies van Zabbix heeft het bedrijf veel meer aandacht besteed aan sjablonen — er zijn sjablonen ontwikkeld voor het bewaken van services, databases, Servers hardware (IMM/iBMC) via IPMI. De bewaking van opslag blijft vooralsnog buiten de standaard sjablonen, daarom is het nodig om aangepaste sjablonen te gebruiken voor de integratie van informatie over de status en prestaties van opslagcomponenten in Zabbix. Eén van deze sjablonen stel ik aan uw voor.

Eerst een beetje theorie.

Om toegang te krijgen tot de status en statistieken van IBM Storwize opslag, kunnen de volgende methoden worden gebruikt:

  1. CIM/WBEM-protocollen;
  2. RESTful API (ondersteund door IBM Storwize sinds softwareversie 8.1.3);
  3. SNMP traps (beperkte set traps, geen statistieken);
  4. SSH-verbinding met daarna remote geschikt voor traag bash-scripten.

Geïnteresseerden kunnen meer gedetailleerde informatie over de verschillende bewakingsmethoden vinden in de relevante secties van de leveranciersdocumentatie, evenals in het document IBM Spectrum Virtualize scripting.

We zullen gebruikmaken van de CIM/WBEM-protocollen, waarmee we parameters van opslag kunnen verkrijgen zonder significante wijzigingen aan de software voor verschillende opslagsystemen. De CIM/WBEM-protocollen werken volgens de Storage Management Initiative Specification (SMI-S). De Storage Management Initiative – Specificatie is gebaseerd op open standaarden CIM (Common Information Model) en WBEM (Web-Based Enterprise Management), gedefinieerd door Distributed Management Task Force.

WBEM werkt bovenop het HTTP-protocol. Via WBEM kan niet alleen met opslag gewerkt worden, maar ook met HBA's, switches en tape libraries.

Volgens SMI-architectuur en Bepaal Infrastructuur, het belangrijkste component van de SMI-implementatie is de WBEM-server, die CIM-XML verzoeken van WBEM-clients (in ons geval van bewakingscripts) verwerkt:

Bewaking van IBM Storwize opslag met Zabbix

CIM is een object-georiënteerd model, gebaseerd op Unified Modeling Language (UML).
Beheerde elementen worden gedefinieerd als CIM-klassen, die eigenschappen en methoden hebben om beheerde gegevens en functies weer te geven.

Volgens www.snia.org/pywbem, voor toegang tot de SAN via CIM/WBEM kan PyWBEM worden gebruikt — een open source bibliotheek geschreven in Python, die ontwikkelaars en systeembeheerders in staat stelt om het CIM-protocol te implementeren voor toegang tot CIM-objecten en verschillende bewerkingen uit te voeren met de WBEM-server die werkt volgens SMI-S of andere CIM-specificaties.

Voor de verbinding met de WBEM-server gebruiken we de klasse WBEMConnection:

conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
            namespace, no_verification=True)

Dit is een virtuele verbinding, omdat CIM-XML/WBEM bovenop HTTP werkt; de echte verbinding wordt gemaakt op het moment van aanroepen van de methoden voor de instantie van de klasse WBEMConnection. Volgens de IBM System Storage SAN Volume Controller en Storwize V7000 Best Practices and Performance Guidelines (Voorbeeld C-8, blz. 412) gebruiken we «root/ibm» als CIM-namespace voor de IBM Storwize SAN.

Let op dat om statistieken via het CIM-XML/WBEM-protocol te verzamelen, de gebruiker in de juiste beveiligingsgroep moet worden geplaatst. Anders zal de uitvoer van de attributen van de klasse-instantie leeg zijn bij het uitvoeren van WBEM-verzoeken..

Voor toegang tot de statistieken van de SAN moet de gebruiker die de constructor aanroept WBEMConnection(), tenminste de RestrictedAdmin-rechten hebben (beschikbaar voor code_level > 7.8.0) of Administrator (niet aanbevolen om veiligheidsredenen).

We verbinden met de SAN via SSH en bekijken de groepsnummers:

> lsusergrp
id name            role            remote
0  SecurityAdmin   SecurityAdmin   nee    
1  Administrator   Administrator   nee    
2  CopyOperator    CopyOperator    nee    
3  Service         Service         nee    
4  Monitor         Monitor         nee    
5  RestrictedAdmin RestrictedAdmin nee    

We voegen de gebruiker zabbix toe aan de juiste groep:

> chuser -usergrp 5 zabbix

Bovendien is het volgens de IBM System Storage SAN Volume Controller en Storwize V7000 Best Practices and Performance Guidelines (blz. 415) nodig om de verzameling van statistieken op de SAN in te schakelen. Om statistieken elke minuut te verzamelen:

> startstats -interval 1 

We controleren:

> lssystem | grep statistics
statistics_status aan
statistics_frequency 1

Om alle bestaande klassen van de SAN te verkrijgen, moet de methode EnumerateClassNames() worden gebruikt.

Voorbeeld:

classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
     print (classname)

Om de waarden van de parameters van de SAN te verkrijgen, is de methode bedoeld voor EnumerateInstances() van de klasse WBEMConnection, welke een lijst van instanties retourneert CIMInstance().

Voorbeeld:

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))

Voor sommige klassen met een groot aantal instanties, zoals IBMTSSVC_StorageVolume, kan een volledige query voor alle instanties behoorlijk traag zijn. Het kan grote hoeveelheden gegevens genereren die moeten worden voorbereid door de opslag, via het netwerk moeten worden verzonden en door een script moeten worden verwerkt. Voor dit geval is er een methode ExecQuery(), waarmee we alleen de eigenschappen van de instantie van de klasse kunnen ophalen die ons interesseren. Deze methode vereist het gebruik van een querytaal, vergelijkbaar met SQL — of CIM Query Language (DMTF:CQL), of WBEM Query Language (WQL), om CIM-objecten van de opslag te ondervragen:

request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)

Om te bepalen welke klassen we nodig hebben om de parameters van opslagobjecten op te halen, lezen we de documentatie, bijvoorbeeld Hoe systeemconcepten zich verhouden tot CIM-concepten.

Dus om parameters (geen prestatiestatistieken) van fysieke schijven (Disk Drives) op te halen, zullen we de klasse IBMTSSVC_DiskDrive ondervragen, om parameters van volumes op te halen — de klasse IBMTSSVC_StorageVolume, om parameters van arrays op te halen — de klasse IBMTSSVC_Array, om parameters van MDisks op te halen — de klasse IBMTSSVC_BackendVolume, enzovoort.

Over prestaties kun je lezen Functionele diagrammen van het Common Information Model-agent (specifiek — Het prestatie subprofiel van de blockserver) en IBM System Storage SAN Volume Controller en Storwize V7000 Best Practices en Prestatie Richtlijnen (Voorbeeld C-11, bladzijde 415).

Om statistieken van de opslag te verkrijgen voor volumes, moet IBMTSSVC_StorageVolumeStatistics als waarde voor de parameter ClassName worden opgegeven. De noodzakelijke eigenschappen van de klasse IBMTSSVC_StorageVolumeStatistics voor het verzamelen van statistieken kunnen worden bekeken in Node Statistics.

Daarnaast kunnen de klassen IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics worden gebruikt voor prestatieanalyse.

Voor het registreren van gegevens in het monitoringsysteem gebruiken we het mechanisme zabbix traps, geïmplementeerd in python in de module py-zabbix. We zullen de structuur van de klassen van de opslag en hun eigenschappen in een woordenboek in JSON-formaat plaatsen.

We upload the template to the Zabbix server, ensuring that there is access to the storage system via the WEB protocol (TCP/5989) from the monitoring server, place configuration files, discovery, and monitoring scripts on the monitoring server. Next, we add the script execution to the scheduler. As a result: we discover storage system objects (arrays, physical and virtual disks, enclosures, and much more), pass them to Zabbix discoveries, read the status of their parameters, read performance statistics (performance counters), and pass all this to the corresponding Zabbix Items in our template.

The Zabbix template, python scripts, the structure of storage systems classes and their properties, as well as examples of configuration files, can be found here.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster