परिचय
पर्याप्त रूप से बड़े और वितरित बुनियादी ढांचे के साथ जो डेटा केंद्रों और शाखा सर्वरों के बीच डेटा प्रतिकृति के लिए डीएफएसआर को एकल डेटा एक्सेस बिंदु और डीएफएसआर के रूप में उपयोग करता है, इस प्रतिकृति की स्थिति की निगरानी का सवाल उठता है।
ऐसा हुआ कि डीएफएसआर का उपयोग शुरू करने के लगभग तुरंत बाद, हमने विभिन्न उपकरणों के मौजूदा चिड़ियाघर को बदलने और बुनियादी ढांचे की निगरानी को अधिक जानकारीपूर्ण, पूर्ण और तार्किक दृष्टिकोण से लाने के लिए ज़ैबिक्स को लागू करना शुरू कर दिया। DFS प्रतिकृति की निगरानी करने के लिए Zabbix के उपयोग पर चर्चा की जाएगी।
सबसे पहले, हमें यह तय करने की आवश्यकता है कि डीएफएस प्रतिकृति पर कौन सा डेटा हमें इसकी स्थिति की निगरानी के लिए प्राप्त करने की आवश्यकता है। सबसे प्रासंगिक संकेतक बैकलॉग है। प्रतिकृति समूह के अन्य सदस्यों के साथ सिंक्रनाइज़ नहीं की गई फ़ाइलें इसमें आ जाती हैं। आप इसका आकार
dfsrdiag उपयोगिता द्वारा देख सकते हैं, जो DFSR भूमिका के साथ स्थापित है। प्रतिकृति की सामान्य स्थिति में, बैकलॉग का आकार शून्य पर जाना चाहिए। तदनुसार, बैकलॉग में फ़ाइलों की संख्या के बड़े मान प्रतिकृति के साथ समस्याओं का संकेत देते हैं।
अब मुद्दे के व्यावहारिक पक्ष के बारे में।
Zabbix Agent के माध्यम से बैकलॉग के आकार की निगरानी करने के लिए, हमें चाहिए:
- एक स्क्रिप्ट, जो Zabbix को बैकलॉग के आकार को अंतिम मान प्रदान करने के लिए dfsrdiag के आउटपुट को पार्स करेगी,
- एक स्क्रिप्ट जो यह निर्धारित करेगी कि सर्वर पर कितने प्रतिकृति समूह हैं, वे कौन से फ़ोल्डरों को दोहराते हैं और उनमें कौन से अन्य सर्वर शामिल हैं (हम प्रत्येक सर्वर के लिए हमारे हाथों से Zabbix में यह सब नहीं चलाना चाहते हैं?)
- मॉनिटरिंग सर्वर से बाद में कॉल करने के लिए ज़ैबिक्स एजेंट कॉन्फ़िगरेशन में यूजर स्क्रिप्ट के रूप में इन लिपियों को रखना,
- Zabbix एजेंट सेवा को एक ऐसे उपयोगकर्ता के रूप में शुरू करना जिसके पास बैकलॉग पढ़ने का अधिकार है,
- ज़ैबिक्स के लिए एक टेम्प्लेट जिसमें समूहों का पता लगाना, प्राप्त डेटा का प्रसंस्करण और उन पर अलर्ट जारी करना कॉन्फ़िगर किया जाएगा।
स्क्रिप्ट पार्सर
पार्सर लिखने के लिए, मैंने विंडोज सर्वर के सभी संस्करणों में पाई जाने वाली सबसे सार्वभौमिक भाषा के रूप में वीबीएस को चुना। स्क्रिप्ट का तर्क सरल है: यह कमांड लाइन के माध्यम से प्रतिकृति समूह, प्रतिकृति फ़ोल्डर, और भेजने और प्राप्त करने वाले सर्वरों के नाम प्राप्त करता है। इसके अलावा, इन मापदंडों को
dfsrdiag में पास किया
जाता है , और इसके आउटपुट के आधार पर, इसे जारी किया जाता है:
फ़ाइलों की संख्या - यदि एक संदेश बैकलॉग में फ़ाइलों की उपस्थिति के बारे में प्राप्त होता है,
0 - यदि बैकलॉग ("नो बैकलॉग") में फ़ाइलों की अनुपस्थिति के बारे में एक संदेश प्राप्त होता है,
-1 - यदि अनुरोध को निष्पादित करते समय एक
dfsrdiag त्रुटि संदेश
प्राप्त होता है ("[ERROR]")।
मिल-Backlog.vbsstrReplicationGroup=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
पता लगाने की पटकथा
ज़ैबिक्स के लिए सर्वर पर मौजूद सभी प्रतिकृति समूहों को निर्धारित करने और अनुरोध के लिए आवश्यक सभी मापदंडों (फ़ोल्डर का नाम, पड़ोसी सर्वर के नाम) का पता लगाने के लिए, हमें यह जानकारी प्राप्त करने की आवश्यकता है, सबसे पहले, और दूसरी बात, इसे एक ऐसे प्रारूप में प्रस्तुत करें जिसे ज़ैबिक्स समझता है। खोज टूल जो प्रारूप समझता है वह इस तरह दिखता है:
"data":[ { "{#GROUP}":"Share1", "{#FOLDER}":"Folder1", "{#SENDING}":"Server1", "{#RECEIVING}":"Server2"} ... "{#GROUP}":"ShareN", "{#FOLDER}":"FolderN", "{#SENDING}":"Server1", "{#RECEIVING}":"ServerN"}]}
हम जिस जानकारी में रुचि रखते हैं, उसे DMIrReplicationGroupConfig के संबंधित वर्गों से खींचकर WMI के माध्यम से आसानी से प्राप्त किया जाता है। नतीजतन, एक स्क्रिप्ट का जन्म हुआ जो WMI के लिए एक अनुरोध उत्पन्न करता है और वांछित प्रारूप में समूहों, उनके फ़ोल्डरों और सर्वरों की एक सूची तैयार करता है।
DFSRDiscovery.vbs dim strComputer, strLine, n, k, i Set wshNetwork = WScript.CreateObject( "WScript.Network" ) strComputer = wshNetwork.ComputerName Set oWMIService = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftDFS") 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
मैं मानता हूं, स्क्रिप्ट में कोड की लालित्य नहीं हो सकती है और इसमें कुछ सुनिश्चित करने के लिए सरल किया जा सकता है, लेकिन इसका मुख्य कार्य - एक प्रारूप में प्रतिकृति समूहों के मापदंडों के बारे में जानकारी प्रदान करना है जिसे ज़ैबिक्स समझता है - यह सफलतापूर्वक करता है।
स्क्रिप्टिंग ज़ैबिक्स एजेंट कॉन्फ़िगरेशन
यहां सब कुछ बेहद सरल है। एजेंट कॉन्फ़िगरेशन फ़ाइल के अंत में, लाइनें जोड़ें:
UserParameter=check_dfsr[*],cscript /nologo "C:\Program Files\Zabbix Agent\get-Backlog.vbs" $1 $2 $3 $4 UserParameter=discovery_dfsr[*],cscript /nologo "C:\Program Files\Zabbix Agent\DFSRDiscovery.vbs"
हम, निश्चित रूप से उन रास्तों पर राज करते हैं जहाँ हमारे पास स्क्रिप्ट हैं। मैंने उन्हें उसी फ़ोल्डर में रखा जहां एजेंट स्थापित है।
परिवर्तन करने के बाद, Zabbix एजेंट सेवा को पुनरारंभ करें।
Zabbix Agent सेवा चलाने वाले उपयोगकर्ता को बदलें
Dfsrdiag के माध्यम से जानकारी प्राप्त करने के लिए, उपयोगिता को उस खाते की ओर से चलाया जाना चाहिए जिसमें प्रतिकृति समूह के सदस्यों को भेजने और प्राप्त करने दोनों के लिए प्रशासनिक अधिकार हैं। ज़ैबिक्स एजेंट सेवा, सिस्टम खाते के तहत डिफ़ॉल्ट रूप से लॉन्च की गई है, इस तरह के अनुरोध को निष्पादित करने में सक्षम नहीं होगी। मैंने डोमेन में एक अलग खाता बनाया, इसे आवश्यक सर्वरों पर प्रशासनिक अधिकार दिया और इन सर्वरों पर सेवा के लॉन्च को कॉन्फ़िगर किया।
आप दूसरे तरीके से जा सकते हैं: चूंकि
dfsrdiag , वास्तव में, एक ही WMI के माध्यम से काम करता है, आप इस बात का उपयोग कर सकते हैं कि कैसे प्रशासनिक अधिकारों को जारी किए बिना इसका उपयोग करने के लिए एक डोमेन खाता अधिकार दिया जाए, लेकिन यदि हमारे पास कई प्रतिकृति समूह हैं, तो प्रत्येक को अधिकार प्रदान करें समूह कठिन होगा। हालाँकि, यदि हम डोमेन नियंत्रकों पर डोमेन सिस्टम वॉल्यूम की प्रतिकृति की निगरानी करना चाहते हैं, तो यह एकमात्र स्वीकार्य विकल्प हो सकता है, क्योंकि डोमेन प्रशासक को निगरानी सेवा खाते में विशेषाधिकार देना सबसे अच्छा विचार नहीं है।
निगरानी पैटर्न
डेटा के आधार पर, मैंने एक टेम्प्लेट बनाया जो:
- एक बार एक घंटे प्रतिकृति समूहों का स्वत: पता लगाना शुरू कर देता है,
- हर 5 मिनट में, प्रत्येक समूह के लिए बैकलॉग आकार की जाँच करता है,
- एक ट्रिगर होता है जो किसी भी समूह के लिए बैकलॉग का आकार 30 मिनट के लिए 100 से अधिक होने पर अलर्ट जारी करता है। ट्रिगर को एक प्रोटोटाइप के रूप में वर्णित किया जाता है जो स्वचालित रूप से ज्ञात समूहों में जोड़ा जाता है,
- प्रत्येक प्रतिकृति समूह के लिए बैकलॉग आकार रेखांकन बनाता है।
यहाँ Zabbix 2.2 के लिए टेम्प्लेट डाउनलोड
करें ।
परिणाम
Zabbix में टेम्प्लेट आयात करने और आवश्यक अधिकारों के साथ एक खाता बनाने के बाद, हमें केवल उन फ़ाइल सर्वर पर स्क्रिप्ट की प्रतिलिपि बनाने की आवश्यकता है जिन्हें हम DFSR के लिए मॉनिटर करना चाहते हैं, उन पर एजेंट कॉन्फ़िगरेशन के लिए दो लाइनें जोड़ें और Zabbix एजेंट सेवा को पुनरारंभ करें, इसे चलाने के लिए इसे सेट करें। वांछित खाता। DFSR की निगरानी के लिए किसी अन्य मैनुअल कॉन्फ़िगरेशन की आवश्यकता नहीं है।