معرفی
با داشتن یک زیرساخت نسبتاً بزرگ و توزیع شده که از 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