Моніторинг СГД 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 працюють відповідно до Специфікація Ініціативи управління сховищами (SMI-S). Storage Management Initiative – Specification заснована на відкритих стандартах CIM (Загальна інформаційна модель) и WBEM (Web-Based Enterprise Management), визначених Оперативна група з розподіленого управління.

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 та 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 та 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 - BackVTS.

За продуктивністю можна почитати Функціональні diagrams of Common Information Model agent (конкретно - Block server performance subprofile) та IBM System Storage SAN Volume Controller та 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), передаємо все це у відповідні шаблони Items.

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

Джерело: habr.com

Додати коментар або відгук