Supervisión del almacenamiento de IBM Storwize con Zabbix

En este artículo hablaremos un poco sobre el monitoreo de los sistemas de almacenamiento IBM Storwize y otros sistemas de almacenamiento que soportan los protocolos CIM/WBEM. La necesidad de tal seguimiento queda fuera de la ecuación; lo consideraremos un axioma. Usaremos Zabbix como sistema de seguimiento.

En las últimas versiones de Zabbix, la empresa comenzó a prestar mucha más atención a las plantillas: comenzaron a aparecer plantillas para servicios de monitoreo, DBMS y hardware de servidores (IMM/iBMC) a través de IPMI. El monitoreo del sistema de almacenamiento aún está fuera de las plantillas listas para usar, por lo que para integrar información sobre el estado y el rendimiento de los componentes de almacenamiento en Zabbix, debe usar plantillas personalizadas. Les traigo una de estas plantillas.

Primero un poco de teoría.

Para acceder al estado y las estadísticas de los sistemas de almacenamiento IBM Storwize, puede utilizar:

  1. protocolos CIM/WBEM;
  2. API RESTful (compatible con IBM Storwize a partir de la versión de software 8.1.3);
  3. Trampas SNMP (conjunto limitado de trampas, sin estadísticas);
  4. Conéctese a través de SSH y luego de forma remota adecuado para secuencias de comandos bash tranquilas.

Los interesados ​​pueden obtener más información sobre los distintos métodos de seguimiento en las secciones correspondientes de la documentación del proveedor, así como en el documento Scripts de IBM Spectrum Virtualize.

Utilizaremos los protocolos CIM/WBEM, que nos permiten obtener parámetros operativos del sistema de almacenamiento sin cambios significativos de software para diferentes sistemas de almacenamiento. Los protocolos CIM/WBEM operan de acuerdo con Especificación de la iniciativa de administración de almacenamiento (SMI-S). Iniciativa de gestión de almacenamiento: la especificación se basa en estándares abiertos CIM (Modelo de Información Común) и WBEM (Gestión empresarial basada en web), determinado Grupo de trabajo de gestión distribuida.

WBEM se ejecuta sobre el protocolo HTTP. A través de WBEM puede trabajar no sólo con sistemas de almacenamiento, sino también con HBA, conmutadores y bibliotecas de cintas.

según Arquitectura SMI и Determinar la infraestructura, el componente principal de la implementación de SMI es el servidor WBEM, que procesa solicitudes CIM-XML de clientes WBEM (en nuestro caso, desde scripts de monitoreo):

Supervisión del almacenamiento de IBM Storwize con Zabbix

CIM es un modelo orientado a objetos basado en el Lenguaje Unificado de Modelado (UML).
Los elementos administrados se definen como clases CIM que tienen propiedades y métodos para representar datos y funciones administrados.

según www.snia.org/pywbem, para acceder a los sistemas de almacenamiento a través de CIM/WBEM, puede utilizar PyWBEM, una biblioteca de código abierto escrita en Python, que proporciona a los desarrolladores y administradores de sistemas una implementación del protocolo CIM para acceder a objetos CIM y realizar diversas operaciones con un servidor WBEM que opera en de acuerdo con SMI-S u otras especificaciones CIM.

Para conectarnos al servidor WBEM utilizamos el constructor de clases. Conexión WBEM:

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

Esta es una conexión virtual, ya que CIM-XML/WBEM se ejecuta sobre HTTP, la conexión real ocurre cuando se llaman métodos en una instancia de la clase WBEMConnection. De acuerdo con IBM System Storage SAN Volume Controller y las mejores prácticas y pautas de rendimiento de Storwize V7000 (Ejemplo C-8, página 412), utilizaremos “root/ibm” como espacio de nombres CIM para el sistema de almacenamiento IBM Storwize.

Tenga en cuenta que para recopilar estadísticas a través del protocolo CIM-XML/WBEM, debe incluir al usuario en el grupo de seguridad apropiado. De lo contrario, al ejecutar consultas WBEM, la salida de los atributos de la instancia de clase estará vacía.

Para acceder a las estadísticas de almacenamiento, el usuario bajo el cual se llama al constructor Conexión WBEM(), debe tener al menos derechos RestrictedAdmin (disponible para code_level > 7.8.0) o Administrador (no recomendado por razones de seguridad).

Nos conectamos al sistema de almacenamiento vía SSH y miramos 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    

Agregue el usuario zabbix al grupo deseado:

> chuser -usergrp 5 zabbix

Además, de acuerdo con las mejores prácticas y pautas de rendimiento de IBM System Storage SAN Volume Controller y Storwize V7000 (p. 415), debe habilitar la recopilación de estadísticas en el sistema de almacenamiento. Entonces, para recopilar estadísticas cada minuto:

> startstats -interval 1 

Comprobamos:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Para obtener todas las clases de almacenamiento existentes, debe utilizar el método EnumerateClassNames().

Ejemplo:

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

El método se utiliza para obtener los valores de los parámetros del sistema de almacenamiento. Enumerar instancias() clase WBEMConnection, que devuelve una lista de instancias Instancia CIMI().

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 una gran cantidad de instancias, como IBMTSSVC_StorageVolume, una consulta completa de todas las instancias puede resultar bastante lenta. Puede generar grandes volúmenes de datos que deben ser preparados por el sistema de almacenamiento, transmitidos a través de la red y procesados ​​por el script. Existe un método para tal caso. Consulta ejecutiva(), que nos permite obtener sólo las propiedades de una instancia de clase que nos interese. Este método implica el uso de un lenguaje de consulta similar a SQL, ya sea el lenguaje de consulta CIM (DMTF:CQL) o el lenguaje de consulta WBEM (WQL), para consultar objetos de almacenamiento CIM:

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, lea la documentación, por ejemplo. Cómo se relacionan los conceptos del sistema con los conceptos CIM.

Entonces, para obtener parámetros (no contadores de rendimiento) de discos físicos (Unidades de disco), sondearemos la Clase IBMTSSVC_DiskDrive, para obtener los parámetros de Volumen - Clase IBMTSSVC_StorageVolume, para obtener los parámetros de matriz - Clase IBMTSSVC_Array, para obtener los parámetros de MDisks - Clase IBMTSSVC_BackendVolume, etc.

Para el rendimiento puedes leer Diagramas funcionales del agente del Modelo de Información Común (específicamente - Bloquear subperfil de rendimiento del servidor) y Pautas de rendimiento y prácticas recomendadas de IBM System Storage SAN Volume Controller y Storwize V7000 (Ejemplo C-11, página 415).

Para obtener estadísticas de almacenamiento para volúmenes, debe especificar IBMTSSVC_StorageVolumeStatistics como valor del parámetro ClassName. Las propiedades de la clase IBMTSSVC_StorageVolumeStatistics necesarias para recopilar estadísticas se pueden ver en Estadísticas de nodos.

Además, para el análisis de rendimiento puede utilizar las clases IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Para registrar datos en el sistema de seguimiento utilizaremos el mecanismo trampas zabbix, implementado en Python en un módulo py-zabbix. Colocaremos la estructura de clases de los sistemas de almacenamiento y sus propiedades en un diccionario en formato JSON.

Cargamos la plantilla en el servidor Zabbix, nos aseguramos de que el servidor de monitoreo tenga acceso al sistema de almacenamiento a través del protocolo WEB (TCP/5989) y colocamos archivos de configuración, scripts de detección y monitoreo en el servidor de monitoreo. A continuación, agregue el inicio del script al programador. Como resultado: descubrimos objetos de almacenamiento (matrices, discos físicos y virtuales, gabinetes y mucho más), los transferimos a los descubrimientos de Zabbix, leemos el estado de sus parámetros, leemos las estadísticas de rendimiento (contadores de rendimiento), transferimos todo esto al Zabbix correspondiente. Artículos de nuestra plantilla.

Plantilla de Zabbix, scripts de Python, estructura de clases de almacenamiento y sus propiedades, así como ejemplos de archivos de configuración, puede encontrar aqui.

Fuente: habr.com

Añadir un comentario