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:
- Protocolos CIM/WBEM;
- (no IBM Storwize, suportado a partir da versão de software 8.1.3);
- Traps SNMP (conjunto limitado de traps, sem estatísticas);
- Conexão via SSH com posterior acesso remoto .
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 .
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 . A especificação da Storage Management Initiative é baseada em padrões abertos e , definidos por .
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 e , 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):

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 , 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 :
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 , 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 da classe WBEMConnection, que retorna uma lista de instâncias .
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 , 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, .
. 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 (especificamente — ). 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 .
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 , implementado em python no módulo . 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 .
Fonte: habr.com
