Zabbix-də DFS Replikasiyasının sadə monitorinqi

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 təsviri, bir domen hesabına inzibati hüquqlar vermədən ondan istifadə etmək hüququnu necə vermək olar, lakin bir çox replika qruplarımız varsa, onda hər qrupa hüquq vermək çətin olacaq. Bununla belə, biz domen kontrollerlərində Domen Sistemi Həcminin təkrarlanmasına nəzarət etmək istəsək, bu, yeganə məqbul variant ola bilər, çünki monitorinq xidməti hesabına domen administratoru hüquqlarının verilməsi ən yaxşı fikir deyil.

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 burada.

Ü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

Добавить комментарий