Jednostavno praćenje DFS replikacije u Zabbixu

Uvod

Uz dovoljno veliku i distribuiranu infrastrukturu koja koristi DFS kao jednu pristupnu tačku podataka i DFSR za replikaciju podataka između data centra i servera podružnice, postavlja se pitanje praćenja statusa ove replikacije.
Igrom slučaja, skoro odmah nakon početka korištenja DFSR-a, počeli smo implementirati Zabbix kako bismo zamijenili postojeći zoo raznim alatima i doveli praćenje infrastrukture u informativniji, potpuniji i logičniji oblik. Govorit ćemo o korištenju Zabbixa za praćenje DFS replikacije.

Prije svega, moramo odlučiti koje podatke o DFS replikaciji trebamo primiti da bismo pratili njegov status. Najrelevantniji indikator je zaostatak. Sadrži datoteke koje nisu sinkronizirane s drugim članovima grupe za replikaciju. Njegovu veličinu možete vidjeti pomoću uslužnog programa dfsrdiaginstaliran s ulogom DFSR. U normalnom stanju replikacije, veličina zaostatka bi trebala težiti nuli. Shodno tome, veliki broj datoteka u zaostatku ukazuje na probleme s replikacijom.

Sada o praktičnoj strani pitanja.

Da bismo pratili veličinu zaostatka putem Zabbix Agenta, potrebno nam je:

  • Skripta koja će analizirati izlaz dfsrdiag da Zabbix-u pruži konačne vrijednosti veličine zaostataka,
  • Skripta koja će odrediti koliko grupa za replikaciju ima na serveru, koje foldere repliciraju i koje druge servere uključuju (ne želimo sve ovo ubaciti u Zabbix ručno za svaki server, zar ne?),
  • Unošenje ovih skripti kao UserParameter u konfiguraciju Zabbix agenta za naknadni poziv sa servera za praćenje,
  • Pokretanje usluge Zabbix agenta kao korisnika s pravom čitanja zaostataka,
  • Šablon za Zabbix u kojem će se konfigurirati grupno otkrivanje, obrada primljenih podataka i izdavanje upozorenja na njih.

Parser skripti

Za pisanje parsera, izabrao sam VBS kao najuniverzalniji jezik prisutan u svim verzijama Windows Servera. Logika skripte je jednostavna: prima ime grupe za replikaciju, repliciranog foldera i imena servera koji šalje i prima preko komandne linije. Ovi parametri se zatim prosleđuju na dfsrdiag, i ovisno o njegovom izlazu:
Broj fajlova - ako je primljena poruka o prisustvu fajlova u zaostatku,
0 - ako je primljena poruka o nedostatku datoteka u zaostatku ("Nema zaostataka"),
-1 - ako je primljena poruka o grešci dfsrdiag prilikom izvršavanja zahtjeva ("[GREŠKA]").

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

Discovery script

Da bi Zabbix sam odredio sve grupe replikacije koje su prisutne na serveru i sam saznao sve parametre potrebne za zahtjev (ime mape, imena susjednih servera), moramo dobiti ove informacije, prvo, i drugo, predstavite ga u formatu koji Zabbix razumije. Format koji alat za otkrivanje razumije izgleda ovako:

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

...

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

Najlakši način da dobijemo informacije koje nas zanimaju je putem WMI-a, izvlačeći ih iz odgovarajućih sekcija DfsrReplicationGroupConfig. Kao rezultat toga, rođena je skripta koja generiše zahtjev prema WMI-u i daje listu grupa, njihovih foldera i servera u potrebnom formatu.

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

Slažem se, skripta možda ne blista elegancijom koda i nešto u njoj se svakako može pojednostaviti, ali svoju glavnu funkciju - davanje informacija o parametrima replikacionih grupa u formatu razumljivom Zabbixu - obavlja uspješno.

Dodavanje skripti u konfiguraciju Zabbix agenta

Ovdje je sve krajnje jednostavno. Dodajte sljedeće redove na kraj konfiguracijske datoteke agenta:

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"

Naravno, korigujemo puteve do onih na kojima imamo skripte. Stavio sam ih u isti folder u kojem je instaliran agent.

Nakon što izvršite promjene, ponovo pokrenite Zabbix agentsku uslugu.

Promjena korisnika pod kojim se pokreće Zabbix Agent servis

Da biste dobili informacije putem dfsrdiag, uslužni program mora biti pokrenut u ime naloga koji ima administrativna prava i za slanje i za primanje članova grupe za replikaciju. Usluga Zabbix agenta, koja se podrazumevano pokreće pod sistemskim nalogom, neće moći da ispuni takav zahtev. Napravio sam poseban nalog u domeni, dao mu administrativna prava na potrebnim serverima i konfigurisao ove servere da pokreću servis ispod njega.

Možete ići i drugim putem: pošto dfsrdiag, u stvari, radi kroz isti WMI, koji možete koristiti opis, kako nalogu domene dati pravo da ga koristi bez izdavanja administrativnih prava, ali ako imamo mnogo grupa za replikaciju, onda će biti teško izdati prava svakoj grupi. Međutim, u slučaju da želimo da nadgledamo replikaciju volumena domenskog sistema na kontrolerima domena, ovo može biti jedina prihvatljiva opcija, jer davanje administratorskih prava domena na nalog usluge nadgledanja nije najbolja ideja.

Predložak za praćenje

Na osnovu podataka koje sam dobio, napravio sam šablon koji:

  • Pokreće automatsko otkrivanje grupa replikacije jednom na sat,
  • Svakih 5 minuta provjerava veličinu zaostatka za svaku grupu,
  • Sadrži okidač koji izdaje upozorenje kada je veličina zaostatka za bilo koju grupu veća od 100 za 30 minuta. Okidač je opisan kao prototip koji se automatski dodaje otkrivenim grupama,
  • Iscrtava veličinu zaostatka za svaku grupu replikacije.

Možete preuzeti šablon za Zabbix 2.2 ovdje.

Rezultat

Nakon uvoza šablona u Zabbix i kreiranja naloga sa potrebnim pravima, potrebno je samo da kopiramo skripte na fajl servere koje želimo da nadgledamo za DFSR, dodamo dva reda u konfiguraciju agenta na njima i ponovo pokrenemo Zabbix agent servis, konfigurišući ga da se pokreće u ime željenog naloga. Za praćenje DFSR-a nisu potrebne nikakve druge ručne postavke.

izvor: www.habr.com

Dodajte komentar