Giriş
DFS-dən vahid məlumat giriş nöqtəsi kimi istifadə edən kifayət qədər böyük və paylanmış infrastruktura və məlumat mərkəzi və filial serverləri arasında məlumatların təkrarlanması üçün DFSR-dən bu replikasiyanın vəziyyətinin monitorinqi sualı yaranır.
Təsadüfən, DFSR-dən istifadə etməyə başlayandan demək olar ki, dərhal sonra biz müxtəlif alətlərdən ibarət mövcud zooparkı əvəz etmək və infrastruktur monitorinqini daha informativ, tam və məntiqli formaya gətirmək üçün Zabbix-i tətbiq etməyə başladıq. DFS replikasiyasını izləmək üçün Zabbix-dən istifadə haqqında danışacağıq.
Hər şeydən əvvəl, DFS replikasiyası haqqında onun statusunu izləmək üçün hansı məlumatları almalı olduğumuza qərar verməliyik. Ən uyğun göstərici geriləmədir. O, replikasiya qrupunun digər üzvləri ilə sinxronlaşdırılmamış faylları ehtiva edir. Utility ilə ölçüsünü görə bilərsiniz dfsrdiagDFSR rolu ilə quraşdırılmışdır. Replikasiyanın normal vəziyyətində, geriləmə həcmi sıfıra meyl etməlidir. Müvafiq olaraq, geridə qalan faylların çoxlu sayda olması replikasiya ilə bağlı problemləri göstərir.
İndi məsələnin praktik tərəfi haqqında.
Zabbix Agent vasitəsilə geriləmə həcminə nəzarət etmək üçün bizə lazımdır:
- Çıxışı təhlil edəcək skript dfsrdiag Zabbix-ə son geriləmə ölçüsü dəyərlərini təmin etmək,
- Serverdə neçə replikasiya qrupunun olduğunu, onların hansı qovluqları təkrarladığını və hansı digər serverləri daxil etdiyini müəyyən edəcək skript (biz bütün bunları hər server üçün Zabbix-ə əl ilə aparmaq istəmirik, elə deyilmi?),
- Monitorinq serverindən sonrakı zəng üçün bu skriptləri UserParameter kimi Zabbix agent konfiqurasiyasına daxil etməklə,
- Zabbix agent xidmətinə arxa planı oxumaq hüququ olan bir istifadəçi kimi başlamaq,
- Qrup kəşfinin konfiqurasiya ediləcəyi, qəbul edilən məlumatların işlənməsi və onlar haqqında xəbərdarlıqların verilməsi Zabbix üçün şablon.
Skript təhlili
Parser yazmaq üçün mən Windows Serverin bütün versiyalarında mövcud olan ən universal dil kimi VBS-ni seçdim. Skriptin məntiqi sadədir: o, replikasiya qrupunun adını, təkrarlanan qovluğu, göndərən və qəbul edən serverlərin adlarını komanda xətti vasitəsilə alır. Bu parametrlər sonra ötürülür dfsrdiagvə çıxışından asılı olaraq:
Faylların sayı - geridə qalan faylların olması barədə mesaj alınarsa,
0 - geridə qalan sənədlərdə faylların olmaması barədə bir mesaj alınarsa ("Arxa plan yoxdur"),
-1 - səhv mesajı alındıqda dfsrdiag sorğunu yerinə yetirərkən ("[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
Kəşf skripti
Zabbix-in serverdə mövcud olan bütün replikasiya qruplarını müəyyən etməsi və sorğu üçün tələb olunan bütün parametrləri (qovluq adı, qonşu serverlərin adları) öyrənməsi üçün ilk növbədə bu məlumatı əldə etməliyik, ikincisi, onu təqdim etməliyik. Zabbix-in başa düşdüyü format. Kəşf alətinin başa düşdüyü format belə görünür:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
Bizi maraqlandıran məlumatı əldə etməyin ən asan yolu WMI vasitəsilə onu DfsrReplicationGroupConfig-in müvafiq bölmələrindən çıxarmaqdır. Nəticədə, WMI-yə sorğu yaradan və lazımi formatda qrupların, onların qovluqlarının və serverlərinin siyahısını çıxaran bir skript yarandı.
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
Razıyam, skript kodun zərifliyi ilə parlamaya bilər və içindəki bir şey, şübhəsiz ki, sadələşdirilə bilər, lakin onun əsas funksiyası - Zabbix tərəfindən başa düşülən formatda replikasiya qruplarının parametrləri haqqında məlumat vermək - uğurla yerinə yetirir.
Zabbix agent konfiqurasiyasına skriptlərin əlavə edilməsi
Burada hər şey son dərəcə sadədir. Agent konfiqurasiya faylının sonuna aşağıdakı sətirləri əlavə edin:
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"
Təbii ki, biz skriptlərimiz olanlara gedən yolları düzəldirik. Mən onları agentin quraşdırıldığı qovluğa qoyuram.
Dəyişikliklər etdikdən sonra Zabbix agent xidmətini yenidən başladın.
Zabbix Agent xidmətinin işlədiyi istifadəçinin dəyişdirilməsi
vasitəsilə məlumat almaq üçün dfsrdiag, yardım proqramı replikasiya qrupunun həm göndərən, həm də qəbul edən üzvlərinə inzibati hüquqlara malik olan hesab adından işlədilməlidir. Defolt olaraq sistem hesabı altında işləyən Zabbix agent xidməti belə sorğunu yerinə yetirə bilməyəcək. Domendə ayrıca hesab yaratdım, ona lazım olan serverlərdə administrativ hüquqlar verdim və bu serverləri onun altından xidmətə başlamaq üçün konfiqurasiya etdim.
Siz başqa yolla da gedə bilərsiniz: bəri dfsrdiag, əslində, eyni WMI vasitəsilə işləyir, istifadə edə bilərsiniz
Monitorinq şablonu
Aldığım məlumatlara əsasən şablon yaratdım:
- Replikasiya qruplarının avtomatik aşkarlanmasını saatda bir dəfə həyata keçirir,
- Hər 5 dəqiqədə bir dəfə hər qrup üçün geridə qalan işlərin həcmini yoxlayır,
- Hər hansı bir qrup üçün 100 dəqiqə ərzində geriləmənin ölçüsü 30-dən çox olduqda xəbərdarlıq verən bir tetikleyici ehtiva edir. Tətik, aşkar edilmiş qruplara avtomatik olaraq əlavə edilən prototip kimi təsvir edilir,
- Hər bir replikasiya qrupu üçün geriləmə həcminin qrafiklərini tərtib edir.
Zabbix 2.2 üçün şablonu yükləyə bilərsiniz
Ümumi
Şablonu Zabbix-ə idxal etdikdən və lazımi hüquqlara malik hesab yaratdıqdan sonra biz yalnız skriptləri DFSR üçün izləmək istədiyimiz fayl serverlərinə köçürməli, onların üzərindəki agent konfiqurasiyasına iki sətir əlavə etməli və Zabbix agent xidmətini yenidən başlamalıyıq, onu istədiyiniz hesabın adından işlətmək üçün konfiqurasiya etmək. DFSR-yə nəzarət etmək üçün başqa heç bir əl parametrləri tələb olunmur.
Mənbə: www.habr.com