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 — IP-адрес ресурса WSFC;
- ClusterResourceNetworkName — ресурс WSFC «Сетевое имя»;
- ClusterResourcePhysicalDisk — ресурс WSFC «Физический диск»;
- ClusterResourceSQLServer — ресурс WSFC «SQL Server»;
- ClusterResourceSQLServerAgent — ресурс WSFC «Агент SQL Server»;
- ClusterSharedVolume — общие тома WSFC;
- ClusterQuorum — кворум кластера WSFC.
Виртуальные ключи для объектов Cluster, ClusterNode:
- VirtualMachine.Online — ресурс отказоустойчивого кластера «Виртуальная машина» в состоянии «В сети»;
- VirtualMachine.Offline — ... в состоянии Offline;
- VirtualMachine.OnlinePending — ... в состоянии OnlinePending;
- VirtualMachine.OfflinePending — ... в состоянии OfflinePending;
- VirtualMachine.SummaryInformation — набор метрик, связанных с ресурсом кластера «Виртуальная машина» и извлекаемых из класса MsVM_virtualSystemManagementService с помощью WMI-запроса.
- GenericService.Online — ресурс отказоустойчивого кластера «Универсальная служба» в состоянии «В сети»;
- GenericService.Offline — ... в состоянии Offline;
Виртуальные ключи для всех объектов, содержащихся в таблице ClusterParameter (см. командлет Get-ClusterParameter).
- ClusterParameter.<metric> - метрика объекта из таблицы ClusterParameter.
Действия
- Открытие — создание LLD JSON Zabbix;
- Получить — получить метрику из элемента коллекции;
- Сумма — сумма показателей элементов коллекции;
- Подсчет — подсчет предметов коллекции.
Как использовать автономно
# 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 на любом узле кластера;
- Поместите wsfc.ps1 в каталог C:zabbixscripts . Если вы хотите поместить скрипт в другой каталог, вам необходимо отредактировать zbx_wsfc.conf, чтобы правильно указать путь к скрипту;
- Установите время ожидания агента/сервера Zabbix более 3 секунд (может быть 10 или 30);
- Если вам нужно использовать .SummaryInformation. метрики — вы должны изменить учетную запись службы Zabbix с «Локальной системы» на любую учетную запись, которая имеет права локального администратора для использования командлетов FailoverClusters и имеет права отправлять WMI-запросы ко всем узлам кластера по сети. В противном случае вы получите ошибку сценария;
- Импортировать шаблон на Zabbix Server;
- Подумайте дважды, прежде чем связать шаблон с хостом и отключить правила обнаружения, которые не так важны (могут быть «Виртуальные машины», «Общие службы», «Кластерные сети»). В противном случае вы можете получить загрузку процессора более 9000% с помощью вызовов PowerShell;
- Шаблон молитвы и ссылки;
- Наслаждаться.
Использовать в качестве общей службы аварийного переключения
- Если вы хотите использовать локальный (некластеризованный) и аварийный (кластерный) агент Zabbix одновременно - вам необходимо изменить директиву ListenPort агента Zabbix в конфигурации «кластерного агента» со значения по умолчанию на другой неиспользуемый (может быть 16092 или около того). В противном случае вы можете когда-нибудь получить ошибку 1067 при миграции кластерного агента Zabbix. Это связано с тем, что первый запущенный экземпляр Агента привязывается ко всем доступным адресам хоста, а второй экземпляр просто завершает работу при запуске;
- Создайте копию конфигурации агента Zabbix (например, назовите ее zabbix_agentd_WSFC-A.conf ) на одном узле кластера;
- Включите zbx_wsfc.conf в конфиг Zabbix Agent, если вы не сделали этого раньше;
- Выберите новый IP-адрес и доменное имя для использования с Generic Service. Это не должны быть IP-адрес и имя хоста кластера. Измените директивы ListenIP и Hostname на новые значения в zabbix_agentd_WSFC-A.conf ;
- Поместите wsfc.ps1 и zabbix_agentd_WSFC-A.conf на каждый узел кластера (или попробуйте использовать общие ресурсы Windows);
- На каждом узле удалите службу локального агента Zabbix и установите ее заново с ключом -m (zabbix_agentd.exe -c ... -x, zabbix_agentd.exe -c ... -d, zabbix_agentd.exe -c ... -i -m, zabbix_agentd.exe -c ... -s -m);
- На каждом узле установите службу второго агента Zabbix с помощью zabbix_agentd_WSFC-A.conf и ключа -m (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m). Не запускайте эту службу вручную — она будет автоматически запущена WSFC на узле владельца службы;
- Если вам нужно использовать .SummaryInformation. метрики — вы должны изменить учетную запись службы Zabbix с «Локальной системы» на любую учетную запись, которая имеет права локального администратора для использования командлетов FailoverClusters и имеет права отправлять WMI-запросы ко всем узлам кластера по сети. В противном случае вы получите ошибку сценария;
- Создайте новую «Общую службу» для вашего кластера с помощью Failover Cluster MMC, присвойте ей IP-адрес и имя хоста, которые были определены на шаге 4;
- Импортировать шаблон на Zabbix Server;
- Подумайте дважды, прежде чем связать шаблон с хостом и отключить правила обнаружения, которые не так важны (могут быть «Виртуальные машины», «Общие службы», «Кластерные сети»). В противном случае вы можете получить загрузку процессора более 9000% с помощью вызовов PowerShell;
- На сервере Zabbix создайте новый хост с IP-адресом и именем хоста из шага 4;
- Шаблон молитвы и ссылки;
- Запустите универсальную службу, созданную на шаге 9, с помощью MMC отказоустойчивого кластера;
- Наслаждаться. Может быть.
Примечание. Не пытайтесь импортировать шаблон Zabbix v2.4 в Zabbix до версии 2.4. Вам необходимо отредактировать файл .xml и внести некоторые изменения в область Discover_rule — фильтровать теги и изменить # на <> в выражениях триггера. Попробую сделать шаблон к старому Zabbix.
Примечание. В шаблоне используется тип элемента Zabbix Agent (активный) . Вы должны настроить директиву ServerActive Агента Zabbix или изменить тип элемента на Агент Zabbix . В этом случае количество опросов Zabbix Server должно быть увеличено, поскольку любой запуск сценария PowerShell заморозит поток опроса до 2 секунд (на моем оборудовании).
Подсказки
- Чтобы увидеть ключи, запустите скрипт без опции -Key : ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. Обратите внимание, что не все объекты имеют связанные метрики в таблицах ClusterParameter и SummaryInformation (попробуйте использовать эти ключи с объектом ClusterResourceVirtualMachine для тестирования). Вы можете обратиться к MSDN за информацией;)
- Прочтите описание правил и элементов обнаружения, чтобы найти полезную информацию (ссылки на страницы MSDN, описывающие метрики);
- Если вы используете неанглийские символы (например, русскую кириллицу) в именах виртуальных машин и хотите получить правильный UTF-8 на стороне Zabbix Server, то вам необходимо добавить в командную строку параметр -consoleCP your_native_codepage . Например, чтобы преобразовать кодовую страницу из русской кириллицы (CP866), используйте ... "wsfc.ps1" ... -consoleCP CP866.
- Для отладки в автономном режиме используйте параметр -defaultConsoleWidth , чтобы оставить ширину консоли по умолчанию при запуске сценария, и -Verbose , чтобы получить дополнительную информацию об обработке;
- Если вы получаете сообщение Zabbix «Должно быть JSON» — попробуйте увеличить числовое значение в постоянной переменной CONSOLE_WIDTH внутри wsfc.ps1 . Powershell использует ширину консоли для форматирования выходных JSON-строк и может сломать ее.
- С помощью обнаружения ClusterNetworkInterface вы можете использовать {#NETWORKADDRESS} для фильтрации немаршрутизируемых сетей с целью исключения непроверяемых IP-адресов, чтобы избежать переключения связанных элементов в неподдерживаемое состояние.
Остерегайтесь частых запросов к сценарию PowerShell, которые съедают процессор и увеличивают нагрузку. Чтобы избежать этого - не используйте малые интервалы обновления с элементами данных Zabbix и отключите неиспользуемые.