مراقبة بسيطة لنسخ DFS المتماثل في Zabbix

مقدمة

مع وجود بنية تحتية كبيرة وموزعة بما فيه الكفاية تستخدم 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

إضافة تعليق