Overvåker IBM Storwize-lagring med Zabbix

I denne artikkelen skal vi snakke litt om overvåking av IBM Storwize-lagringssystemer og andre lagringssystemer som støtter CIM/WBEM-protokollene. Behovet for slik overvåking er utelatt fra ligningen, vi vil betrakte dette som et aksiom. Vi vil bruke Zabbix som et overvåkingssystem.

I de siste versjonene av Zabbix begynte selskapet å være mye mer oppmerksom på maler - maler begynte å dukke opp for overvåkingstjenester, DBMS, servermaskinvare (IMM/iBMC) via IPMI. Overvåking av lagringssystem er fortsatt utenfor malene ut av esken, så for å integrere informasjon om status og ytelse til lagringskomponenter i Zabbix, må du bruke egendefinerte maler. Jeg gjør deg oppmerksom på en av disse malene.

Først litt teori.

For å få tilgang til status og statistikk for IBM Storwize lagringssystemer, kan du bruke:

  1. CIM/WBEM-protokoller;
  2. RESTful API (støttes i IBM Storwize fra og med programvareversjon 8.1.3);
  3. SNMP-feller (begrenset sett med feller, ingen statistikk);
  4. Koble til via SSH og deretter eksternt egnet for rolig bash-skripting.

Interesserte kan lære mer om ulike overvåkingsmetoder i de relevante delene av leverandørdokumentasjonen, samt i dokumentet IBM Spectrum Virtualiser skripting.

Vi vil bruke CIM/WBEM-protokollene, som lar oss få lagringssystemets driftsparametere uten vesentlige programvareendringer for forskjellige lagringssystemer. CIM/WBEM-protokollene fungerer i henhold til Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Spesifikasjonen er basert på åpne standarder CIM (Common Information Model) и WBEM (nettbasert bedriftsadministrasjon), fast bestemt Distribuert ledergruppe.

WBEM kjører på toppen av HTTP-protokollen. Gjennom WBEM kan du jobbe ikke bare med lagringssystemer, men også med HBAer, switcher og båndbiblioteker.

Ifølge SMI-arkitektur и Bestem infrastruktur, hovedkomponenten i SMI-implementeringen er WBEM-serveren, som behandler CIM-XML-forespørsler fra WBEM-klienter (i vårt tilfelle fra overvåkingsskript):

Overvåker IBM Storwize-lagring med Zabbix

CIM er en objektorientert modell basert på Unified Modeling Language (UML).
Administrerte elementer er definert som CIM-klasser som har egenskaper og metoder for å representere administrerte data og funksjonalitet.

Ifølge www.snia.org/pywbem, for å få tilgang til lagringssystemer via CIM/WBEM, kan du bruke PyWBEM - et åpen kildekode-bibliotek skrevet i Python, som gir utviklere og systemadministratorer en implementering av CIM-protokollen for å få tilgang til CIM-objekter og utføre ulike operasjoner med en WBEM-server som opererer i i samsvar med SMI-S eller andre CIM-spesifikasjoner.

For å koble til WBEM-serveren bruker vi klassekonstruktøren WBEMCconnection:

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

Dette er en virtuell tilkobling, siden CIM-XML/WBEM kjører på toppen av HTTP, oppstår den virkelige tilkoblingen når metoder kalles på en forekomst av WBEMConnection-klassen. I samsvar med IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (eksempel C-8, side 412), vil vi bruke "root/ibm" som CIM-navneområdet for IBM Storwize-lagringssystemet.

Vær oppmerksom på at for å samle inn statistikk via CIM-XML/WBEM-protokollen, må du inkludere brukeren i den aktuelle sikkerhetsgruppen. Ellers, når du utfører WBEM-spørringer, vil utdataene til klasseforekomstattributter være tomme.

For å få tilgang til lagringsstatistikk, brukeren som konstruktøren kalles under WBEMConnection(), må ha minst RestrictedAdmin (tilgjengelig for kodenivå > 7.8.0) eller administratorrettigheter (anbefales ikke av sikkerhetsgrunner).

Vi kobler til lagringssystemet 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    

Legg zabbix-brukeren til ønsket gruppe:

> chuser -usergrp 5 zabbix

I tillegg, i samsvar med IBM System Storage SAN Volume Controller og Storwize V7000 Best Practices and Performance Guidelines (s. 415), må du aktivere statistikkinnsamling på lagringssystemet. Så for å samle inn statistikk hvert minutt:

> startstats -interval 1 

Vi sjekker:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

For å få alle eksisterende lagringsklasser, må du bruke EnumerateClassNames()-metoden.

Eksempel:

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

Metoden brukes til å oppnå verdiene til lagringssystemparametere 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 noen klasser som inneholder et stort antall forekomster, for eksempel IBMTSSVC_StorageVolume, kan en fullstendig spørring av alle forekomster være ganske treg. Det kan generere store mengder data som må forberedes av lagringssystemet, overføres over nettverket og behandles av skriptet. Det finnes en metode for et slikt tilfelle ExecQuery(), som lar oss få bare egenskapene til en klasseforekomst som interesserer oss. Denne metoden innebærer å bruke et SQL-lignende spørrespråk, enten CIM Query Language (DMTF:CQL) eller WBEM Query Language (WQL), for å spørre etter CIM-lagringsobjekter:

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

For å finne ut hvilke klasser vi trenger for å få parametrene til lagringsobjekter, les for eksempel dokumentasjonen Hvordan systemkonsepter kartlegges til CIM-konsepter.

Så for å skaffe parametere (ikke ytelsetellere) for fysiske disker (Diskstasjoner) vil vi polle Class IBMTSSVC_DiskDrive, for å få Volumes-parametere - Class IBMTSSVC_StorageVolume, for å skaffe array-parametere - Class IBMTSSVC_Array, for å få MDisks-parametere - Class IBMTSSVume_BackendVol.

For ytelse kan du lese Funksjonelle diagrammer av Common Information Model-agenten (nærmere bestemt - Blokker underprofil for tjenerytelse) og IBM System Storage SAN Volumkontroller og Storwize V7000 Beste praksis og retningslinjer for ytelse (eksempel C-11, side 415).

For å få lagringsstatistikk for Volumes, må du spesifisere IBMTSSVC_StorageVolumeStatistics som verdien av ClassName-parameteren. Egenskapene til IBMTSSVC_StorageVolumeStatistics-klassen som er nødvendige for å samle inn statistikk, kan sees i Nodestatistikk.

For ytelsesanalyse kan du også bruke klassene IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

For å registrere data i overvåkingssystemet vil vi bruke mekanismen zabbix feller, implementert i python i en modul py-zabbix. Vi vil plassere strukturen til lagringssystemklasser og deres egenskaper i en ordbok i JSON-format.

Vi laster opp malen til Zabbix-serveren, sørger for at overvåkingsserveren har tilgang til lagringssystemet via WEB-protokollen (TCP/5989), og legger inn konfigurasjonsfiler, deteksjons- og overvåkingsskript på overvåkingsserveren. Deretter legger du til skriptstart i planleggeren. Som et resultat: vi oppdager lagringsobjekter (matriser, fysiske og virtuelle disker, kabinetter og mye mer), overfører dem til Zabbix-funn, leser statusen til parametrene deres, leser ytelsesstatistikk (ytelsestellere), overfører alt dette til den tilsvarende Zabbix Elementer i malen vår.

Zabbix-mal, python-skript, struktur for lagringsklasser og deres egenskaper, samt eksempler på konfigurasjonsfiler, kan du finner her.

Kilde: www.habr.com

Legg til en kommentar