Monitorando o armazenamento IBM Storwize com Zabbix

Neste artigo, falaremos um pouco sobre o monitoramento de sistemas de armazenamento IBM Storwize e outros sistemas de armazenamento que suportam os protocolos CIM/WBEM. A necessidade desse monitoramento é deixada de lado; consideraremos isso um axioma. Usaremos o Zabbix como sistema de monitoramento.

Nas últimas versões do Zabbix, a empresa passou a dar muito mais atenção aos templates - começaram a aparecer templates para serviços de monitoramento, DBMS, Hardware de servidores (IMM/iBMC) via IPMI. O monitoramento de armazenamento ainda está pronto para uso, portanto, para integrar informações sobre o status e o desempenho dos componentes de armazenamento no Zabbix, você precisa usar modelos personalizados. Trago a sua atenção um desses modelos.

Primeiro, um pouco de teoria.

Para acessar o status e as estatísticas do armazenamento IBM Storwize, você pode usar:

  1. protocolos CIM/WBEM;
  2. API RESTful (suportado pelo IBM Storwize a partir do software versão 8.1.3);
  3. Traps SNMP (conjunto limitado de traps, sem estatísticas);
  4. Conexão SSH seguida por controle remoto adequado para scripts bash de lazer.

Os interessados ​​podem aprender mais sobre os vários métodos de monitoramento nas seções relevantes da documentação do fornecedor, bem como no documento Script do IBM Spectrum Virtualize.

Utilizaremos os protocolos CIM/WBEM, que nos permitem obter os parâmetros do sistema de armazenamento sem alterações significativas no software para vários sistemas de armazenamento. Os protocolos CIM/WBEM funcionam de acordo com Especificação da Iniciativa de Gerenciamento de Armazenamento (SMI-S). A Iniciativa de Gerenciamento de Armazenamento – A especificação é baseada em padrões abertos CIM (Modelo de Informação Comum) и WBEM (Gerenciamento Corporativo Baseado na Web)definiram Força-Tarefa de Gerenciamento Distribuído.

O WBEM funciona sobre o protocolo HTTP. Por meio do WBEM, você pode trabalhar não apenas com sistemas de armazenamento, mas também com HBAs, switches e bibliotecas de fitas.

Conforme Arquitetura SMI и Determinar a infraestrutura, o principal componente da implementação do SMI é o servidor WBEM que processa solicitações CIM-XML de clientes WBEM (no nosso caso, de scripts de monitoramento):

Monitorando o armazenamento IBM Storwize com Zabbix

CIM é um modelo orientado a objetos baseado na Unified Modeling Language (UML).
Itens gerenciados são definidos como classes CIM que possuem propriedades e métodos para representar dados e funcionalidade gerenciados.

Conforme www.snia.org/pywbem, para acessar o armazenamento via CIM / WBEM, você pode usar PyWBEM, uma biblioteca de código aberto escrita em Python que fornece aos desenvolvedores e administradores de sistema a implementação do protocolo CIM para acessar objetos CIM e executar várias operações com um servidor WBEM operando de acordo com SMI -S ou outras especificações CIM.

Para se conectar ao servidor WBEM, use o construtor de classe Conexão WBEM:

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

Esta é uma conexão virtual, porque CIM-XML/WBEM é executado em HTTP, a conexão real ocorre quando os métodos são chamados em uma instância da classe WBEMConnection. De acordo com o IBM System Storage SAN Volume Controller e Storwize V7000 Best Practices and Performance Guidelines (Exemplo C-8, p. 412), usaremos “root/ibm” como o namespace CIM para armazenamento IBM Storwize.

Observe que, para coletar estatísticas sobre o protocolo CIM-XML/WBEM, você deve incluir o usuário no grupo de segurança apropriado. Caso contrário, ao executar consultas WBEM, a saída dos atributos de instância de classe estará vazia.

Para acessar as estatísticas de armazenamento, o usuário sob o qual o construtor é chamado Conexão WBEM(), deve ter pelo menos RestrictedAdmin (disponível para code_level > 7.8.0) ou Administrador (não recomendado por motivos de segurança).

Conectamos ao sistema de armazenamento via SSH e verificamos os números do 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    

Adicione o usuário zabbix ao grupo desejado:

> chuser -usergrp 5 zabbix

Além disso, de acordo com as melhores práticas e diretrizes de desempenho do IBM System Storage SAN Volume Controller e Storwize V7000 (p. 415), você deve ativar a coleta de estatísticas no sistema de armazenamento. Portanto, para coletar estatísticas a cada minuto:

> startstats -interval 1 

Verificamos:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Para obter todas as classes de armazenamento existentes, você deve usar o método EnumerateClassNames().

Exemplo:

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

Para obter os valores dos parâmetros do sistema de armazenamento, o método EnumerarInstances() Classe WBEMConnection retornando uma lista de instâncias CIIMInstância().

Exemplo:

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 algumas classes que contêm um grande número de instâncias, como IBMTSSVC_StorageVolume, uma consulta completa de todas as instâncias pode ser bastante lenta. Pode gerar grandes quantidades de dados que devem ser preparados pelo sistema de armazenamento, transmitidos pela rede e processados ​​por um script. Para esse caso, existe um método ExecQuery(), que permite obter apenas as propriedades da instância da classe que nos interessam. Este método envolve o uso de uma linguagem de consulta semelhante a SQL, CIM Query Language (DMTF:CQL) ou WBEM Query Language (WQL), para consultar objetos de armazenamento CIM:

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

Para determinar quais classes precisamos para obter os parâmetros dos objetos de armazenamento, lemos a documentação, por exemplo Como os conceitos do sistema são mapeados para os conceitos CIM.

Assim, para obter parâmetros (não contadores de desempenho) de discos físicos (Disk Drives), vamos consultar a Classe IBMTSSVC_DiskDrive, para obter parâmetros de Volumes - Classe IBMTSSVC_StorageVolume, para obter parâmetros de array - Classe IBMTSSVC_Array, para obter parâmetros de MDisks - Classe IBMTSSVC_BackendVolume, etc.

Você pode ler sobre desempenho Diagramas funcionais do agente Common Information Model (especificamente - Bloquear subperfil de desempenho do servidor) e IBM System Storage SAN Volume Controller e Storwize V7000 Melhores Práticas e Diretrizes de Desempenho (Exemplo C-11, página 415).

Para obter estatísticas de armazenamento para Volumes, você precisa especificar IBMTSSVC_StorageVolumeStatistics como o valor do parâmetro ClassName. As propriedades da classe IBMTSSVC_StorageVolumeStatistics necessárias para coletar estatísticas podem ser encontradas em Estatísticas do nó.

Além disso, para análise de desempenho, você pode usar as classes IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Para gravar dados no sistema de monitoramento, usaremos o mecanismo armadilhas zabbix, implementado em python em um módulo py-zabbix. A estrutura das classes de armazenamento e suas propriedades serão colocadas em um dicionário no formato JSON.

Carregamos o modelo no servidor Zabbix, verificamos se o servidor de monitoramento tem acesso ao armazenamento via protocolo WEB (TCP / 5989), colocamos os arquivos de configuração, scripts de detecção e monitoramento no servidor de monitoramento. Em seguida, adicione scripts ao agendador. Como resultado: descobrimos objetos de armazenamento (arrays, discos físicos e virtuais, compartimentos e muito mais), passamos para as descobertas do Zabbix, lemos o status de seus parâmetros, lemos estatísticas de desempenho (contadores de desempenho), transferimos tudo isso para os correspondentes Zabbix Itens do nosso template.

O modelo Zabbix, os scripts python, a estrutura das classes de armazenamento e suas propriedades, bem como exemplos de arquivos de configuração, podem ser encontre aqui.

Fonte: habr.com

Adicionar um comentário