Мониторинг СХД IBM Storwize при помощи Zabbix

В данной статье мы немного поговорим о мониторинге СХД IBM Storwize и других СХД, поддерживающих протоколы CIM/WBEM. Необходимость такого мониторинга оставлена за скобками, будем считать это аксиомой. В качестве системы мониторинга будем использовать Zabbix.

В последних версиях Zabbix компания стала уделять шаблонам гораздо больше внимания — стали появляться шаблоны для мониторинга сервисов, СУБД, Servers hardware (IMM/iBMC) через IPMI. Мониторинг СХД пока остаётся вне шаблонов из коробки, поэтому для интеграции в Zabbix информации о статусе и производительности компонентов СХД нужно использовать кастомные шаблоны. Один из таких шаблонов я предлагаю вашему вниманию.

Сначала немного теории.

Для доступа к статусу и статистике СХД IBM Storwize можно использовать:

  1. Протоколы CIM/WBEM;
  2. RESTful API (в IBM Storwize поддерживается, начиная с ПО версии 8.1.3);
  3. SNMP Traps (ограниченный набор trap’ов, нет статистики);
  4. Подключение по SSH с последующим удаленным подходит для неторопливого bash-скриптинга.

Интересующиеся могут подробнее ознакомиться с различными методами мониторинга в соответствующих разделах вендорской документации, а также в документе IBM Spectrum Virtualize scripting.

Мы будем использовать протоколы CIM/WBEM, позволяющие получать параметры работы СХД без значительных изменений ПО для различных СХД. Протоколы CIM/WBEM работают в соответствии со Storage Management Initiative Specification (SMI-S). Storage Management Initiative – Specification основана на открытых стандартах CIM (Common Information Model) и WBEM (Web-Based Enterprise Management), определяемых Distributed Management Task Force.

WBEM работает поверх протокола HTTP. Через WBEM можно работать не только с СХД, но и с HBA, коммутаторами и ленточными библиотеками.

Согласно SMI Architecture и Determine Infrastructure, основным компонентом реализации SMI является WBEM-сервер, обрабатывающий CIM-XML запросы от WBEM-клиентов (в нашем случае — от скриптов мониторинга):

Мониторинг СХД IBM Storwize при помощи Zabbix

CIM — объектно-ориентированная модель, основанная на Unified Modeling Language (UML).
Управляемые элементы определяются в виде CIM-классов, у которых есть свойства и методы для представления управляемых данных и функций.

Согласно www.snia.org/pywbem, для доступа к СХД через CIM/WBEM можно использовать PyWBEM — open source библиотеку, написанную на Python, и обеспечивающую разработчикам и системным администраторам реализацию протокола CIM для доступа к CIM-объектам и проведения различных операций с WBEM-сервером, работающим согласно SMI-S или другим CIM-спецификациям.

Для соединения с WBEM-сервером используем конструктор класса WBEMConnection:

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

Это виртуальное соединение, поскольку CIM-XML/WBEM работает поверх HTTP, реальное соединение происходит в момент вызова методов для экземпляра класса WBEMConnection. В соответствии с IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Example C-8, стр. 412), в качестве CIM namespace для СХД IBM Storwize будем использовать «root/ibm».

Обратите внимание, что для сбора статистики по протоколу CIM-XML/WBEM, необходимо включить пользователя в соответствующую группу безопасности. В противном случае при выполнении WBEM-запросов, вывод атрибутов экземпляра класса будет пустым.

Для доступа к статистике СХД пользователь, под которым осуществляется вызов конструктора WBEMConnection(), должен обладать правами по крайней мере RestrictedAdmin (есть для code_level > 7.8.0) или Administrator (не рекомендую по соображениям безопасности).

Подключаемся к СХД через SSH и смотрим номера групп:

> 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    

Добавляем пользователя zabbix в нужную группу:

> chuser -usergrp 5 zabbix

Кроме того, в соответствии с IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (стр. 415) нужно включить сбор статистики на СХД. Так, для сбора статистики каждую минуту:

> startstats -interval 1 

Проверяем:

> lssystem | grep statistics
statistics_status on
statistics_frequency 1

Чтобы получить все существующие классы СХД, необходимо использовать метод EnumerateClassNames().

Пример:

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

Для получения значений параметров СХД предназначен метод EnumerateInstances() класса WBEMConnection, возвращающий список экземпляров CIMInstance().

Пример:

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))

Для некоторых классов, содержащих большое множество экземпляров, таких как IBMTSSVC_StorageVolume, полный запрос всех экземпляров может быть довольно медленным. Он может генерировать большие объемы данных, которые должны быть подготовлены СХД, переданы по сети и обработаны скриптом. На такой случай есть метод ExecQuery(), позволяющий получить только интересующие нас свойства экземпляра класса. Этот метод предполагает использование языка запросов, подобного SQL — либо CIM Query Language (DMTF:CQL), либо WBEM Query Language (WQL), для опроса CIM-объектов СХД:

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

Чтобы определить, какие классы нам нужны для получения параметров объектов СХД, читаем документацию, например How system concepts map to CIM concepts.

Так, для получения параметров (не счётчиков производительности) физических дисков (Disk Drives) будем опрашивать Class IBMTSSVC_DiskDrive, для получения параметров Volumes — Class IBMTSSVC_StorageVolume, для получения параметров массивов — Class IBMTSSVC_Array, для получения параметров MDisks — Class IBMTSSVC_BackendVolume и т.д.

По производительности можно почитать Functional diagrams of the Common Information Model agent (конкретно — Block server performance subprofile) и IBM System Storage SAN Volume Controller and Storwize V7000 Best Practices and Performance Guidelines (Example C-11, стр. 415).

Для получения статистики СХД по Volumes, необходимо в качестве значения параметра ClassName указать IBMTSSVC_StorageVolumeStatistics. Необходимые для сбора статистики свойства класса IBMTSSVC_StorageVolumeStatistics можно посмотреть в Node Statistics.

Также, для анализа производительности можно использовать классы IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.

Для записи данных в систему мониторинга будем использовать механизм zabbix traps, реализованный на python в модуле py-zabbix. Структуру классов СХД и их свойств расположим в словаре в формате JSON.

Загружаем шаблон на сервер Zabbix, убеждаемся что с сервера мониторинга есть доступ к СХД по протоколу WEB (TCP/5989), размещаем конфигурационные файлы, скрипты обнаружения и мониторинга на сервере мониторинга. Далее добавляем в планировщик запуск скриптов. В итоге: мы обнаруживаем объекты СХД (массивы, физические и виртуальные диски, enclosures и многое другое), передаём их в Zabbix discoveries, считываем статус их параметров, считываем статистику производительности (perfomance counters), передаём всё это в соответствующие Zabbix Items нашего шаблона.

Шаблон Zabbix, python-скрипты, структуру классов СХД и их свойств, а также примеры конфигурационных файлов, можно найти здесь.

Источник: habr.com

Добавить комментарий