مقدمة
مع وجود بنية تحتية كبيرة وموزعة بما فيه الكفاية تستخدم DFS كنقطة وصول واحدة للبيانات و DFSR لتكرار البيانات بين مركز البيانات والخوادم الفرعية ، فإن السؤال الذي يطرح نفسه هو مراقبة حالة هذا النسخ المتماثل.
من قبيل الصدفة ، فور بدء استخدام DFSR ، بدأنا في تنفيذ Zabbix من أجل استبدال حديقة الحيوان الحالية من الأدوات المختلفة وتقديم مراقبة البنية التحتية إلى شكل أكثر إفادة وكاملة ومنطقية. سنتحدث عن استخدام Zabbix لمراقبة تكرار DFS.
بادئ ذي بدء ، نحتاج إلى تحديد البيانات حول نسخ DFS المتماثل التي نحتاج إلى تلقيها من أجل مراقبة حالتها. المؤشر الأكثر صلة هو التراكم. يحتوي على ملفات لم تتم مزامنتها مع أعضاء آخرين في مجموعة النسخ المتماثل. يمكنك أن ترى حجمها مع الأداة المساعدة com.dfsrdiagمثبتة مع دور DFSR. في الحالة الطبيعية للنسخ المتماثل ، يجب أن يميل حجم التراكم إلى الصفر. وفقًا لذلك ، تشير الأعداد الكبيرة من الملفات في التراكم إلى وجود مشاكل في النسخ المتماثل.
الآن حول الجانب العملي للقضية.
من أجل مراقبة حجم التراكم من خلال وكيل Zabbix ، نحتاج إلى:
- البرنامج النصي الذي سيحلل الإخراج com.dfsrdiag لتوفير القيم النهائية لحجم التراكم إلى Zabbix ،
- برنامج نصي سيحدد عدد مجموعات النسخ الموجودة على الخادم ، والمجلدات التي تنسخها وما هي الخوادم الأخرى التي تتضمنها (لا نريد دفع كل هذا إلى Zabbix يدويًا لكل خادم ، أليس كذلك؟) ،
- إدخال هذه البرامج النصية كمعامل UserParameter في تكوين وكيل Zabbix لاستدعاء لاحق من خادم المراقبة ،
- بدء خدمة وكيل Zabbix كمستخدم لديه حقوق قراءة backlog ،
- نموذج لـ Zabbix ، حيث سيتم تكوين اكتشاف المجموعة ، ومعالجة البيانات المستلمة وإصدار التنبيهات عليها.
محلل البرنامج النصي
لكتابة المحلل اللغوي ، اخترت VBS كلغة عالمية موجودة في جميع إصدارات Windows Server. منطق البرنامج النصي بسيط: فهو يتلقى اسم مجموعة النسخ المتماثل ، والمجلد المنسوخ ، وأسماء خوادم الإرسال والاستقبال عبر سطر الأوامر. ثم يتم تمرير هذه المعلمات إلى com.dfsrdiagواعتمادا على ناتجها:
عدد الملفات - إذا تم استلام رسالة حول وجود ملفات في التراكم ،
0 - في حالة تلقي رسالة تفيد بعدم وجود ملفات في backlog ("لا يوجد Backlog") ،
-1 - في حالة استلام رسالة خطأ com.dfsrdiag عند تنفيذ الطلب ("[ERROR]").
الحصول على 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
من أجل الحصول على المعلومات من خلال com.dfsrdiag، يجب تشغيل الأداة المساعدة نيابة عن حساب له حقوق إدارية لكل من إرسال واستقبال أعضاء مجموعة النسخ المتماثل. لن تتمكن خدمة وكيل Zabbix ، التي تعمل افتراضيًا ضمن حساب النظام ، من تلبية مثل هذا الطلب. لقد أنشأت حسابًا منفصلاً في المجال ، ومنحته حقوقًا إدارية على الخوادم المطلوبة ، وقمت بتهيئة هذه الخوادم لبدء الخدمة من تحته.
يمكنك أيضًا الذهاب في الاتجاه الآخر: منذ ذلك الحين com.dfsrdiag، في الواقع ، يعمل من خلال نفس WMI ، يمكنك استخدامه
نموذج المراقبة
بناءً على البيانات التي تلقيتها ، أنشأت نموذجًا:
- يقوم بتشغيل الاكتشاف التلقائي لمجموعات النسخ المتماثل مرة واحدة في الساعة ،
- مرة كل 5 دقائق ، يتحقق من حجم الأعمال المتراكمة لكل مجموعة ،
- يحتوي على مشغل يصدر تنبيهًا إذا كان حجم التراكم لأي مجموعة يزيد عن 100 لمدة 30 دقيقة. يتم وصف المشغل كنموذج أولي يتم إضافته تلقائيًا إلى المجموعات المكتشفة ،
- يرسم حجم التراكم لكل مجموعة نسخ متماثل.
يمكنك تنزيل نموذج Zabbix 2.2
مجموع
بعد استيراد القالب إلى Zabbix وإنشاء حساب مع الحقوق اللازمة ، نحتاج فقط إلى نسخ البرامج النصية إلى خوادم الملفات التي نريد مراقبتها لـ DFSR ، وإضافة سطرين إلى تكوين الوكيل عليها وإعادة تشغيل خدمة وكيل Zabbix ، تكوينه ليتم تشغيله نيابة عن الحساب المطلوب. لا توجد إعدادات يدوية أخرى مطلوبة لمراقبة DFSR.
المصدر: www.habr.com