У цій статті ми трохи поговоримо про моніторинг СГД IBM Storwize та інших СГД, які підтримують протоколи CIM/WBEM. Необхідність такого моніторингу залишена за дужками, вважатимемо це аксіомою. Як систему моніторингу будемо використовувати Zabbix.
В останніх версіях Zabbix компанія стала приділяти шаблонам набагато більше уваги - стали з'являтися шаблони моніторингу сервісів, СУБД, Servers hardware (IMM/iBMC) через IPMI. Моніторинг СГД поки залишається поза шаблонами з коробки, тому для інтеграції в Zabbix інформації про статус та продуктивність компонентів СГД потрібно використовувати кастомні шаблони. Один із таких шаблонів я пропоную вашій увазі.
Спочатку трохи теорії.
Для доступу до статусу та статистики СГД IBM Storwize можна використовувати:
Протоколи CIM/WBEM;
RESTful API (в IBM Storwize підтримується, починаючи з версії 8.1.3);
SNMP Traps (обмежений набір trap'ів, немає статистики);
Ті, хто цікавиться, можуть докладніше ознайомитися з різними методами моніторингу у відповідних розділах вендорської документації, а також у документі. IBM Spectrum Virtualize scripting.
WBEM працює поверх протоколу HTTP. Через WBEM можна працювати не тільки зі СГД, але й з HBA, комутаторами та стрічковими бібліотеками.
Згідно з SMI Architecture и Determine Infrastructure, основним компонентом реалізації SMI є WBEM-сервер, що обробляє CIM-XML запити від WBEM-клієнтів (у нашому випадку від скриптів моніторингу):
CIM – об'єктно-орієнтована модель, заснована на Unified Modeling Language (UML).
Керовані елементи визначаються у вигляді CIM-класів, які мають властивості та методи для представлення керованих даних та функцій.
Згідно з www.snia.org/pywbem, для доступу до СХД через CIM/WBEM можна використовувати PyWBEM — open source бібліотеку, написану на Python, та забезпечує розробникам та системним адміністраторам реалізацію протоколу CIM для доступу до CIM-об'єктів та проведення різних операцій з WBEM-сервером, що працює згідно з SMI-S або іншим CIM-спеціфікаціям.
Для з'єднання з WBEM-сервером використовуємо конструктор класу WBEMConnection:
Це віртуальне з'єднання, оскільки 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)
Так, для отримання параметрів (не лічильників продуктивності) фізичних дисків (Disk Drives) опитуватимемо Class IBMTSSVC_DiskDrive, для отримання параметрів Volumes - Class IBMTSSVC_StorageVolume, для отримання параметрів масивів - Class IBMTSSVC_Array, для отримання параметрів MDisks - BackVTS.
Для отримання статистики СХД по 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-скрипти, структуру класів СГД та їх властивостей, а також приклади конфігураційних файлів можна знайти тут.