Övervakar IBM Storwize-lagring med Zabbix

I den här artikeln kommer vi att prata lite om övervakning av IBM Storwize-lagringssystem och andra lagringssystem som stöder CIM/WBEM-protokollen. Behovet av sådan övervakning utelämnas från ekvationen, vi kommer att betrakta detta som ett axiom. Vi kommer att använda Zabbix som ett övervakningssystem.

I de senaste versionerna av Zabbix började företaget ägna mycket mer uppmärksamhet åt mallar - mallar började dyka upp för övervakningstjänster, DBMS, Servers hårdvara (IMM/iBMC) via IPMI. Övervakning av lagringssystem är fortfarande utanför mallarna ur kartongen, så för att integrera information om status och prestanda för lagringskomponenter i Zabbix måste du använda anpassade mallar. Jag uppmärksammar dig på en av dessa mallar.

Först en liten teori.

För att komma åt status och statistik för IBM Storwize-lagringssystem kan du använda:

  1. CIM/WBEM-protokoll;
  2. RESTful API (stöds i IBM Storwize från och med mjukvaruversion 8.1.3);
  3. SNMP-fällor (begränsad uppsättning fällor, ingen statistik);
  4. Anslut via SSH och sedan på distans lämplig för lugn bash scripting.

Den som är intresserad kan lära sig mer om olika övervakningsmetoder i de relevanta avsnitten av leverantörsdokumentationen, såväl som i dokumentet IBM Spectrum Virtualisera skript.

Vi kommer att använda CIM/WBEM-protokollen, som gör att vi kan erhålla lagringssystemets driftsparametrar utan betydande mjukvaruförändringar för olika lagringssystem. CIM/WBEM-protokollen fungerar i enlighet med Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Specifikationen är baserad på öppna standarder CIM (Common Information Model) и WBEM (Web-Based Enterprise Management), fast besluten Distribuerad Management Task Force.

WBEM körs ovanpå HTTP-protokollet. Genom WBEM kan du arbeta inte bara med lagringssystem, utan även med HBA, switchar och bandbibliotek.

Enligt SMI arkitektur и Bestäm infrastruktur, är huvudkomponenten i SMI-implementeringen WBEM-servern, som behandlar CIM-XML-förfrågningar från WBEM-klienter (i vårt fall från övervakningsskript):

Övervakar IBM Storwize-lagring med Zabbix

CIM är en objektorienterad modell baserad på Unified Modeling Language (UML).
Hanterade element definieras som CIM-klasser som har egenskaper och metoder för att representera hanterad data och funktionalitet.

Enligt www.snia.org/pywbem, för att komma åt lagringssystem via CIM/WBEM kan du använda PyWBEM - ett bibliotek med öppen källkod skrivet i Python, som ger utvecklare och systemadministratörer en implementering av CIM-protokollet för att komma åt CIM-objekt och utföra olika operationer med en WBEM-server som arbetar i i enlighet med SMI-S eller andra CIM-specifikationer.

För att ansluta till WBEM-servern använder vi klasskonstruktorn WBEMCoppling:

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

Detta är en virtuell anslutning, eftersom CIM-XML/WBEM körs ovanpå HTTP, uppstår den verkliga anslutningen när metoder anropas på en instans av klassen WBEMConnection. I enlighet med IBM System Storage SAN Volume Controller och Storwize V7000 Best Practices and Performance Guidelines (Exempel C-8, sidan 412), kommer vi att använda "root/ibm" som CIM-namnutrymmet för IBM Storwize-lagringssystemet.

Observera att för att samla in statistik via CIM-XML/WBEM-protokollet måste du inkludera användaren i lämplig säkerhetsgrupp. Annars, när WBEM-frågor körs, kommer utdata från klassinstansattribut att vara tom.

För att komma åt lagringsstatistik, användaren under vilken konstruktören anropas WBEMCnection(), måste ha minst RestrictedAdmin (tillgängligt för code_level > 7.8.0) eller administratörsrättigheter (rekommenderas inte av säkerhetsskäl).

Vi ansluter till lagringssystemet via SSH och tittar på gruppnumren:

> 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    

Lägg till zabbix-användaren till önskad grupp:

> chuser -usergrp 5 zabbix

Dessutom, i enlighet med IBM System Storage SAN Volume Controller och Storwize V7000 Best Practices and Performance Guidelines (sid. 415), måste du aktivera statistikinsamling på lagringssystemet. Så, för att samla in statistik varje minut:

> startstats -interval 1 

Vi kontrollerar:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

För att få alla befintliga lagringsklasser måste du använda metoden EnumerateClassNames() .

Exempel:

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

Metoden används för att erhålla värdena för lagringssystemparametrar EnumerateInstances() klass WBEMConnection, returnerar en lista med instanser CIMInstance().

Exempel:

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

För vissa klasser som innehåller ett stort antal instanser, som IBMTSSVC_StorageVolume, kan en fullständig fråga av alla instanser vara ganska långsam. Det kan generera stora mängder data som måste förberedas av lagringssystemet, överföras över nätverket och bearbetas av skriptet. Det finns en metod för ett sådant fall ExecQuery(), vilket gör att vi bara kan få egenskaperna hos en klassinstans som intresserar oss. Denna metod innebär att man använder ett SQL-liknande frågespråk, antingen CIM Query Language (DMTF:CQL) eller WBEM Query Language (WQL), för att fråga CIM-lagringsobjekt:

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

För att avgöra vilka klasser vi behöver för att erhålla parametrarna för lagringsobjekt, läs till exempel dokumentationen Hur systemkoncept mappas till CIM-koncept.

Så för att erhålla parametrar (inte prestandaräknare) för fysiska diskar (Disk Drives) kommer vi att polla Class IBMTSSVC_DiskDrive, för att erhålla volymparametrar - Class IBMTSSVC_StorageVolume, för att erhålla arrayparametrar - Class IBMTSSVC_Array, för att erhålla MDisks parametrar - Class IBMTSSVume_BackendVol.

För prestanda kan du läsa Funktionsdiagram av Common Information Model-agenten (specifikt - Blockera serverprestanda underprofil) och IBM System Storage SAN Volume Controller och Storwize V7000 Best Practices and Performance Guidelines (Exempel C-11, sida 415).

För att få lagringsstatistik för volymer måste du ange IBMTSSVC_StorageVolumeStatistics som värdet för parametern ClassName. Egenskaperna för klassen IBMTSSVC_StorageVolumeStatistics som krävs för att samla in statistik kan ses i Nodstatistik.

För prestandaanalys kan du också använda klasserna IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

För att registrera data i övervakningssystemet kommer vi att använda mekanismen zabbixfällor, implementerad i python i en modul py-zabbix. Vi kommer att placera strukturen för lagringssystemklasser och deras egenskaper i en ordbok i JSON-format.

Vi laddar upp mallen till Zabbix-servern, ser till att övervakningsservern har tillgång till lagringssystemet via WEB-protokollet (TCP/5989), och placerar konfigurationsfiler, detekterings- och övervakningsskript på övervakningsservern. Lägg sedan till skriptstart i schemaläggaren. Som ett resultat: vi upptäcker lagringsobjekt (matriser, fysiska och virtuella diskar, höljen och mycket mer), överför dem till Zabbix-upptäckter, läser status för deras parametrar, läser prestandastatistik (prestandaräknare), överför allt detta till motsvarande Zabbix Objekt i vår mall.

Zabbix-mall, python-skript, struktur för lagringsklasser och deras egenskaper, samt exempel på konfigurationsfiler, kan du hitta här.

Källa: will.com

Lägg en kommentar