نظارت ساده بر تکرار DFS در Zabbix

معرفی

با داشتن یک زیرساخت نسبتاً بزرگ و توزیع شده که از DFS به عنوان یک نقطه دسترسی واحد به داده ها و DFSR برای تکثیر داده ها بین مراکز داده و سرورهای شعبه استفاده می کند، این سوال در مورد نظارت بر وضعیت این تکرار مطرح می شود.
به طور تصادفی، تقریباً بلافاصله پس از شروع استفاده از DFSR، پیاده سازی Zabbix را با هدف جایگزینی ابزارهای مختلف باغ وحش موجود و رساندن نظارت بر زیرساخت به شکلی آموزنده، کامل و منطقی تر آغاز کردیم. ما در مورد استفاده از Zabbix برای نظارت بر تکرار DFS صحبت خواهیم کرد.

اول از همه، ما باید تصمیم بگیریم که برای نظارت بر وضعیت DFS چه داده هایی در مورد تکرار DFS باید به دست آید. مرتبط ترین شاخص عقب ماندگی است. این شامل فایل هایی است که با سایر اعضای گروه تکرار همگام سازی نشده اند. با استفاده از ابزار می توانید اندازه آن را مشاهده کنید dfsrdiag، با نقش DFSR نصب شده است. در حالت تکرار عادی، اندازه بک لاگ باید به صفر نزدیک شود. بر این اساس، تعداد زیادی فایل در بک لاگ نشان دهنده مشکلات مربوط به تکرار است.

حالا در مورد جنبه عملی قضیه.

برای نظارت بر اندازه بک لاگ از طریق Zabbix Agent، به موارد زیر نیاز داریم:

  • اسکریپتی که خروجی را تجزیه می کند dfsrdiag برای ارائه مقادیر نهایی اندازه بک لاگ به Zabbix،
  • اسکریپتی که تعیین می‌کند چند گروه تکرار روی سرور وجود دارد، چه پوشه‌هایی را تکرار می‌کنند و چه سرورهای دیگری در آن‌ها گنجانده شده است (نمی‌خواهیم همه اینها را برای هر سرور با دست وارد Zabbix کنیم، درست است؟)
  • افزودن این اسکریپت ها به عنوان UserParameter به پیکربندی عامل Zabbix برای تماس های بعدی از سرور نظارت،
  • راه‌اندازی سرویس عامل Zabbix به‌عنوان کاربری که حق خواندن بک لاگ را دارد،
  • قالبی برای Zabbix که در آن تشخیص گروه ها، پردازش داده های دریافتی و صدور هشدار روی آن ها پیکربندی می شود.

تجزیه کننده اسکریپت

برای نوشتن تجزیه کننده، VBS را به عنوان جهانی ترین زبان موجود در تمام نسخه های ویندوز سرور انتخاب کردم. منطق اسکریپت ساده است: نام گروه تکرار، پوشه تکرار شده و نام سرورهای ارسال و دریافت کننده را از طریق خط فرمان دریافت می کند. سپس این پارامترها به dfsrdiagو بسته به خروجی آن تولید می کند:
تعداد فایل ها - اگر پیامی در مورد وجود فایل ها در بک لاگ دریافت شد،
0 - اگر پیامی در مورد عدم وجود فایل‌ها در بک لاگ دریافت شد ("بدون بک لاگ")،
-1 - در صورت دریافت پیغام خطا dfsrdiag هنگام اجرای یک درخواست ("[ERROR]").

get-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"

البته ما مسیرها را با آنهایی که اسکریپت داریم تنظیم می کنیم. من آنها را در همان پوشه ای که agent نصب شده است قرار دادم.

پس از ایجاد تغییرات، سرویس عامل Zabbix را مجددا راه اندازی کنید.

تغییر کاربری که سرویس Zabbix Agent تحت آن اجرا می شود

به منظور دریافت اطلاعات از طریق dfsrdiag، برنامه باید تحت حسابی اجرا شود که دارای حقوق اداری برای ارسال و دریافت اعضای گروه تکرار است. سرویس عامل Zabbix که به طور پیش فرض در حساب سیستم اجرا می شود، قادر به اجرای چنین درخواستی نخواهد بود. من یک حساب کاربری جداگانه در دامنه ایجاد کردم، به آن حقوق مدیریتی در سرورهای لازم دادم و سرویس را طوری پیکربندی کردم که تحت آن در این سرورها اجرا شود.

شما می توانید راه دیگری بروید: زیرا dfsrdiag، در واقع از طریق همان WMI کار می کند، سپس می توانید استفاده کنید شرح، چگونه به یک اکانت دامنه حق استفاده از آن را بدون صدور حقوق مدیریت بدهیم، اما اگر گروه های تکراری زیادی داشته باشیم، صدور حقوق برای هر گروه دشوار خواهد بود. با این حال، در صورتی که بخواهیم تکرار حجم سیستم دامنه را روی کنترل‌کننده‌های دامنه نظارت کنیم، این ممکن است تنها گزینه قابل قبول باشد، زیرا دادن حقوق سرپرست دامنه به حساب سرویس نظارت ایده خوبی نیست.

الگوی مانیتورینگ

بر اساس اطلاعاتی که دریافت کردم، یک الگو ایجاد کردم که:

  • کشف خودکار گروه های تکرار را یک بار در ساعت اجرا می کند،
  • هر 5 دقیقه یک بار اندازه بک لاگ را برای هر گروه بررسی می کند.
  • حاوی یک ماشه است که زمانی که اندازه بک لاگ برای هر گروهی بیش از 100 به مدت 30 دقیقه باشد، هشدار می دهد. ماشه به عنوان یک نمونه اولیه توصیف می شود که به طور خودکار به گروه های شناسایی شده اضافه می شود.
  • نمودارهای اندازه بک لاگ را برای هر گروه تکراری ایجاد می کند.

می توانید قالب Zabbix 2.2 را دانلود کنید اینجا.

مجموع

پس از وارد کردن قالب به Zabbix و ایجاد یک حساب کاربری با حقوق لازم، فقط باید اسکریپت ها را در سرورهای فایلی که می خواهیم برای DFSR نظارت کنیم، کپی کنیم، دو خط به پیکربندی عامل روی آنها اضافه کنیم و سرویس عامل Zabbix را مجددا راه اندازی کنیم. ، تنظیم کنید تا به عنوان حساب مورد نظر اجرا شود. هیچ تنظیمات دستی دیگری برای نظارت DFSR مورد نیاز نیست.

منبع: www.habr.com

اضافه کردن نظر