使用 Zabbix 監控 IBM Storwize 存儲

在本文中,我們將討論一些有關監控 IBM Storwize 存儲系統和其他支持 CIM/WBEM 協議的存儲系統的內容。 這種監控的必要性被排除在括號之外;我們將認為這是一個公理。 我們將使用Zabbix作為監控系統。

在最新版本的 Zabbix 中,公司開始更加關注模板 - 開始出現用於通過 IPMI 監控服務、DBMS、服務器硬件(IMM / iBMC)的模板。 存儲監控仍然是開箱即用的,因此要將有關存儲組件的狀態和性能的信息集成到Zabbix中,您需要使用自定義模板。 我提請您注意其中一個模板。

首先是一點理論。

要訪問 IBM Storwize 存儲的狀態和統計信息,您可以使用:

  1. CIM/WBEM 協議;
  2. RESTful API (從軟件版本 8.1.3 開始受 IBM Storwize 支持);
  3. SNMP 陷阱(有限的陷阱集,無統計數據);
  4. SSH 連接,然後是遠程連接 適合悠閒的 bash 腳本編寫.

有興趣的人可以在供應商文檔的相關部分以及文檔中了解有關各種監控方法的更多信息 IBM Spectrum Virtualize 腳本編寫.

我們將使用CIM/WBEM協議,該協議使我們能夠獲取存儲系統的參數,而無需對各種存儲系統的軟件進行重大更改。 CIM/WBEM 協議的工作原理是 存儲管理倡議規範 (SMI-S)。 存儲管理計劃 – 規範基於開放標準 CIM(通用信息模型) и WBEM(基於網絡的企業管理)定義的 分佈式管理任務組.

WBEM 在 HTTP 協議之上工作。 通過 WBEM,您不僅可以使用存儲系統,還可以使用 HBA、交換機和磁帶庫。

根據 SMI架構 и 確定基礎設施,SMI 實現的主要組件是 WBEM 服務器,它處理來自 WBEM 客戶端的 CIM-XML 請求(在我們的例子中,來自監控腳本):

使用 Zabbix 監控 IBM Storwize 存儲

CIM 是一種基於統一建模語言(UML)的面向對像模型。
託管項定義為具有表示託管數據和功能的屬性和方法的 CIM 類。

根據 www.snia.org/pywbem,要通過CIM / WBEM訪問存儲,可以使用PyWBEM,這是一個用Python編寫的開源庫,它為開發人員和系統管理員提供CIM協議的實現,以訪問CIM對象並與根據SMI操作的WBEM服務器執行各種操作-S或其他CIM規範。

要連接到 WBEM 服務器,請使用類構造函數 WBEM連接:

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 最佳實踐和性能指南(示例 C-8,第 412 頁),我們將使用“root/ibm”作為 IBM Storwize 存儲的 CIM 命名空間。

請注意,為了收集有關 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 最佳實踐和性能指南 (p. 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)

獲取存儲系統參數值的方法 枚舉實例() 返回實例列表的 WBEMConnection 類 CIM實例().

示例:

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),對所有實例的完整查詢可能會非常慢。 它可以生成大量數據,這些數據必須由存儲系統準備、通過網絡傳輸並由腳本處理。 對於這種情況,有一個方法 執行查詢(),它允許您僅獲取我們感興趣的類實例的屬性。 此方法涉及使用類似 SQL 的查詢語言(CIM 查詢語言 (DMTF:CQL) 或 WBEM 查詢語言 (WQL))來查詢 CIM 存儲對象:

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

為了確定我們需要哪些類來獲取存儲對象的參數,我們閱讀文檔,例如 系統概念如何映射到 CIM 概念.

因此,要獲取物理磁盤(磁盤驅動器)的參數(不是性能計數器),我們將查詢類 IBMTSSVC_DiskDrive,獲取卷參數 - 類 IBMTSSVC_StorageVolume,獲取數組參數 - 類 IBMTSSVC_Array,獲取 MDisks 參數 - 類 IBMTSSVC_BackendVolume,等等。

您可以閱讀有關性能的信息 公共信息模型代理的功能圖 (具體來說 - 塊服務器性能子配置文件)以及 IBM System Storage SAN Volume Controller 和 Storwize V7000 最佳實踐和性能指南(示例 C-11,第 415 頁)。

要獲取卷的存儲統計信息,您需要指定 IBMTSSVC_StorageVolumeStatistics 作為 ClassName 參數的值。 收集統計信息所需的 IBMTSSVC_StorageVolumeStatistics 類的屬性可以在以下位置找到: 節點統計.

此外,對於性能分析,您可以使用類 IBMTSSVC_BackendVolumeStatistics、IBMTSSVC_DiskDriveStatistics、IBMTSSVC_NodeStatistics。

要將數據寫入監控系統,我們將使用該機制 zabbix陷阱,在Python模塊中實現 py-zabbix。 存儲類的結構及其屬性將以 JSON 格式放置在字典中。

我們將模板上傳到Zabbix服務器,確保監控服務器可以通過WEB協議(TCP/5989)訪問存儲,將配置文件、檢測和監控腳本放置在監控服務器上。 接下來,將腳本添加到調度程序。 結果:我們發現存儲對象(陣列、物理和虛擬磁盤、盤櫃等),將它們傳遞給 Zabbix discovery,讀取其參數的狀態,讀取性能統計信息(性能計數器),將所有這些傳輸到相應的我們模板的Zabbix 項目。

Zabbix模板、python腳本、存儲類的結構及其屬性以及配置文件的示例都可以 在這裡找到.

來源: www.habr.com

添加評論