Monitoramento de Armazenamento IBM Storwize com Zabbix

Neste artigo, vamos falar um pouco sobre o monitoramento do armazenamento IBM Storwize e de outros sistemas de armazenamento que suportam os protocolos CIM/WBEM. A necessidade desse monitoramento é considerada uma axioma. Usaremos o Zabbix como sistema de monitoramento.

Nas versões mais recentes do Zabbix, a empresa começou a dedicar muito mais atenção aos templates — templates para monitoramento de serviços, SGBDs e hardware de servidores (IMM/iBMC) através do IPMI começaram a surgir. O monitoramento de almacenamiento ainda não está incluído nos templates prontos para uso, por isso, para integrar informações sobre o status e o desempenho dos componentes do armazenamento no Zabbix, é necessário utilizar templates personalizados. Um desses templates eu ofereço à sua consideração.

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. RESTful API (no IBM Storwize, suportado a partir da versão de software 8.1.3);
  3. Traps SNMP (conjunto limitado de traps, sem estatísticas);
  4. Conexão via SSH com posterior acesso remoto que é adequado para script bash tranquilo.

Os interessados podem se aprofundar nos vários métodos de monitoramento nas seções correspondentes da documentação do fornecedor, bem como no documento IBM Spectrum Virtualize scripting.

Usaremos os protocolos CIM/WBEM, que permitem obter parâmetros de operação do armazenamento sem alterações significativas de software para diferentes sistemas de armazenamento. Os protocolos CIM/WBEM funcionam de acordo com Storage Management Initiative Specification (SMI-S). A especificação da Storage Management Initiative é baseada em padrões abertos CIM (Common Information Model) e WBEM (Web-Based Enterprise Management), definidos por Distributed Management Task Force.

O WBEM funciona sobre o protocolo HTTP. Através do WBEM, é possível trabalhar não apenas com o armazenamento, mas também com HBA, switches e bibliotecas de fita.

De acordo com SMI Architecture e Determine Infrastructure, o componente principal da implementação do SMI é o servidor WBEM, que processa solicitações CIM-XML dos clientes WBEM (neste caso, dos scripts de monitoramento):

Monitoramento de Armazenamento IBM Storwize com Zabbix

CIM é um modelo orientado a objetos, baseado na Linguagem de Modelagem Unificada (UML).
Os elementos gerenciados são definidos na forma de classes CIM, que possuem propriedades e métodos para representar dados e funções gerenciadas.

De acordo com www.snia.org/pywbem, para acessar o armazenamento por meio de CIM/WBEM, pode-se usar o PyWBEM — uma biblioteca open source, escrita em Python, que fornece aos desenvolvedores e administradores de sistemas a implementação do protocolo CIM para acesso a objetos CIM e execução de várias operações em um servidor WBEM, funcionando de acordo com SMI-S ou outras especificações CIM.

Para conectar-se ao servidor WBEM, utilizamos o construtor de classe WBEMConnection:

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

Esta é uma conexão virtual, uma vez que CIM-XML/WBEM opera sobre HTTP; a conexão real ocorre no momento da chamada dos métodos para a instância da classe WBEMConnection. De acordo com as Diretrizes e Melhores Práticas de Desempenho do IBM System Storage SAN Volume Controller and Storwize V7000 (Exemplo C-8, pg. 412), usaremos o namespace CIM "root/ibm" para o armazenamento IBM Storwize.

Observe que, para coletar estatísticas do protocolo CIM-XML/WBEM, é necessário incluir o usuário no grupo de segurança apropriado. Caso contrário, ao executar solicitações WBEM, a saída de atributos da instância da classe estará vazia..

Para acessar as estatísticas do armazenamento, o usuário que chama o construtor WBEMConnection(), deve ter permissões de pelo menos RestrictedAdmin (disponível para code_level > 7.8.0) ou Administrator (não recomendado por razões de segurança).

Conectamo-nos ao armazenamento via SSH e verificamos os números dos grupos:

> 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    

Adicionamos o usuário zabbix ao grupo desejado:

> chuser -usergrp 5 zabbix

Além disso, de acordo com as Diretrizes e Melhores Práticas de Desempenho do IBM System Storage SAN Volume Controller and Storwize V7000 (pg. 415), é necessário ativar a coleta de estatísticas no armazenamento. Assim, 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 existentes do armazenamento, é necessário 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 armazenamento, é destinado o método EnumerateInstances() da classe WBEMConnection, que retorna uma lista de instâncias CIMInstance().

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, a consulta completa de todas as instâncias pode ser bastante lenta. Ela pode gerar grandes volumes de dados que precisam ser preparados pelo armazenamento, transmitidos pela rede e processados pelo script. Para esse caso, existe um método ExecQuery(), que permite obter apenas as propriedades de interesse da instância da classe. Este método exige o uso de uma linguagem de consulta semelhante ao SQL — seja CIM Query Language (DMTF:CQL) ou WBEM Query Language (WQL) — para interrogar objetos CIM do armazenamento:

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, How system concepts map to CIM concepts.

. Assim, para obter os parâmetros (não os contadores de desempenho) dos discos físicos (Disk Drives), consultaremos a classe IBMTSSVC_DiskDrive; para obter os parâmetros dos Volumes — a classe IBMTSSVC_StorageVolume; para obter os parâmetros dos arrays — a classe IBMTSSVC_Array; para obter os parâmetros dos MDisks — a classe IBMTSSVC_BackendVolume; e assim por diante.

Para informações sobre desempenho, você pode consultar Functional diagrams of the Common Information Model agent (especificamente — Block server performance subprofile). e IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Exemplo C-11, pág. 415).

Para coletar estatísticas do armazenamento sobre Volumes, é necessário definir o parâmetro ClassName com o valor IBMTSSVC_StorageVolumeStatistics. As propriedades necessárias para coletar estatísticas da classe IBMTSSVC_StorageVolumeStatistics podem ser vistas em Node Statistics.

Além disso, para análise de desempenho, também podemos usar as classes IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Para enviar dados para o sistema de monitoramento, utilizaremos o mecanismo zabbix traps, implementado em python no módulo py-zabbix. A estrutura das classes de armazenamento e suas propriedades serão organizadas em um dicionário no formato JSON.

Estamos carregando o modelo no servidor Zabbix, garantindo que o servidor de monitoramento tenha acesso ao armazenamento por meio do protocolo WEB (TCP/5989), colocando os arquivos de configuração, scripts de descoberta e monitoramento no servidor de monitoramento. Em seguida, adicionamos os scripts ao agendador. Como resultado: detectamos objetos de armazenamento (arrays, discos físicos e virtuais, enclosures e muito mais), os enviamos para as descobertas do Zabbix, lemos o status de seus parâmetros, coletamos estatísticas de desempenho (counters de desempenho) e enviamos tudo isso para os Itens Zabbix correspondentes do nosso modelo.

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

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster