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 的数据项使用较小的更新间隔并禁用未使用的。