Surveillance du stockage IBM Storwize avec Zabbix

Dans cet article, nous parlerons un peu de la surveillance des systèmes de stockage IBM Storwize et d'autres systèmes de stockage prenant en charge les protocoles CIM / WBEM. La nécessité d'un tel contrôle n'est pas entre parenthèses, nous considérerons cela comme un axiome. Nous utiliserons Zabbix comme système de surveillance.

Dans les dernières versions de Zabbix, la société a commencé à accorder beaucoup plus d'attention aux modèles - des modèles ont commencé à apparaître pour les services de surveillance, les SGBD, le matériel des serveurs (IMM / iBMC) via IPMI. La surveillance du stockage est toujours prête à l'emploi, donc pour intégrer des informations sur l'état et les performances des composants de stockage dans Zabbix, vous devez utiliser des modèles personnalisés. J'attire votre attention sur l'un de ces modèles.

Tout d'abord un peu de théorie.

Pour accéder au statut et aux statistiques du stockage IBM Storwize, vous pouvez utiliser :

  1. protocoles CIM/WBEM ;
  2. API RESTful (pris en charge par IBM Storwize à partir de la version logicielle 8.1.3) ;
  3. Interruptions SNMP (ensemble limité d'interruptions, pas de statistiques) ;
  4. Connexion SSH suivie de remote adapté aux scripts bash tranquilles.

Les personnes intéressées peuvent en savoir plus sur les différentes méthodes de surveillance dans les sections correspondantes de la documentation du fournisseur, ainsi que dans le document Script IBM Spectrum Virtualize.

Nous utiliserons les protocoles CIM / WBEM, qui nous permettent d'obtenir les paramètres du système de stockage sans modifications importantes du logiciel pour divers systèmes de stockage. Les protocoles CIM/WBEM fonctionnent selon Spécification de l'initiative de gestion du stockage (SMI-S). L'initiative de gestion du stockage - La spécification est basée sur des normes ouvertes CIM (modèle commun d'informations) и WBEM (gestion d'entreprise basée sur le Web)défini Groupe de travail sur la gestion distribuée.

WBEM fonctionne au-dessus du protocole HTTP. Grâce à WBEM, vous pouvez travailler non seulement avec des systèmes de stockage, mais également avec des HBA, des commutateurs et des bibliothèques de bandes.

selon Architecture SMI и Déterminer l'infrastructure, le composant principal de l'implémentation SMI est le serveur WBEM qui traite les requêtes CIM-XML des clients WBEM (dans notre cas, des scripts de surveillance) :

Surveillance du stockage IBM Storwize avec Zabbix

CIM est un modèle orienté objet basé sur le langage de modélisation unifié (UML).
Les éléments gérés sont définis comme des classes CIM qui ont des propriétés et des méthodes pour représenter les données et fonctionnalités gérées.

selon www.snia.org/pywbem, pour accéder au stockage via CIM / WBEM, vous pouvez utiliser PyWBEM, une bibliothèque open source écrite en Python qui fournit aux développeurs et aux administrateurs système la mise en œuvre du protocole CIM pour accéder aux objets CIM et effectuer diverses opérations avec un serveur WBEM fonctionnant selon SMI -S ou d'autres spécifications CIM.

Pour vous connecter au serveur WBEM, utilisez le constructeur de classe WBEMConnexion:

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

Il s'agit d'une connexion virtuelle, car CIM-XML/WBEM s'exécute sur HTTP, la connexion réelle se produit lorsque des méthodes sont appelées sur une instance de la classe WBEMConnection. Conformément à IBM System Storage SAN Volume Controller et Storwize V7000 Best Practices and Performance Guidelines (exemple C-8, p. 412), nous utiliserons « root/ibm » comme espace de noms CIM pour le stockage IBM Storwize.

Veuillez noter que pour collecter des statistiques sur le protocole CIM-XML/WBEM, vous devez inclure l'utilisateur dans le groupe de sécurité approprié. Sinon, lors de l'exécution de requêtes WBEM, la sortie des attributs d'instance de classe sera vide.

Pour accéder aux statistiques de stockage, l'utilisateur sous lequel le constructeur est appelé WBEMConnexion(), doit avoir au moins RestrictedAdmin (disponible pour code_level > 7.8.0) ou Administrator (non recommandé pour des raisons de sécurité).

Nous nous connectons au système de stockage via SSH et regardons les numéros de groupe :

> 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    

Ajoutez l'utilisateur zabbix au groupe souhaité :

> chuser -usergrp 5 zabbix

De plus, conformément à IBM System Storage SAN Volume Controller et Storwize V7000 Best Practices and Performance Guidelines (p. 415), vous devez activer la collecte de statistiques sur le système de stockage. Donc, pour collecter des statistiques chaque minute :

> startstats -interval 1 

vérifier:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Pour obtenir toutes les classes de stockage existantes, vous devez utiliser la méthode EnumerateClassNames().

Exemple:

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

Pour obtenir les valeurs des paramètres du système de stockage, la méthode EnumerateInstances() Classe WBEMConnection renvoyant une liste d'instances CIMInstance().

Exemple:

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

Pour certaines classes qui contiennent un grand nombre d'instances, comme IBMTSSVC_StorageVolume, une requête complète de toutes les instances peut être assez lente. Il peut générer de grandes quantités de données qui doivent être préparées par le système de stockage, transmises sur le réseau et traitées par un script. Pour un tel cas, il existe une méthode ExecRequête(), ce qui vous permet d'obtenir uniquement les propriétés de l'instance de classe qui nous intéressent. Cette méthode implique l'utilisation d'un langage de requête de type SQL, soit CIM Query Language (DMTF:CQL) ou WBEM Query Language (WQL), pour interroger les objets de stockage CIM :

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

Pour déterminer de quelles classes nous avons besoin pour obtenir les paramètres des objets de stockage, nous lisons la documentation, par exemple Comment les concepts système correspondent aux concepts CIM.

Ainsi, pour obtenir les paramètres (et non les compteurs de performance) des disques physiques (Disk Drives), nous allons interroger la classe IBMTSSVC_DiskDrive, pour obtenir les paramètres des volumes - Classe IBMTSSVC_StorageVolume, pour obtenir les paramètres du tableau - Classe IBMTSSVC_Array, pour obtenir les paramètres des MDisks - Classe IBMTSSVC_BackendVolume, etc.

Vous pouvez lire sur les performances Schémas fonctionnels de l'agent Common Information Model (spécifiquement - Bloquer le sous-profil de performances du serveur) et IBM System Storage SAN Volume Controller et Storwize V7000 Best Practices and Performance Guidelines (exemple C-11, page 415).

Pour obtenir des statistiques de stockage pour les volumes, vous devez spécifier IBMTSSVC_StorageVolumeStatistics comme valeur du paramètre ClassName. Les propriétés de la classe IBMTSSVC_StorageVolumeStatistics nécessaires à la collecte des statistiques se trouvent dans Statistiques de nœud.

En outre, pour l'analyse des performances, vous pouvez utiliser les classes IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Pour écrire des données dans le système de surveillance, nous utiliserons le mécanisme pièges zabbix, implémenté en python dans un module py-zabbix. La structure des classes de stockage et leurs propriétés seront placées dans un dictionnaire au format JSON.

Nous téléchargeons le modèle sur le serveur Zabbix, nous assurons que le serveur de surveillance a accès au stockage via le protocole WEB (TCP / 5989), plaçons les fichiers de configuration, les scripts de détection et de surveillance sur le serveur de surveillance. Ensuite, ajoutez des scripts au planificateur. En conséquence : nous découvrons des objets de stockage (baies, disques physiques et virtuels, boîtiers, et bien plus encore), les passons aux découvertes Zabbix, lisons l'état de leurs paramètres, lisons les statistiques de performances (compteurs de performances), transférons tout cela aux correspondants Éléments Zabbix de notre modèle.

Le modèle Zabbix, les scripts python, la structure des classes de stockage et leurs propriétés, ainsi que des exemples de fichiers de configuration, peuvent être trouver ici.

Source: habr.com

Ajouter un commentaire