การแนะนำ
ด้วยโครงสร้างพื้นฐานที่ค่อนข้างใหญ่และกระจายซึ่งใช้ DFS เป็นจุดเดียวในการเข้าถึงข้อมูลและ DFSR สำหรับการจำลองข้อมูลระหว่างศูนย์ข้อมูลและเซิร์ฟเวอร์สาขา คำถามจึงเกิดขึ้นในการตรวจสอบสถานะของการจำลองนี้
บังเอิญเกือบจะในทันทีหลังจากที่เราเริ่มใช้ DFSR เราเริ่มใช้งาน Zabbix โดยมีเป้าหมายเพื่อแทนที่สวนสัตว์ที่มีอยู่ของเครื่องมือต่างๆ และนำการตรวจสอบโครงสร้างพื้นฐานมาสู่รูปแบบที่ให้ข้อมูล สมบูรณ์ และสมเหตุสมผลมากขึ้น เราจะพูดถึงการใช้ Zabbix เพื่อตรวจสอบการจำลองแบบ DFS
ก่อนอื่น เราต้องตัดสินใจว่าจะต้องได้รับข้อมูลใดเกี่ยวกับการจำลองแบบ DFS เพื่อตรวจสอบสถานะ ตัวบ่งชี้ที่เกี่ยวข้องมากที่สุดคืองานในมือ ประกอบด้วยไฟล์ที่ไม่ได้รับการซิงโครไนซ์กับสมาชิกคนอื่นๆ ของกลุ่มการจำลองแบบ คุณสามารถดูขนาดได้โดยใช้ยูทิลิตี้ dfsrdiagติดตั้งด้วยบทบาท DFSR ในสถานะการจำลองแบบปกติ ขนาด Backlog ควรเข้าใกล้ศูนย์ ดังนั้น ไฟล์จำนวนมากใน Backlog บ่งชี้ปัญหาเกี่ยวกับการจำลองแบบ
ตอนนี้เกี่ยวกับด้านการปฏิบัติของปัญหา
ในการตรวจสอบขนาดของ Backlog ผ่าน Zabbix Agent เราจะต้อง:
- สคริปต์ที่จะแยกวิเคราะห์ผลลัพธ์ dfsrdiag เพื่อมอบค่าขนาด Backlog สุดท้ายให้กับ Zabbix
- สคริปต์ที่จะกำหนดจำนวนกลุ่มการจำลองแบบบนเซิร์ฟเวอร์ โฟลเดอร์ใดที่พวกเขาจำลองแบบ และเซิร์ฟเวอร์อื่น ๆ ที่รวมอยู่ในนั้น (เราไม่ต้องการป้อนทั้งหมดนี้ลงใน Zabbix ด้วยตนเองสำหรับแต่ละเซิร์ฟเวอร์ ใช่ไหม)
- การเพิ่มสคริปต์เหล่านี้เป็น UserParameter ในการกำหนดค่าเอเจนต์ Zabbix สำหรับการเรียกจากเซิร์ฟเวอร์การมอนิเตอร์ในภายหลัง
- การเริ่มต้นบริการตัวแทน Zabbix ในฐานะผู้ใช้ที่มีสิทธิ์อ่าน Backlog
- เทมเพลตสำหรับ Zabbix ซึ่งการตรวจจับกลุ่ม การประมวลผลข้อมูลที่ได้รับ และการออกการแจ้งเตือนจะได้รับการกำหนดค่า
ตัวแยกวิเคราะห์สคริปต์
ในการเขียน parser ฉันเลือก VBS เป็นภาษาสากลที่สุดใน Windows Server ทุกเวอร์ชัน ตรรกะของสคริปต์นั้นเรียบง่าย: รับชื่อของกลุ่มการจำลองแบบ โฟลเดอร์ที่ถูกจำลองแบบ และชื่อของเซิร์ฟเวอร์การส่งและรับผ่านทางบรรทัดคำสั่ง จากนั้นพารามิเตอร์เหล่านี้จะถูกส่งไปยัง dfsrdiagและขึ้นอยู่กับผลลัพธ์ของมัน:
จำนวนไฟล์ - หากได้รับข้อความเกี่ยวกับการมีไฟล์อยู่ใน Backlog
0 — หากได้รับข้อความเกี่ยวกับการไม่มีไฟล์ใน Backlog (“No Backlog”)
-1 - หากได้รับข้อความแสดงข้อผิดพลาด dfsrdiag เมื่อดำเนินการตามคำขอ ("[ข้อผิดพลาด]")
รับ Backlog.vbs
strReplicationGroup=WScript.Arguments.Item(0)
strReplicatedFolder=WScript.Arguments.Item(1)
strSending=WScript.Arguments.Item(2)
strReceiving=WScript.Arguments.Item(3)
Set WshShell = CreateObject ("Wscript.shell")
Set objExec = WSHshell.Exec("dfsrdiag.exe Backlog /RGName:""" & strReplicationGroup & """ /RFName:""" & strReplicatedFolder & """ /SendingMember:" & strSending & " /ReceivingMember:" & strReceiving)
strResult = ""
Do While Not objExec.StdOut.AtEndOfStream
strResult = strResult & objExec.StdOut.ReadLine() & "\"
Loop
If InStr(strResult, "No Backlog") > 0 then
intBackLog = 0
ElseIf InStr(strResult, "[ERROR]") > 0 Then
intBackLog = -1
Else
arrLines = Split(strResult, "\")
arrResult = Split(arrLines(1), ":")
intBackLog = arrResult(1)
End If
WScript.echo intBackLog
สคริปต์การค้นพบ
เพื่อให้ Zabbix สามารถกำหนดกลุ่มการจำลองทั้งหมดที่มีอยู่บนเซิร์ฟเวอร์ และเพื่อค้นหาพารามิเตอร์ทั้งหมดที่จำเป็นสำหรับคำขอ (ชื่อโฟลเดอร์ ชื่อของเซิร์ฟเวอร์ใกล้เคียง) เราจำเป็นต้องได้รับข้อมูลนี้ก่อนอื่น และประการที่สอง นำเสนอข้อมูลดังกล่าว ในรูปแบบที่ Zabbix เข้าใจได้ รูปแบบที่เครื่องมือค้นหาเข้าใจมีลักษณะดังนี้:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
วิธีที่ง่ายที่สุดในการรับข้อมูลที่เราสนใจคือผ่าน WMI โดยดึงข้อมูลออกจากส่วนที่เกี่ยวข้องของ DfsrReplicationGroupConfig เป็นผลให้เกิดสคริปต์ที่สร้างคำขอไปยัง WMI และส่งออกรายการกลุ่ม โฟลเดอร์ และเซิร์ฟเวอร์ในรูปแบบที่ต้องการ
DFSRDiscovery.vbs
dim strComputer, strLine, n, k, i
Set wshNetwork = WScript.CreateObject( "WScript.Network" )
strComputer = wshNetwork.ComputerName
Set oWMIService = GetObject("winmgmts:\" & strComputer & "rootMicrosoftDFS")
Set colRGroups = oWMIService.ExecQuery("SELECT * FROM DfsrReplicationGroupConfig")
wscript.echo "{"
wscript.echo " ""data"":["
n=0
k=0
i=0
For Each oGroup in colRGroups
n=n+1
Set colRGFolders = oWMIService.ExecQuery("SELECT * FROM DfsrReplicatedFolderConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
For Each oFolder in colRGFolders
k=k+1
Set colRGConnections = oWMIService.ExecQuery("SELECT * FROM DfsrConnectionConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
For Each oConnection in colRGConnections
i=i+1
binInbound = oConnection.Inbound
strPartner = oConnection.PartnerName
strRGName = oGroup.ReplicationGroupName
strRFName = oFolder.ReplicatedFolderName
If oConnection.Enabled = True and binInbound = False Then
strSendingComputer = strComputer
strReceivingComputer = strPartner
strLine1=" {"
strLine2=" ""{#GROUP}"":""" & strRGName & ""","
strLine3=" ""{#FOLDER}"":""" & strRFName & ""","
strLine4=" ""{#SENDING}"":""" & strSendingComputer & ""","
if (n < colRGroups.Count) or (k < colRGFolders.count) or (i < colRGConnections.Count) then
strLine5=" ""{#RECEIVING}"":""" & strReceivingComputer & """},"
else
strLine5=" ""{#RECEIVING}"":""" & strReceivingComputer & """}]}"
end if
wscript.echo strLine1
wscript.echo strLine2
wscript.echo strLine3
wscript.echo strLine4
wscript.echo strLine5
End If
Next
Next
Next
ฉันยอมรับว่าสคริปต์อาจไม่เปล่งประกายด้วยโค้ดที่สวยงามและบางสิ่งในสคริปต์อาจทำให้ง่ายขึ้นได้อย่างแน่นอน แต่สคริปต์จะทำหน้าที่หลักโดยให้ข้อมูลเกี่ยวกับพารามิเตอร์ของกลุ่มการจำลองแบบในรูปแบบที่ Zabbix เข้าใจได้
การเพิ่มสคริปต์ในการกำหนดค่าเอเจนต์ Zabbix
ทุกสิ่งที่นี่เรียบง่ายมาก เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์คอนฟิกูเรชันเอเจนต์:
UserParameter=check_dfsr[*],cscript /nologo "C:Program FilesZabbix Agentget-Backlog.vbs" $1 $2 $3 $4
UserParameter=discovery_dfsr[*],cscript /nologo "C:Program FilesZabbix AgentDFSRDiscovery.vbs"
แน่นอนว่าเราปรับเส้นทางไปยังเส้นทางที่เรามีสคริปต์ ฉันวางไว้ในโฟลเดอร์เดียวกับที่ติดตั้งเอเจนต์
หลังจากทำการเปลี่ยนแปลง ให้รีสตาร์ทบริการตัวแทน Zabbix
การเปลี่ยนผู้ใช้ที่ใช้บริการ Zabbix Agent ทำงาน
เพื่อรับข้อมูลผ่านทาง dfsrdiagโปรแกรมอรรถประโยชน์นี้ต้องทำงานภายใต้บัญชีที่มีสิทธิ์ระดับผู้ดูแลทั้งส่งและรับสมาชิกของกลุ่มการจำลองแบบ บริการตัวแทน Zabbix ซึ่งทำงานตามค่าเริ่มต้นภายใต้บัญชีระบบ จะไม่สามารถดำเนินการตามคำขอดังกล่าวได้ ฉันสร้างบัญชีแยกต่างหากในโดเมน ให้สิทธิ์ผู้ดูแลระบบแก่เซิร์ฟเวอร์ที่จำเป็น และกำหนดค่าบริการให้ทำงานภายใต้โดเมนนั้นบนเซิร์ฟเวอร์เหล่านี้
คุณสามารถไปอีกทางหนึ่งได้: เพราะ dfsrdiagที่จริงแล้วทำงานผ่าน WMI เดียวกันคุณก็สามารถใช้งานได้
เทมเพลตการตรวจสอบ
จากข้อมูลที่ฉันได้รับ ฉันได้สร้างเทมเพลตที่:
- ดำเนินการค้นหากลุ่มการจำลองอัตโนมัติหนึ่งครั้งต่อชั่วโมง
- ตรวจสอบขนาด Backlog ของแต่ละกลุ่มทุกๆ 5 นาที
- ประกอบด้วยทริกเกอร์ที่แจ้งเตือนเมื่อขนาด Backlog สำหรับกลุ่มใดๆ มากกว่า 100 เป็นเวลา 30 นาที ทริกเกอร์ได้รับการอธิบายว่าเป็นต้นแบบที่ถูกเพิ่มไปยังกลุ่มที่ตรวจพบโดยอัตโนมัติ
- สร้างกราฟขนาด Backlog สำหรับแต่ละกลุ่มการจำลอง
คุณสามารถดาวน์โหลดเทมเพลตสำหรับ Zabbix 2.2 ได้
ทั้งหมด
หลังจากนำเข้าเทมเพลตไปยัง Zabbix และสร้างบัญชีที่มีสิทธิ์ที่จำเป็นเราจะต้องคัดลอกสคริปต์ไปยังไฟล์เซิร์ฟเวอร์ที่เราต้องการตรวจสอบ DFSR เพิ่มสองบรรทัดในการกำหนดค่าตัวแทนในนั้นแล้วรีสตาร์ทบริการตัวแทน Zabbix โดยตั้งค่าให้ทำงานตามบัญชีที่ต้องการ ไม่จำเป็นต้องมีการตั้งค่าด้วยตนเองอื่นใดสำหรับการตรวจสอบ DFSR
ที่มา: will.com