คนงานเหมือง WSFC
นี่เป็นสคริปต์ Powershell เล็กน้อยที่ช่วยในการดึงค่าของเมตริกจาก Windows Server Failover Cluster (WSFC)
การเปิดตัวจริง 1.2.3
ทดสอบเมื่อ:
- โหมดการผลิต: Windows Server 2008 R2 SP1, Powershell 2;
- โหมดที่ไม่ใช่การผลิต: Windows Server 2012 R2, Powershell 4;
- โหมดที่ไม่ใช่การผลิต: Windows Server 2016, Powershell 5.1
วัตถุที่รองรับ:
- คลัสเตอร์ - คลัสเตอร์ล้มเหลวเซิร์ฟเวอร์ Windows (WSFC);
- ClusterNode - โหนด WSFC;
- ClusterNetwork - เครือข่าย WSFC;
- ClusterNetworkInterface - อะแดปเตอร์เครือข่ายของคลัสเตอร์ล้มเหลว
- ClusterAvailableDisk - ทรัพยากรดิสก์ที่มีอยู่ WSFC (ไม่ได้ใช้) ดิสก์นั้นสามารถรองรับ Failover Clustering และโหนดทั้งหมดจะมองเห็นได้ แต่ยังไม่ได้เป็นส่วนหนึ่งของชุดดิสก์แบบคลัสเตอร์
- ClusterResourceDHCPService - ทรัพยากร WSFC 'บริการ DHCP';
- ClusterResourceGenericService - ทรัพยากร WSFC 'บริการทั่วไป';
- ClusterResourceVirtualMachine - ทรัพยากร WSFC 'เครื่องเสมือน';
- ClusterResourceVirtualMachineConfiguration - ทรัพยากร WSFC 'การกำหนดค่าเครื่องเสมือน';
- ClusterResourceIPAddress - ทรัพยากร WSFC 'ที่อยู่ IP';
- ClusterResourceNetworkName - ทรัพยากร WSFC 'ชื่อเครือข่าย';
- ClusterResourcePhysicalDisk - ทรัพยากร WSFC 'ฟิสิคัลดิสก์';
- ClusterResourceSQLServer - ทรัพยากร WSFC 'SQL Server';
- ClusterResourceSQLServerAgent - ทรัพยากร WSFC 'SQL Server Agent';
- ClusterSharedVolume - วอลุ่มที่ใช้ร่วมกันของ WSFC;
- ClusterQuorum - ควอรัมของคลัสเตอร์ WSFC
ปุ่มเสมือนสำหรับวัตถุ 'คลัสเตอร์', 'ClusterNode':
- VirtualMachine.Online - ทรัพยากรของคลัสเตอร์ล้มเหลว 'Virtual Machine' ในสถานะออนไลน์
- VirtualMachine.Offline - ... ในสถานะออฟไลน์;
- VirtualMachine.OnlinePending - ... ในสถานะ OnlinePending;
- VirtualMachine.OfflinePending - ... ในสถานะ OfflinePending;
- VirtualMachine.SummaryInformation - ชุดของตัวชี้วัดที่เกี่ยวข้องกับทรัพยากรคลัสเตอร์ 'Virtual Machine' และดึงมาจากคลาส MsVM_virtualSystemManagementService พร้อมแบบสอบถาม WMI
- GenericService.Online - ทรัพยากรของคลัสเตอร์ล้มเหลว 'บริการทั่วไป' ในสถานะออนไลน์
- GenericService.Offline - ... ในสถานะออฟไลน์;
คีย์เสมือนสำหรับวัตถุทั้งหมดที่มีอยู่ในตาราง ClusterParameter (ดู Get-ClusterParameter cndlet)
- 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 Agent บนโหนดคลัสเตอร์ใดๆ
- วาง wsfc.ps1 ไปที่ C:zabbixscripts dir หากคุณต้องการวางสคริปต์ไปยังไดเร็กทอรีอื่น คุณต้องแก้ไข zbx_wsfc.conf เพื่อตั้งค่าพาธของสคริปต์อย่างเหมาะสม
- ตั้งค่า การหมดเวลา ของตัวแทน / เซิร์ฟเวอร์ของ Zabbix ให้มากกว่า 3 วินาที (อาจเป็น 10 หรือ 30)
- หากคุณต้องการใช้ .SummaryInformation ตัวชี้วัด - คุณต้องเปลี่ยนบัญชีบริการ Zabbix จาก "ระบบท้องถิ่น" เป็นบัญชีใด ๆ ที่มีสิทธิ์ผู้ดูแลระบบท้องถิ่นในการใช้ FailoverClusters Cmdlet's และมีสิทธิ์ในการสร้างแบบสอบถาม WMI ไปยังโหนดคลัสเตอร์ทั้งหมดผ่านเครือข่าย มิฉะนั้นคุณจะได้รับข้อผิดพลาดของสคริปต์
- นำเข้าเทมเพลตไปยังเซิร์ฟเวอร์ Zabbix
- คิดให้ดีก่อนลิงก์เทมเพลตไปยังโฮสต์และปิดใช้งานกฎการค้นพบที่ไม่สำคัญ (อาจเป็น "เครื่องเสมือน" "บริการทั่วไป" "เครือข่ายคลัสเตอร์") มิฉะนั้น คุณสามารถรับโหลด CPU มากกว่า 9000% ด้วยการเรียก PowerShell
- เทมเพลตการอธิษฐานและลิงก์
- สนุก.
ใช้เป็นบริการทั่วไปเมื่อเกิดข้อผิดพลาด
- หากคุณต้องการใช้ Zabbix Agent แบบโลคัล (ไม่ใช่คลัสเตอร์) และเฟลโอเวอร์ (คลัสเตอร์) ในเวลาเดียวกัน - คุณต้องเปลี่ยน ListenPort คำสั่งของ Zabbix Agent ในการกำหนดค่า "เอเจนต์แบบคลัสเตอร์" จากค่าเริ่มต้นเป็นค่าอื่นที่ไม่ได้ใช้ (อาจเป็น 16092 หรือมากกว่านั้น) มิฉะนั้น บางครั้งคุณอาจได้รับข้อผิดพลาด 1,067 เมื่อตัวแทน Zabbix แบบคลัสเตอร์จะย้ายข้อมูล นี่เป็นเพราะอินสแตนซ์เริ่มต้นครั้งแรกของ Agent ผูกกับที่อยู่ของโฮสต์ที่มีอยู่ทั้งหมด และอินสแตนซ์ที่สองเพิ่งออกเมื่อเริ่มต้น
- สร้างสำเนาของการกำหนดค่า Zabbix Agent (เรียกว่า zabbix_agentd_WSFC-A.conf เป็นต้น) บนโหนดคลัสเตอร์เดียว
- รวม zbx_wsfc.conf ไว้ในการกำหนดค่า Zabbix Agent หากคุณยังไม่เคยดำเนินการมาก่อน
- เลือกที่อยู่ IP และชื่อโดเมนใหม่เพื่อใช้กับบริการทั่วไป ไม่ควรเป็น IP และชื่อโฮสต์ของคลัสเตอร์ เปลี่ยนคำสั่ง ListenIP & ชื่อโฮสต์เป็นค่าใหม่ใน zabbix_agentd_WSFC-A.conf ;
- ใส่ wsfc.ps1 และ zabbix_agentd_WSFC-A.conf ให้กับทุกโหนดในคลัสเตอร์ (หรือลองใช้ Windows Shares)
- ในทุกโหนดบริการถอนการติดตั้งของ Zabbix Agent ในพื้นที่ และติดตั้งอีกครั้งด้วยปุ่ม -m (zabbix_agentd.exe -c ... -x, zabbix_agentd.exe -c ... -d, zabbix_agentd.exe -c ... -i -m, zabbix_agentd.exe -c ... -s -m);
- ในทุกโหนดให้ติดตั้งบริการของ Zabbix Agent ที่สองด้วยคีย์ zabbix_agentd_WSFC-A.conf และ -m (zabbix_agentd.exe -c ... zabbix_agentd_WSFC-A.conf -i -m) อย่าเริ่มบริการนั้นด้วยตนเอง - บริการจะเริ่มต้นอัตโนมัติโดย WSFC บนโหนด Owner ของบริการ
- หากคุณต้องการใช้ .SummaryInformation ตัวชี้วัด - คุณต้องเปลี่ยนบัญชีบริการ Zabbix จาก "ระบบท้องถิ่น" เป็นบัญชีใด ๆ ที่มีสิทธิ์ผู้ดูแลระบบท้องถิ่นในการใช้ FailoverClusters Cmdlet's และมีสิทธิ์ในการสร้างแบบสอบถาม WMI ไปยังโหนดคลัสเตอร์ทั้งหมดผ่านเครือข่าย มิฉะนั้นคุณจะได้รับข้อผิดพลาดของสคริปต์
- สร้าง "บริการทั่วไป" ใหม่สำหรับคลัสเตอร์ของคุณด้วย Failover Cluster MMC กำหนดให้กับที่อยู่ IP และชื่อโฮสต์ซึ่งกำหนดไว้ในขั้นตอนที่ 4
- นำเข้าเทมเพลตไปยังเซิร์ฟเวอร์ Zabbix
- คิดให้ดีก่อนลิงก์เทมเพลตไปยังโฮสต์และปิดใช้งานกฎการค้นพบที่ไม่สำคัญ (อาจเป็น "เครื่องเสมือน" "บริการทั่วไป" "เครือข่ายคลัสเตอร์") มิฉะนั้น คุณสามารถรับโหลด CPU มากกว่า 9000% ด้วยการเรียก PowerShell
- บนเซิร์ฟเวอร์ Zabbix ให้สร้างโฮสต์ใหม่ด้วยที่อยู่ IP และชื่อโฮสต์จากขั้นตอนที่ 4
- เทมเพลตการอธิษฐานและลิงก์
- เริ่มบริการทั่วไปที่คุณสร้างในขั้นตอนที่ 9 ด้วย Failover Cluster MMC
- สนุก. อาจจะ.
หมายเหตุ อย่าลองนำเข้าเทมเพลต Zabbix v2.4 ไปยัง Zabbix pre v2.4 คุณต้องแก้ไขไฟล์ .xml และทำการเปลี่ยนแปลงบางอย่างที่ Discovery_rule - กรองพื้นที่แท็ก และเปลี่ยน # เป็น <> ในนิพจน์ทริกเกอร์ ฉันจะพยายามสร้างเทมเพลตให้กับ Zabbix แบบเก่า
หมายเหตุ ในเทมเพลตใช้ประเภทรายการ Zabbix Agent (active) คุณต้องตั้งค่าคำสั่ง ServerActive ของ Zabbix Agent หรือเปลี่ยนประเภทของรายการเป็น Zabbix Agent ในกรณีนี้ ต้องเพิ่มจำนวนโพลเลอร์ของเซิร์ฟเวอร์ Zabbix เนื่องจากการเรียกใช้สคริปต์ PowerShell ใด ๆ จะทำให้เธรดโพลเลอร์ค้างเป็น 2 วินาที (บนฮาร์ดแวร์ของฉัน)
คำแนะนำ
- หากต้องการดูคีย์ ให้รันสคริปต์โดยไม่มีตัวเลือก -Key : ... "wsfc.ps1" -Action "Get" -Object " Object " [-Key "{SummaryInformation.VirtualMachine | ClusterParameter}"] โปรดทราบว่าไม่ใช่ทุกออบเจ็กต์ที่มีการวัดที่เกี่ยวข้องในตาราง ClusterParameter & SummaryInformation (ลองใช้คีย์นี้กับออบเจ็กต์ 'ClusterResourceVirtualMachine' เพื่อทดสอบ) คุณสามารถดู MSDN สำหรับข้อมูล;)
- โปรดอ่านคำอธิบายกฎการค้นพบและรายการเพื่อค้นหาข้อมูลที่เป็นประโยชน์ (ลิงก์ไปยังหน้า MSDN ที่อธิบายการวัด)
- หากคุณใช้สัญลักษณ์ที่ไม่ใช่ภาษาอังกฤษ (เช่น Cyrillic รัสเซีย) ในชื่อของ VM และต้องการรับ UTF-8 ที่ถูกต้องบนฝั่งเซิร์ฟเวอร์ Zabbix คุณต้องเพิ่มพารามิเตอร์ -consoleCP your_native_codepage ลงในบรรทัดคำสั่ง ตัวอย่างเช่นในการแปลงจากเพจรหัสซีริลลิกรัสเซีย (CP866) ให้ใช้ ... "wsfc.ps1" ... -consoleCP CP866
- สำหรับการดีบักในโหมดสแตนด์อโลน ให้ใช้ตัวเลือก -defaultConsoleWidth เพื่อคงความกว้างดีฟอลต์ของคอนโซลไว้ขณะรันสคริปต์ และ -Verbose เพื่อรับข้อมูลการประมวลผลเพิ่มเติม
- หากคุณได้รับ "ควรเป็น JSON" ของ Zabbix ให้ลองเพิ่มค่าตัวเลขในตัวแปรคงที่ CONSOLE_WIDTH ภายใน wsfc.ps1 Powershell ใช้ความกว้างของคอนโซลเพื่อจัดรูปแบบเอาต์พุตบรรทัด JSON และสามารถทำลายความกว้างได้
- ด้วยการค้นพบ ClusterNetworkInterface คุณสามารถใช้ {#NETWORKADDRESS} เพื่อกรองเครือข่ายที่ไม่สามารถกำหนดเส้นทางได้ เพื่อแยกที่อยู่ IP ที่ไม่สามารถ ping ได้ เพื่อหลีกเลี่ยงการสลับรายการที่เกี่ยวข้องไปเป็นสถานะที่ไม่รองรับ
ระวัง การร้องขอสคริปต์ PowerShell บ่อยครั้งกิน CPU และเพิ่มโหลด เพื่อหลีกเลี่ยง - อย่าใช้ช่วงเวลาการอัปเดตเล็กน้อยกับรายการข้อมูลของ Zabbix และปิดการใช้งานที่ไม่ได้ใช้