En este artículo, hablaremos un poco sobre el monitoreo de almacenamiento IBM Storwize y otros sistemas de almacenamiento que admiten protocolos CIM/WBEM. La necesidad de dicho monitoreo se da por sentado, considerémoslo una axioma. Usaremos Zabbix como sistema de monitoreo.
En las últimas versiones de Zabbix, la compañía ha prestado mucha más atención a las plantillas: han comenzado a aparecer plantillas para monitorear servicios, bases de datos, hardware de servidores (IMM/iBMC) a través de IPMI. El monitoreo de sistemas de almacenamiento aún se encuentra fuera de las plantillas por defecto, por lo que para integrar información sobre el estado y el rendimiento de los componentes del sistema de almacenamiento en Zabbix, se deben usar plantillas personalizadas. Una de estas plantillas se la presento a continuación.
Primero, un poco de teoría.
Para acceder al estado y las estadísticas del sistema de almacenamiento IBM Storwize, se puede usar:
- Protocolos CIM/WBEM;
- (en IBM Storwize, está soportado a partir de la versión de software 8.1.3);
- Trampas SNMP (conjunto limitado de trampas, sin estadísticas);
- Conexión por SSH con posterior .
Los interesados pueden familiarizarse más a fondo con los diversos métodos de monitoreo en las secciones correspondientes de la documentación del vendedor, así como en el documento .
Usaremos los protocolos CIM/WBEM, que permiten obtener información sobre el funcionamiento del sistema de almacenamiento sin cambios significativos en el software para diversos sistemas de almacenamiento. Los protocolos CIM/WBEM funcionan de acuerdo con . La Iniciativa de Gestión de Almacenamiento – la Especificación se basa en estándares abiertos y , definidos por .
WBEM funciona sobre el protocolo HTTP. A través de WBEM se puede trabajar no solo con sistemas de almacenamiento, sino también con HBA, conmutadores y bibliotecas de cintas.
Según y , el componente principal de la implementación de SMI es el servidor WBEM, que procesa las solicitudes CIM-XML de los clientes WBEM (en nuestro caso, desde los scripts de monitoreo):

CIM es un modelo orientado a objetos basado en el Lenguaje de Modelado Unificado (UML).
Los elementos gestionados se definen en forma de clases CIM, que tienen propiedades y métodos para representar datos gestionados y funciones.
Según , para acceder al almacenamiento a través de CIM/WBEM, se puede utilizar PyWBEM, una biblioteca de código abierto escrita en Python que proporciona a los desarrolladores y administradores de sistemas la implementación del protocolo CIM para acceder a objetos CIM y realizar diversas operaciones con un servidor WBEM que funciona según SMI-S u otras especificaciones CIM.
Para conectarse al servidor WBEM, utilizamos el constructor de clase :
conn = pywbem.WBEMConnection(server_uri, (self.login, self.password),
namespace, no_verification=True)
Esta es una conexión virtual, ya que CIM-XML/WBEM funciona sobre HTTP; la conexión real se establece en el momento en que se llaman a los métodos para una instancia de la clase WBEMConnection. De acuerdo con las Mejores Prácticas y Directrices de Rendimiento del IBM System Storage SAN Volume Controller y del Storwize V7000 (Ejemplo C-8, p. 412), utilizaremos «root/ibm» como espacio de nombres CIM para el almacenamiento IBM Storwize.
Tenga en cuenta que para recopilar estadísticas mediante el protocolo CIM-XML/WBEM, es necesario incluir al usuario en el grupo de seguridad correspondiente. De lo contrario, al ejecutar solicitudes WBEM, la salida de los atributos de la instancia de la clase será vacía..
Para acceder a las estadísticas del almacenamiento, el usuario que realiza la llamada al constructor , debe tener derechos de al menos RestrictedAdmin (disponible para code_level > 7.8.0) o Administrator (no recomendado por razones de seguridad).
Conectémonos al almacenamiento a través de SSH y veamos los números de grupo:
> 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
Agregamos al usuario zabbix al grupo necesario:
> chuser -usergrp 5 zabbix
Además, de acuerdo con las Mejores Prácticas y Directrices de Rendimiento del IBM System Storage SAN Volume Controller y del Storwize V7000 (p. 415), es necesario habilitar la recopilación de estadísticas en el almacenamiento. Así, para recopilar estadísticas cada minuto:
> startstats -interval 1
Verificando:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Para obtener todas las clases existentes del almacenamiento, es necesario utilizar el método EnumerateClassNames().
Ejemplo:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Para obtener los valores de los parámetros del almacenamiento, se destina el método de la clase WBEMConnection, que devuelve una lista de instancias .
Ejemplo:
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))
Para algunas clases que contienen un gran número de instancias, como IBMTSSVC_StorageVolume, la consulta completa de todas las instancias puede ser bastante lenta. Puede generar grandes volúmenes de datos que deben ser preparados por el almacenamiento, transmitidos a través de la red y procesados por un script. En tal caso, existe un método , que permite obtener solo las propiedades que nos interesan de la instancia de la clase. Este método supone el uso de un lenguaje de consulta similar a SQL: ya sea CIM Query Language (DMTF:CQL) o WBEM Query Language (WQL), para consultar los objetos CIM del almacenamiento:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Para determinar qué clases necesitamos para obtener los parámetros de los objetos de almacenamiento, leemos la documentación, por ejemplo .
Así, para obtener los parámetros (no contadores de rendimiento) de los discos físicos (Disk Drives) consultaremos la clase IBMTSSVC_DiskDrive, para obtener parámetros de Volumes — clase IBMTSSVC_StorageVolume, para obtener parámetros de Arrays — clase IBMTSSVC_Array, para obtener parámetros de MDisks — clase IBMTSSVC_BackendVolume, etc.
Sobre el rendimiento se puede leer (en concreto — ) y Prácticas recomendadas y pautas de rendimiento de IBM System Storage SAN Volume Controller y Storwize V7000 (Ejemplo C-11, p. 415).
Para obtener estadísticas del almacenamiento sobre Volumes, es necesario establecer como valor del parámetro ClassName IBMTSSVC_StorageVolumeStatistics. Las propiedades necesarias para recopilar estadísticas de la clase IBMTSSVC_StorageVolumeStatistics se pueden consultar en .
Además, para el análisis del rendimiento se pueden usar las clases IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Para registrar datos en el sistema de monitoreo, utilizaremos el mecanismo , implementado en python en el módulo . La estructura de las clases del almacenamiento y sus propiedades se ubicará en un diccionario en formato JSON.
Cargamos la plantilla en el servidor Zabbix, asegurándonos de que hay acceso al almacenamiento por parte del servidor de monitoreo a través del protocolo WEB (TCP/5989), colocamos los archivos de configuración, los scripts de descubrimiento y monitoreo en el servidor de monitoreo. A continuación, añadimos la ejecución de scripts al programador. Como resultado: descubrimos los objetos de almacenamiento (arrays, discos físicos y virtuales, enclaves y mucho más), los transferimos a los descubrimientos de Zabbix, leemos el estado de sus parámetros, recopilamos estadísticas de rendimiento (contadores de rendimiento) y transferimos todo esto a los elementos Zabbix correspondientes de nuestra plantilla.
La plantilla de Zabbix, los scripts de python, la estructura de clases de almacenamiento y sus propiedades, así como ejemplos de archivos de configuración, se pueden .
Fuente: habr.com
