Overvågning af IBM Storwize-lagring med Zabbix

I denne artikel vil vi tale lidt om overvågning af IBM Storwize-lagringssystemer og andre lagersystemer, der understøtter CIM/WBEM-protokollerne. Behovet for en sådan overvågning er udeladt af ligningen; vi vil betragte dette som et aksiom. Vi vil bruge Zabbix som et overvågningssystem.

I de seneste versioner af Zabbix begyndte virksomheden at være meget mere opmærksom på skabeloner - skabeloner begyndte at dukke op til overvågningstjenester, DBMS, serverhardware (IMM/iBMC) via IPMI. Overvågning af lagersystem er stadig uden for skabelonerne ud af æsken, så for at integrere information om status og ydeevne af lagerkomponenter i Zabbix, skal du bruge brugerdefinerede skabeloner. Jeg gør dig opmærksom på en af ​​disse skabeloner.

Først lidt teori.

For at få adgang til status og statistik for IBM Storwize-lagersystemer kan du bruge:

  1. CIM/WBEM protokoller;
  2. RESTful API (understøttet i IBM Storwize startende med softwareversion 8.1.3);
  3. SNMP-fælder (begrænset sæt fælder, ingen statistik);
  4. Tilslut via SSH og derefter eksternt velegnet til afslappet bash scripting.

Interesserede kan lære mere om forskellige overvågningsmetoder i de relevante afsnit af leverandørdokumentationen samt i dokumentet IBM Spectrum Virtualiser scripting.

Vi vil bruge CIM/WBEM-protokollerne, som giver os mulighed for at opnå lagersystemdriftsparametre uden væsentlige softwareændringer for forskellige lagersystemer. CIM/WBEM-protokollerne fungerer i overensstemmelse med Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Specifikation er baseret på åbne standarder CIM (Common Information Model) и WBEM (Web-Based Enterprise Management), fast besluttet Distribueret ledelsestaskforce.

WBEM kører oven på HTTP-protokollen. Gennem WBEM kan du ikke kun arbejde med lagersystemer, men også med HBA'er, switche og båndbiblioteker.

Ifølge SMI arkitektur и Bestem infrastruktur, hovedkomponenten i SMI-implementeringen er WBEM-serveren, som behandler CIM-XML-anmodninger fra WBEM-klienter (i vores tilfælde fra overvågningsscripts):

Overvågning af IBM Storwize-lagring med Zabbix

CIM er en objektorienteret model baseret på Unified Modeling Language (UML).
Administrerede elementer er defineret som CIM-klasser, der har egenskaber og metoder til at repræsentere administrerede data og funktionalitet.

Ifølge www.snia.org/pywbem, for at få adgang til lagersystemer via CIM/WBEM, kan du bruge PyWBEM - et open source-bibliotek skrevet i Python, som giver udviklere og systemadministratorer en implementering af CIM-protokollen til at få adgang til CIM-objekter og udføre forskellige operationer med en WBEM-server, der opererer i i overensstemmelse med SMI-S eller andre CIM-specifikationer.

For at oprette forbindelse til WBEM-serveren bruger vi klassekonstruktøren WBEMCconnection:

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

Dette er en virtuel forbindelse, da CIM-XML/WBEM kører oven på HTTP, den rigtige forbindelse opstår, når metoder kaldes på en forekomst af WBEMConnection-klassen. I overensstemmelse med IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (eksempel C-8, side 412), vil vi bruge "root/ibm" som CIM-navneområdet for IBM Storwize-lagringssystemet.

Bemærk venligst, at for at indsamle statistik via CIM-XML/WBEM-protokollen, skal du inkludere brugeren i den relevante sikkerhedsgruppe. Ellers vil outputtet af klasseinstansattributter være tomt, når WBEM-forespørgsler udføres.

For at få adgang til lagerstatistik, brugeren, under hvem konstruktøren kaldes WBEMCnection(), skal mindst have RestrictedAdmin (tilgængelig for kodeniveau > 7.8.0) eller administratorrettigheder (anbefales ikke af sikkerhedsmæssige årsager).

Vi forbinder til lagersystemet via SSH og ser på gruppenumrene:

> 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    

Tilføj zabbix-brugeren til den ønskede gruppe:

> chuser -usergrp 5 zabbix

Derudover skal du i overensstemmelse med IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (s. 415) aktivere statistikindsamling på lagersystemet. Så 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 lagerklasser skal du bruge EnumerateClassNames() metoden.

Eksempel:

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

Metoden bruges til at opnå værdierne af lagringssystemparametre EnumerateInstances() klasse WBEMConnection, returnerer en liste over forekomster 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 nogle klasser, der indeholder et stort antal forekomster, såsom IBMTSSVC_StorageVolume, kan en fuld forespørgsel af alle forekomster være ret langsom. Det kan generere store mængder data, som skal forberedes af lagersystemet, transmitteres over netværket og behandles af scriptet. Der er en metode til sådan en sag ExecQuery(), som giver os mulighed for kun at få egenskaberne for en klasseinstans, der interesserer os. Denne metode involverer brug af et SQL-lignende forespørgselssprog, enten CIM Query Language (DMTF:CQL) eller WBEM Query Language (WQL), til at forespørge CIM-lagerobjekter:

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

For at bestemme, hvilke klasser vi skal bruge for at få parametrene for lagerobjekter, skal du f.eks. læse dokumentationen Hvordan systemkoncepter knytter sig til CIM-koncepter.

Så for at opnå parametre (ikke ydeevnetællere) for fysiske diske (diskdrev) vil vi polle Class IBMTSSVC_DiskDrive, for at opnå Volumes-parametre - Class IBMTSSVC_StorageVolume, for at opnå array-parametre - Class IBMTSSVC_Array, for at opnå MDisks-parametre - Class IBMTSSVume_BackendVol.

For ydeevne kan du læse Funktionelle diagrammer af Common Information Model-agenten (specifikt - Bloker serverens ydeevne underprofil) og IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (Eksempel C-11, side 415).

For at få lagerstatistik for Volumes skal du angive IBMTSSVC_StorageVolumeStatistics som værdien af ​​parameteren ClassName. Egenskaberne for IBMTSSVC_StorageVolumeStatistics-klassen, der er nødvendige for at indsamle statistik, kan ses i Nodestatistik.

Til ydeevneanalyse kan du også bruge klasserne IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

For at registrere data i overvågningssystemet vil vi bruge mekanismen zabbix fælder, implementeret i python i et modul py-zabbix. Vi vil placere strukturen af ​​lagersystemklasser og deres egenskaber i en ordbog i JSON-format.

Vi uploader skabelonen til Zabbix-serveren, sørger for at overvågningsserveren har adgang til lagersystemet via WEB-protokollen (TCP/5989), placerer konfigurationsfiler, detektions- og overvågningsscripts på overvågningsserveren. Tilføj derefter scriptstart til planlæggeren. Som et resultat: vi opdager lagerobjekter (arrays, fysiske og virtuelle diske, kabinetter og meget mere), overfører dem til Zabbix-opdagelser, læser status for deres parametre, læser ydeevnestatistikker (ydelsestællere), overfører alt dette til den tilsvarende Zabbix Elementer i vores skabelon.

Zabbix skabelon, python scripts, struktur af lagerklasser og deres egenskaber, samt eksempler på konfigurationsfiler, kan du finde her.

Kilde: www.habr.com

Tilføj en kommentar