WSFC 채굴기
이는 WSFC(Windows Server 장애 조치 클러스터)에서 메트릭 값을 가져오는 데 대한 간단한 Powershell 스크립트 도움말입니다.
실제 릴리스 1.2.3
테스트 대상:
- 프로덕션 모드: Windows Server 2008 R2 SP1, Powershell 2;
- 비프로덕션 모드: Windows Server 2012 R2, Powershell 4;
- 비프로덕션 모드: Windows Server 2016, Powershell 5.1.
지원되는 객체:
- 클러스터 - WSFC(Windows Server 장애 조치 클러스터);
- 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 - 온라인 상태의 장애 조치 클러스터 리소스 '일반 서비스'입니다.
- GenericService.Offline - ... 오프라인 상태입니다.
ClusterParameter(Get-ClusterParameter cndlet 참조) 테이블에 포함된 모든 객체에 대한 가상 키
- ClusterParameter.<metric> - ClusterParameter 테이블의 개체 지표입니다.
행위
- 발견 - Zabbix의 LLD JSON을 만듭니다.
- 가져오기 - 컬렉션 항목에서 측정항목을 가져옵니다.
- 합계 - 컬렉션 항목의 측정항목 합계입니다.
- 개수 - 컬렉션 항목의 개수를 계산합니다.
독립형 사용 방법
# 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로 조정한 다음 클러스터링하도록 권장합니다.
####비클러스터형 서비스로 사용
- 모든 클러스터 노드의 Zabbix 에이전트 구성에 zbx_wsfc.conf를 포함합니다.
- wsfc.ps1을 C:zabbixscripts 디렉터리에 넣습니다. 스크립트를 다른 디렉토리에 배치하려면 zbx_wsfc.conf를 편집하여 스크립트 경로를 올바르게 설정해야 합니다.
- Zabbix 에이전트/서버의 시간 초과를 3초 이상(10 또는 30일 수 있음)으로 설정합니다.
- .SummaryInformation을 사용해야 하는 경우. 메트릭 - Zabbix 서비스 계정을 "로컬 시스템"에서 FailoverClusters Cmdlet을 사용할 수 있는 로컬 관리자 권한이 있고 네트워크를 통해 모든 클러스터 노드에 WMI 쿼리를 만들 수 있는 권한이 있는 계정으로 변경해야 합니다. 그렇지 않으면 스크립트 오류가 발생합니다.
- Zabbix 서버로 템플릿을 가져옵니다.
- 별로 중요하지 않은 검색 규칙("가상 머신", "일반 서비스", "클러스터 네트워크" 등)을 호스팅하고 비활성화하기 위해 템플릿을 연결하기 전에 두 번 생각하십시오. 그렇지 않으면 PowerShell 호출로 CPU 로드가 9000%를 넘을 수 있습니다.
- 기도와 링크 템플릿;
- 즐기다.
장애 조치 일반 서비스로 사용
- 로컬(비클러스터형) 및 장애 조치(클러스터형) Zabbix 에이전트를 동시에 사용하려면 "클러스터형 에이전트" 구성에서 Zabbix 에이전트 지시어 ListenPort를 기본값에서 사용되지 않는 다른 값(16092 정도일 수 있음)으로 변경해야 합니다. 그렇지 않으면 클러스터된 Zabbix 에이전트가 마이그레이션될 때 오류 1067이 발생할 수 있습니다. 이는 에이전트의 첫 번째 시작된 인스턴스가 사용 가능한 모든 호스트 주소에 바인딩되고 두 번째 인스턴스가 시작될 때 종료되기 때문입니다.
- 하나의 클러스터 노드에 Zabbix 에이전트 구성 복사본(예: zabbix_agentd_WSFC-A.conf )을 만듭니다.
- 이전에 이 작업을 수행하지 않은 경우 zbx_wsfc.conf를 Zabbix 에이전트 구성에 포함하십시오.
- 일반 서비스와 함께 사용할 새 IP 주소와 도메인 이름을 선택하세요. 클러스터의 IP 및 호스트 이름이 아니어야 합니다. zabbix_agentd_WSFC-A.conf 에서 ListenIP 및 호스트 이름 지시문을 새 값으로 변경합니다.
- 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_agentd_WSFC-A.conf 및 -m 키(zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m)를 사용하여 두 번째 Zabbix 에이전트 서비스를 설치합니다. 해당 서비스를 수동으로 시작하지 마십시오. 서비스의 소유자 노드에서 WSFC에 의해 자동으로 시작됩니다.
- .SummaryInformation을 사용해야 하는 경우. 메트릭 - Zabbix 서비스 계정을 "로컬 시스템"에서 FailoverClusters Cmdlet을 사용할 수 있는 로컬 관리자 권한이 있고 네트워크를 통해 모든 클러스터 노드에 WMI 쿼리를 만들 수 있는 권한이 있는 계정으로 변경해야 합니다. 그렇지 않으면 스크립트 오류가 발생합니다.
- 장애 조치 클러스터 MMC를 사용하여 클러스터에 대한 새 "일반 서비스"를 생성하고 4단계에서 정의한 IP 주소와 호스트 이름을 할당합니다.
- Zabbix 서버로 템플릿을 가져옵니다.
- 별로 중요하지 않은 검색 규칙("가상 머신", "일반 서비스", "클러스터 네트워크" 등)을 호스팅하고 비활성화하기 위해 템플릿을 연결하기 전에 두 번 생각하십시오. 그렇지 않으면 PowerShell 호출로 CPU 로드가 9000%를 넘을 수 있습니다.
- Zabbix 서버에서 4단계의 IP 주소와 호스트 이름을 사용하여 새 호스트를 만듭니다.
- 기도와 링크 템플릿;
- 장애 조치 클러스터 MMC를 사용하여 9단계에서 생성한 일반 서비스를 시작합니다.
- 즐기다. 아마도.
참고 Zabbix v2.4 템플릿을 Zabbix v2.4 이전 버전 으로 가져오지 마십시오. .xml 파일을 편집하고 discovery_rule - 필터 태그 영역에서 일부 변경을 수행하고 트리거 표현식에서 #을 <> 로 변경해야 합니다. 예전 Zabbix로 템플릿을 만들어 보겠습니다.
참고 템플릿에서 사용된 항목 유형은 Zabbix Agent(활성) 입니다. Zabbix Agent의 ServerActive 지시문을 설정하거나 항목 유형을 Zabbix Agent 로 변경해야 합니다. 이 경우 Zabbix Server의 폴러 수를 늘려야 합니다. 왜냐하면 PowerShell 스크립트를 실행하면 폴러 스레드가 2초(내 하드웨어에서)로 정지되기 때문입니다.
힌트
- 키를 보려면 -Key 옵션 없이 스크립트를 실행하세요. ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"]. 모든 개체가 ClusterParameter 및 SummaryInformation 테이블에 관련 지표를 갖고 있는 것은 아닙니다. 테스트를 위해 'ClusterResourceVirtualMachine' 개체와 함께 이 키를 사용해 보십시오. 자세한 내용은 MSDN을 참조하세요.)
- 유용한 정보를 찾으려면 검색 규칙 및 항목에 대한 설명을 읽으십시오(메트릭을 설명하는 MSDN 페이지 링크).
- VM 이름에 영어가 아닌(예: 러시아어 키릴 문자) 기호를 사용하고 Zabbix 서버 측에서 올바른 UTF-8을 얻으려면 -consoleCP your_native_codepage 매개 변수를 명령줄에 추가해야 합니다. 예를 들어 러시아어 키릴 코드 페이지(CP866)에서 변환하려면 ... "wsfc.ps1" ... -consoleCP CP866을 사용합니다.
- 독립형 모드에서 디버그하려면 -defaultConsoleWidth 옵션을 사용하여 스크립트를 실행하는 동안 콘솔 기본 너비를 유지하고 -Verbose를 사용하여 추가 처리 정보를 얻으세요.
- Zabbix의 "JSON이어야 합니다"라는 메시지가 표시되면 wsfc.ps1 내부의 CONSOLE_WIDTH 상수 변수에서 숫자 값을 늘려보세요. Powershell은 콘솔 너비를 사용하여 출력 JSON 라인의 형식을 지정하고 이를 깨뜨릴 수 있습니다.
- ClusterNetworkInterface 검색을 사용하면 {#NETWORKADDRESS}를 사용하여 라우팅할 수 없는 네트워크를 필터링하여 핑할 수 없는 IP 주소를 제외함으로써 관련 항목이 지원되지 않는 상태로 전환되는 것을 방지할 수 있습니다.
PowerShell 스크립트에 대한 빈번한 요청이 CPU를 소모하고 부하를 증가시키므로 주의하세요 . 이를 방지하려면 Zabbix의 데이터 항목에 작은 업데이트 간격을 사용하지 말고 사용하지 않음을 비활성화하십시오.