Mineiro WSFC
Esta é uma pequena ajuda de script do Powershell para buscar valores de métricas do Windows Server Failover Cluster (WSFC).
Versão real 1.2.3
Testado em:
- Modo de produção: Windows Server 2008 R2 SP1, Powershell 2;
- Modo de não produção: Windows Server 2012 R2, Powershell 4;
- Modo de não produção: Windows Server 2016, Powershell 5.1.
Objetos suportados:
- Cluster - Cluster de Failover do Windows Server (WSFC);
- ClusterNode - nó WSFC;
- ClusterNetwork - Rede WSFC;
- ClusterNetworkInterface - adaptador de rede do cluster de failover;
- ClusterAvailableDisk - Recursos de disco disponíveis (não utilizados) do WSFC. Esse disco pode suportar cluster de failover e é visível para todos os nós, mas ainda não faz parte do conjunto de discos clusterizados.;
- ClusterResourceDHCPService - recurso WSFC 'Serviço DHCP';
- ClusterResourceGenericService - recurso WSFC 'Serviço Genérico';
- ClusterResourceVirtualMachine - recurso WSFC 'Máquina Virtual';
- ClusterResourceVirtualMachineConfiguration - recurso WSFC 'Configuração de Máquina Virtual';
- ClusterResourceIPAddress - recurso WSFC 'Endereço IP';
- ClusterResourceNetworkName - recurso WSFC 'Nome da Rede';
- ClusterResourcePhysicalDisk - recurso WSFC 'Disco Físico';
- ClusterResourceSQLServer - recurso WSFC 'SQL Server';
- ClusterResourceSQLServerAgent - recurso WSFC 'SQL Server Agent';
- ClusterSharedVolume - Volumes Compartilhados WSFC;
- ClusterQuorum – quórum do cluster WSFC.
Chaves virtuais para objetos 'Cluster', 'ClusterNode':
- VirtualMachine.Online - recurso 'Máquina Virtual' do cluster de failover no estado Online;
- VirtualMachine.Offline - ... no estado Offline;
- VirtualMachine.OnlinePending - ... no estado OnlinePending;
- VirtualMachine.OfflinePending - ... no estado OfflinePending;
- VirtualMachine.SummaryInformation - conjunto de métricas relacionadas ao recurso de cluster 'Virtual Machine' e obtidas da classe MsVM_virtualSystemManagementService com consulta WMI
- GenericService.Online - recurso do cluster de failover 'Serviço Genérico' no estado Online;
- GenericService.Offline - ... no estado Offline;
Chaves virtuais para todos os objetos contidos na tabela ClusterParameter (consulte Get-ClusterParameter cndlet)
- ClusterParameter.<metric> - métrica do objeto da tabela ClusterParameter.
Ações
- Discovery - Faça JSON LLD do Zabbix;
- Get - Obtém métrica do item da coleção;
- Soma - Soma métricas dos itens da coleção;
- Contar - Contar itens da coleção.
Como usar autônomo
# 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
Como usar com Zabbix
Eu recomendo começar a usar o WSFC Miner como serviço não clusterizado, ajustá-lo com o Zabbix e então torná-lo clusterizado.
####Use como serviço não clusterizado
- Inclua zbx_wsfc.conf na configuração do Zabbix Agent em qualquer nó do cluster;
- Coloque wsfc.ps1 no diretório C:zabbixscripts . Se você quiser colocar o script em outro diretório, você deve editar zbx_wsfc.conf para definir corretamente o caminho do script;
- Defina o Timeout do Agente/Servidor Zabbix para mais de 3 segundos (pode ser 10 ou 30);
- Se você precisar usar .SummaryInformation. métricas - você deve alterar a conta do Zabbix Service de "Sistema Local" para qualquer conta que tenha direitos de administrador local para usar cmdlets FailoverClusters e tenha direitos para fazer consultas WMI para todos os nós do cluster na rede. Caso contrário, você receberá um erro de script;
- Importar template para Zabbix Server;
- Pense duas vezes antes de vincular o Template para hospedar e desabilitar regras de descoberta que não sejam tão importantes (podem ser “Máquinas Virtuais”, “Serviços Genéricos”, “Redes Cluster”). Caso contrário, você poderá obter mais de 9.000% de carga da CPU com chamadas do PowerShell;
- Modelo de oração e link;
- Aproveitar.
Usar como serviço genérico de failover
- Se você quiser usar o Zabbix Agent local (não clusterizado) e failover (clusterizado) ao mesmo tempo - você deve alterar a diretiva ListenPort do Zabbix Agent na configuração "agente clusterizado" do padrão para outra não utilizada (pode ser 16092 ou mais). Caso contrário, em algum momento você poderá obter o erro 1067 quando o Zabbix Agent em cluster for migrado. Isso ocorre porque a primeira instância iniciada do Agente se liga a todos os endereços de host disponíveis e a segunda instância simplesmente sai quando iniciada;
- Crie uma cópia da configuração do Zabbix Agent (chame-a de zabbix_agentd_WSFC-A.conf , por exemplo) em um nó do cluster;
- Inclua zbx_wsfc.conf na configuração do Zabbix Agent, caso ainda não tenha feito isso;
- Escolha o novo endereço IP e nome de domínio para usar com o Serviço Genérico. Não deve ser o IP e o Hostname do Cluster. Altere a diretiva ListenIP & Hostname para novos valores em zabbix_agentd_WSFC-A.conf ;
- Coloque wsfc.ps1 e zabbix_agentd_WSFC-A.conf em cada nó do cluster (ou tente usar compartilhamentos do Windows);
- Em cada nó, desinstale o serviço do Agente Zabbix local e instale-o novamente com a chave -m (zabbix_agentd.exe -c ... -x, zabbix_agentd.exe -c ... -d, zabbix_agentd.exe -c ... -i -m,zabbix_agentd.exe -c... -s -m);
- Em cada nó, instale o segundo serviço do Zabbix Agent com zabbix_agentd_WSFC-A.conf e chave -m (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m). Não inicie esse serviço manualmente - ele será iniciado automaticamente pelo WSFC no nó Proprietário do serviço;
- Se você precisar usar .SummaryInformation. métricas - você deve alterar a conta do Zabbix Service de "Sistema Local" para qualquer conta que tenha direitos de administrador local para usar cmdlets FailoverClusters e tenha direitos para fazer consultas WMI para todos os nós do cluster na rede. Caso contrário, você receberá um erro de script;
- Crie um novo "Serviço Genérico" para o seu cluster com Failover Cluster MMC, atribua a ele um endereço IP e um nome de host, que foi definido no passo 4;
- Importar template para Zabbix Server;
- Pense duas vezes antes de vincular o Template para hospedar e desabilitar regras de descoberta que não sejam tão importantes (podem ser “Máquinas Virtuais”, “Serviços Genéricos”, “Redes Cluster”). Caso contrário, você poderá obter mais de 9.000% de carga da CPU com chamadas do PowerShell;
- No servidor Zabbix crie um novo host com endereço IP e nome de host do passo 4;
- Modelo de oração e link;
- Inicie o serviço genérico, criado na etapa 9 com o Failover Cluster MMC;
- Aproveitar. Talvez.
Nota Não tente importar o modelo Zabbix v2.4 para o Zabbix anterior à v2.4. Você precisa editar o arquivo .xml e fazer algumas alterações na área discovery_rule - filter tags e alterar # para <> nas expressões de gatilho. Vou tentar fazer um template para o antigo Zabbix.
Nota No template utilizado o tipo de item Zabbix Agent (active) . Você deve configurar a diretiva ServerActive do Zabbix Agent ou alterar o tipo do Item para Zabbix Agent . Neste caso o número de pollers do Zabbix Server deve ser aumentado, pois qualquer execução do script PowerShell irá congelar o thread do poller para 2 segundos (no meu hardware).
Dicas
- Para ver as chaves, execute o script sem a opção -Key : ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. Observe que nem todos os objetos têm métricas relacionadas nas tabelas ClusterParameter e SummaryInformation (tente usar essas chaves com o objeto 'ClusterResourceVirtualMachine' para teste). Você pode consultar o MSDN para obter informações;)
- Leia a descrição das regras e itens de descoberta para encontrar informações úteis (links para páginas do MSDN que descrevem métricas);
- Se você usar símbolos diferentes do inglês (por exemplo, cirílico russo) nos nomes das VMs e quiser obter o UTF-8 correto no lado do Zabbix Server, então você deve adicionar o parâmetro -consoleCP your_native_codepage à linha de comando. Por exemplo, para converter da página de código cirílico russo (CP866), use ... "wsfc.ps1" ... -consoleCP CP866
- Para depuração no modo autônomo, use a opção -defaultConsoleWidth para deixar a largura padrão do console enquanto executa o script e -Verbose para obter informações adicionais de processamento;
- Se você obtiver "Deveria ser JSON" do Zabbix - tente aumentar o valor do número na variável constante CONSOLE_WIDTH dentro de wsfc.ps1 . O Powershell usa a largura do console para formatar linhas JSON de saída e pode quebrá-las.
- Com a descoberta ClusterNetworkInterface você pode usar {#NETWORKADDRESS} para filtrar redes não roteáveis para excluir endereços IP não pingáveis para evitar alternar itens relacionados para um estado não suportado.
Cuidado com solicitações frequentes para script do PowerShell que consomem CPU e aumentam a carga. Para evitá-lo - não use pequenos intervalos de atualização com os itens de dados do Zabbix e desative os não utilizados.