Monitorizarea simplă a replicării DFS în Zabbix

Introducere

Într-o infrastructură destul de mare și distribuită, care utilizează DFS ca punct unic de acces la date și DFSR pentru replicarea datelor între centrele de date și serverele filialelor, apare întrebarea monitorizării stării acestei replicări.
A coincis că aproape imediat după ce am început să folosim DFSR, am început implementarea Zabbix cu scopul de a înlocui grădina zoologică existentă de instrumente diverse și de a aduce monitorizarea infrastructurii într-o formă mai informativă, completă și logică. Vom discuta despre utilizarea Zabbix pentru a observa replicarea DFS.

Primul lucru pe care trebuie să-l stabilim este ce date despre replicarea DFS trebuie să obținem pentru a controla starea acesteia. Indicatorul cel mai relevant este backlog-ul. Acesta include fișierele care nu au fost sincronizate cu alte membri ai grupului de replicare. Dimensiunea acestuia poate fi verificată cu ajutorul utilitarului dfsrdiag, care se instalează împreună cu rolul DFSR. În starea normală de replicare, dimensiunea backlog-ului ar trebui să tindă spre zero. Prin urmare, valori mari ale numărului de fișiere în backlog indică probleme cu replicarea.

Acum, să trecem la partea practică a problemei.

Pentru a monitoriza dimensiunea backlog-ului prin Zabbix Agent, avem nevoie de:

  • Un script care va parsa ieșirea dfsrdiag pentru a oferi în Zabbix valorile finale ale dimensiunii backlog-ului,
  • Un script care va determina câte grupuri de replicare există pe server, ce foldere sunt replicate și ce alte servere sunt incluse în acestea (nu vrem să le introducem manual pe toate în Zabbix pentru fiecare server, nu-i așa?),
  • Includerea acestor scripturi ca UserParameter în configurația agentului Zabbix pentru a fi apelate ulterior de pe serverul de monitorizare,
  • Pornirea serviciului agentului Zabbix sub un utilizator care are drepturi de a citi backlog-ul,
  • Un șablon pentru Zabbix, în care va fi configurată detectarea grupurilor, prelucrarea datelor primite și emiterea alertelor pentru acestea.

Script de parsare

Pentru scrierea parserului, am ales VBS ca fiind cel mai versatil limbaj, prezent în toate versiunile Windows Server. Logica de funcționare a scriptului este simplă: acesta primește prin linia de comandă numele grupului de replicare, al folderului replicat și numele serverelor sending și receiving. Apoi aceste date sunt transmise în dfsrdiag, iar în funcție de ieșirea acesteia se oferă:
Numărul de fișiere — dacă s-a primit un mesaj despre existența fișierelor în backlog,
0 - dacă a fost primit un mesaj de absență a fișierelor în backlog ("No Backlog"),
-1 - dacă a fost primit un mesaj de eroare dfsrdiag în timpul execuției cererii ("[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:"

Script de detectare

Pentru ca Zabbix să poată determina singur toate grupurile de replicare prezente pe server și să afle toate parametrii necesari cererii (numele folderului, numele serverelor vecine), trebuie mai întâi să obținem aceste informații și, în al doilea rând, să le prezentăm într-un format pe care Zabbix îl poate înțelege. Formatul pe care instrumentul discovery îl înțelege arată astfel:

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

Informația care ne interesează poate fi obținută cel mai simplu prin WMI, extrăgând-o din secțiunile corespunzătoare DfsrReplicationGroupConfig. A rezultat un script care formează o cerere către WMI și oferă o listă de grupuri, foldere și servere în formatul dorit.

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

Sunt de acord, scriptul poate că nu strălucește prin eleganță, iar unele aspecte pot fi simplificate, însă funcția principală pe care o îndeplinește – furnizarea informațiilor despre parametrii grupurilor de replicare într-un format înțeles de Zabbix – o face cu succes.

Introducerea scripturilor în configurația agentului Zabbix

Aici totul este extrem de simplu. La sfârșitul fișierului de configurare a agentului adăugăm liniile:

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"

Desigur, corectăm căile astfel încât să ne îndreptăm către locul unde sunt scripturile. Eu le-am plasat în aceeași folder în care este instalat agentul.

După ce am efectuat modificările, repornim serviciul agentului Zabbix.

Schimbarea utilizatorului cu care funcționează serviciul Zabbix Agent

Pentru a obține informații prin dfsrdiag, utilitarea trebuie să fie rulată de un cont cu drepturi administrative atât pe membrii grupului de trimitere, cât și pe cei de recepție. Serviciul agentului Zabbix, care rulează în mod implicit sub contul sistemului, nu va putea realiza această cerere. Am creat un cont separat în domeniu, i-am acordat drepturi administrative pe serverele necesare și am configurat lansarea serviciului de pe acel cont pe aceste servere.

Se poate merge și pe un alt drum: deoarece dfsrdiag, în esență, funcționează prin aceeași WMI, putem folosi descrierea, cum să oferim contului de domeniu drepturi pentru utilizarea lui fără a-i acorda drepturi administrative, dar dacă avem multe grupuri de replicare, va fi dificil să furnizăm drepturi pentru fiecare grup. Totuși, în cazul în care dorim să monitorizăm replicarea Domain System Volume pe controlerele de domeniu, acesta poate fi singurul mod acceptabil, deoarece a oferi contului de serviciu de monitorizare drepturi de administrator de domeniu nu este cea mai bună idee.

Șablon de monitorizare

Pe baza datelor obținute, am creat un șablon care:

  • O dată pe oră rulează detectarea automată a grupurilor de replicare,
  • O dată la 5 minute verifică dimensiunea backlog-ului pentru fiecare grup,
  • Conține un trigger care emite o alertă când dimensiunea backlog-ului pentru un grup depășește 100 timp de 30 de minute. Triggerul este descris ca un prototip care se adaugă automat grupurilor descoperite,
  • Construiește grafice ale dimensiunii backlog-ului pentru fiecare grup de replicare.

Puteți descărca șablonul pentru Zabbix 2.2 aici.

Rezultatul

După importarea șablonului în Zabbix și crearea unui cont cu drepturile necesare, va fi suficient să copiem scripturile pe serverele de fișiere pe care dorim să le monitorizăm în legătură cu DFSR, să adăugăm două linii în configurația agentului pe acestea și să repornim serviciul agentului Zabbix, configurându-l să ruleze sub contul dorit. Nu vor fi necesare alte setări manuale pentru monitorizarea DFSR.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster