WSFC礦工
這是一個小型 Powershell 腳本,有助於從 Windows Server 故障轉移叢集 (WSFC) 取得指標值。
實際發布1.2.3
測試於:
- 生產模式:Windows Server 2008 R2 SP1、Powershell 2;
- 非生產模式:Windows Server 2012 R2、Powershell 4;
- 非生產模式:Windows Server 2016、Powershell 5.1。
支援的對象:
- 叢集- Windows Server 故障轉移叢集 (WSFC);
- ClusterNode - WSFC 節點;
- ClusterNetwork - WSFC 網路;
- ClusterNetworkInterface - 故障轉移叢集的網路介面卡;
- ClusterAvailableDisk - WSFC 可用(未使用)磁碟資源。該磁碟可以支援故障轉移群集並且對所有節點可見,但尚未屬於群集磁碟集的一部分。
- ClusterResourceDHCPService - WSFC 資源「DHCP 服務」;
- ClusterResourceGenericService - WSFC 資源「通用服務」;
- ClusterResourceVirtualMachine - WSFC 資源「虛擬機器」;
- ClusterResourceVirtualMachineConfiguration - WSFC 資源「虛擬機器配置」;
- ClusterResourceIPAddress - WSFC 資源「IP 位址」;
- ClusterResourceNetworkName - WSFC 資源「網路名稱」;
- ClusterResourcePhysicalDisk - WSFC 資源「實體磁碟」;
- ClusterResourceSQLServer - WSFC 資源「SQL Server」;
- ClusterResourceSQLServerAgent - WSFC 資源「SQL Server 代理程式」;
- ClusterSharedVolume - WSFC 共享磁碟區;
- ClusterQuorum - WSFC 群集的仲裁。
“Cluster”、“ClusterNode”物件的虛擬鍵:
- VirtualMachine.Online - 故障轉移叢集的資源「虛擬機器」處於線上狀態;
- VirtualMachine.Offline - ...處於離線狀態;
- VirtualMachine.OnlinePending - ...處於 OnlinePending 狀態;
- VirtualMachine.OfflinePending - ...處於 OfflinePending 狀態;
- VirtualMachine.SummaryInformation - 與群集資源「虛擬機器」相關的一組指標,並使用 WMI 查詢從 MsVM_virtualSystemManagementService 類別中獲取
- GenericService.Online - 故障轉移叢集的資源「Generic Service」處於線上狀態;
- GenericService.Offline - ...處於離線狀態;
ClusterParameter(請參閱 Get-ClusterParameter cndlet)表中包含的所有物件的虛擬鍵
- ClusterParameter.<metric> - ClusterParameter 表中物件的度量。
行動
- Discovery - 製作Zabbix的LLD JSON;
- Get - 從集合項目中取得指標;
- Sum - 集合項的指標總和;
- 計數- 計數收集項目。
獨立使用方法
# Get Cluster name
powershell -NoProfile -ExecutionPolicy "RemoteSigned" -File "wsfc.ps1" -Action "Get" -ObjectType "Cluster" -Key "Name" -Id "f4479814-35d4-41c5-babd-c0697769ac31"
# Get PercentFree metric value from SharedVolumeInfo.Partition table for volume with ID=b8b67dbf-e66f-443e-926e-be1d1621ece5
..."wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition.PercentFree" -Id "b8b67dbf-e66f-443e-926e-be1d1621ece5"
# Get total number of vCPUs assigned to all clustered VMs which hosted on Node with ID=00000000-0000-0000-0000-000000000001
... "wsfc.ps1" -Action "Sum" -ObjectType "ClusterNode" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get total number of Memory assigned (dynamically for WS2008 R2 SP1+) to all clustered VMs which placed in Cluster with ID=f4479814-35d4-41c5-babd-c0697769ac31
... "wsfc.ps1" -Action "Sum" -ObjectType "Cluster" -Key "SummaryInformation.VirtualMachine.NumberOfProcessors" -Id "00000000-0000-0000-0000-000000000001"
# Get formatted list of 'ClusterSharedVolume' object metrics accessed with property 'SharedVolumeInfo.Partition'. Verbose messages is enabled.
... "wsfc.ps1" -Action "Get" -ObjectType "ClusterSharedVolume" -Key "SharedVolumeInfo.Partition" -ID "8e8fb118-2601-4a06-ab9a-f0a1260bd247" -DefaultConsoleWidth -Verbose
如何與 Zabbix 一起使用
我建議開始使用 WSFC Miner 作為非叢集服務,使用 Zabbix 對其進行調整,然後使其叢集化。
####用作非叢集服務
- 將 zbx_wsfc.conf 包含到任何叢集節點上的 Zabbix Agent 配置中;
- 將wsfc.ps1放入C:zabbixscripts目錄。如果要將腳本放置到其他目錄,則必須編輯zbx_wsfc.conf以正確設定腳本的路徑;
- 將 Zabbix Agent/Server 的超時設定為 3 秒以上(可以是 10 或 30);
- 如果您需要使用.SummaryInformation。指標 - 您必須將 Zabbix 服務帳戶從「本機系統」變更為任何帳戶,該帳戶具有使用 FailoverClusters Cmdlet 的本機管理員權限,並有權透過網路對所有叢集節點進行 WMI 查詢。否則你會得到腳本錯誤;
- 將模板導入Zabbix Server;
- 在將範本連結到託管並停用不太重要的發現規則(可能是「虛擬機器」、「通用服務」、「叢集網路」)之前請三思。否則,您可以透過 PowerShell 呼叫獲得超過 9000% 的 CPU 負載;
- 祈禱並連結模板;
- 享受。
用作故障轉移通用服務
- 如果您想同時使用本機(非叢集)和故障轉移(叢集)Zabbix Agent - 您必須將「叢集代理」設定中的 Zabbix Agent 指令 ListenPort 從預設值變更為另一個未使用的(可能是 16092 左右)。否則,當叢集 Zabbix Agent 遷移時,您有時可能會收到錯誤 1067。這是由於代理程式的第一個啟動實例綁定到所有可用主機的位址,而第二個實例在啟動時剛剛退出;
- 在一個叢集節點上建立 Zabbix Agent 配置的副本(例如,稱為zabbix_agentd_WSFC-A.conf );
- 如果您之前沒有這樣做過,請將 zbx_wsfc.conf 包含到 Zabbix Agent 配置中;
- 選擇新的 IP 位址和網域名稱以與通用服務一起使用。它不應該是叢集的 IP 和主機名稱。將zabbix_agentd_WSFC-A.conf中的 ListenIP 和 Hostname 指令更改為新值;
- 將wsfc.ps1和zabbix_agentd_WSFC-A.conf放置到叢集中的每個節點(或嘗試使用 Windows Shares);
- 在每個節點上卸載本機 Zabbix Agent 服務並使用-m key 重新安裝(zabbix_agentd.exe -c ... -x、zabbix_agentd.exe -c ... -d、zabbix_agentd.exe -c ... -i -m, zabbix_agentd.exe -c ... -s -m);
- 在每個節點上使用zabbix_agentd_WSFC-A.conf和-m金鑰安裝第二個 Zabbix Agent 服務 (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m)。不要手動啟動該服務 - 它將由 WSFC 在服務的所有者節點上自動啟動;
- 如果您需要使用.SummaryInformation。指標 - 您必須將 Zabbix 服務帳戶從「本機系統」變更為任何帳戶,該帳戶具有使用 FailoverClusters Cmdlet 的本機管理員權限,並有權透過網路對所有叢集節點進行 WMI 查詢。否則你會得到腳本錯誤;
- 使用故障轉移叢集 MMC 為您的叢集建立新的“通用服務”,為其指派在步驟 4 中定義的 IP 位址和主機名稱;
- 將模板導入Zabbix Server;
- 在將範本連結到託管並停用不太重要的發現規則(可能是「虛擬機器」、「通用服務」、「叢集網路」)之前請三思。否則,您可以透過 PowerShell 呼叫獲得超過 9000% 的 CPU 負載;
- 在 Zabbix 伺服器上使用步驟 4 中的 IP 位址和主機名稱建立新主機;
- 祈禱並連結模板;
- 啟動您在步驟 9 中使用故障轉移群集 MMC 建立的通用服務;
- 享受。或許。
注意不要嘗試將 Zabbix v2.4 範本匯入 Zabbix v2.4之前的版本。您需要編輯 .xml 檔案並在 discovery_rule - 過濾器標記區域進行一些更改,並將觸發器表達式中的#更改為<> 。我會嘗試為舊的 Zabbix 製作模板。
注意在模板中使用的 Item 類型為Zabbix Agent (active) 。您必須設定 Zabbix Agent 的ServerActive指令或將 Item 的類型變更為Zabbix Agent 。在這種情況下,必須增加 Zabbix Server 輪詢器的數量,因為任何 PowerShell 腳本的運作都會將輪詢器執行緒凍結到 2 秒(在我的硬體上)。
提示
- 若要檢視金鑰,請執行不含-Key選項的腳本: ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]。請注意,並非所有物件在 ClusterParameter 和 SummaryInformation 表中都有相關指標(嘗試將此鍵與「ClusterResourceVirtualMachine」物件一起使用進行測試)。您可以參考MSDN了解資訊;)
- 請閱讀發現規則和項目的描述以查找有用的信息(指向描述指標的 MSDN 頁面的連結);
- 如果您在 VM 名稱中使用非英語(例如俄語西里爾字母)符號並希望在 Zabbix Server 端獲得正確的 UTF-8,則必須將-consoleCP your_native_codepage參數新增至命令列。例如,要從俄語西里爾字母代碼頁 (CP866) 進行轉換,請使用... "wsfc.ps1" ... -consoleCP CP866
- 對於獨立模式下的偵錯,請使用-defaultConsoleWidth選項在執行腳本時保留控制台預設寬度,並使用-Verbose取得其他處理資訊;
- 如果您得到 Zabbix 的「應該是 JSON」 - 嘗試增加wsfc.ps1內 CONSOLE_WIDTH 常數變數中的數值。 Powershell 使用控制台寬度來格式化輸出 JSON 行,並且可以打破它。
- 透過 ClusterNetworkInterface 發現,您可以使用 {#NETWORKADDRESS} 過濾不可路由的網路以排除不可 ping 的 IP 位址,以避免將相關項目切換到不支援的狀態。
請注意對 PowerShell 腳本的頻繁請求會佔用 CPU 並增加負載。為了避免這種情況 - 不要對 Zabbix 的資料項目使用較小的更新間隔並停用未使用的。