Jednostavno praćenje DFS replikacije u Zabbixu

Uvod

S prilično velikom i distribuiranom infrastrukturom koja koristi DFS kao jedinstvenu točku pristupa podacima i DFSR za replikaciju podataka između podatkovnih centara i poslužitelja podružnica, postavlja se pitanje praćenja statusa te replikacije.
Igrom slučaja, gotovo odmah nakon što smo počeli koristiti DFSR, počeli smo implementirati Zabbix s ciljem da zamijenimo postojeći zoološki vrt raznih alata i dovedemo praćenje infrastrukture u informativniji, potpuniji i logičniji oblik. Govorit ćemo o korištenju Zabbixa za nadzor DFS replikacije.

Prije svega, moramo odlučiti koje podatke o replikaciji DFS-a treba pribaviti da bismo pratili njezin status. Najrelevantniji pokazatelj je zaostatak. Sadrži datoteke koje nisu sinkronizirane s drugim članovima replikacijske grupe. Pomoću uslužnog programa možete vidjeti njegovu veličinu dfsrdiag, instaliran s DFSR ulogom. U normalnom stanju replikacije, veličina zaostatka trebala bi se približiti nuli. U skladu s tim, velik broj datoteka u zaostatku ukazuje na probleme s replikacijom.

Sada o praktičnoj strani problema.

Kako bismo pratili veličinu zaostatka putem Zabbix agenta, trebat će nam:

  • Skripta koja će analizirati izlaz dfsrdiag za pružanje konačne vrijednosti veličine zaostataka Zabbixu,
  • Skripta koja će odrediti koliko replikacijskih grupa ima na poslužitelju, koje mape repliciraju i koji drugi poslužitelji su uključeni u njih (ne želimo sve to unositi ručno u Zabbix za svaki poslužitelj, zar ne?),
  • Dodavanje ovih skripti kao UserParameter konfiguraciji Zabbix agenta za naknadno pozivanje s poslužitelja za praćenje,
  • Pokretanje usluge Zabbix agenta kao korisnik koji ima pravo čitati zaostatke,
  • Predložak za Zabbix, u kojem će se konfigurirati otkrivanje grupa, obrada primljenih podataka i izdavanje upozorenja na njih.

Parser skripte

Za pisanje parsera odabrao sam VBS kao najuniverzalniji jezik prisutan u svim verzijama Windows Servera. Logika skripte je jednostavna: putem naredbenog retka prima naziv replikacijske grupe, repliciranu mapu i nazive poslužitelja za slanje i primanje. Ti se parametri zatim prosljeđuju dfsrdiag, a ovisno o izlazu proizvodi:
Broj datoteka - ako se primi poruka o prisutnosti datoteka u zaostatku,
0 — ako je primljena poruka o nedostatku datoteka u zaostatku ("No Backlog"),
-1 - ako se primi poruka o pogreš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

Skripta otkrića

Kako bi Zabbix odredio sve replikacijske grupe prisutne na poslužitelju i saznao sve parametre potrebne za zahtjev (naziv mape, nazive susjednih poslužitelja), moramo, prvo, pribaviti te informacije, i drugo, predstaviti ih u formatu razumljivom Zabbixu. 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-ja, izvlačeći ih iz odgovarajućih odjeljaka DfsrReplicationGroupConfig. Kao rezultat toga, rođena je skripta koja generira zahtjev za WMI i ispisuje popis grupa, njihovih mapa i poslužitelja u traženom 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 neke stvari u njoj bi se sigurno mogle pojednostaviti, ali ona obavlja svoju glavnu funkciju - pružanje informacija o parametrima replikacijskih grupa u formatu razumljivom Zabbixu.

Dodavanje skripti konfiguraciji Zabbix agenta

Ovdje je sve krajnje jednostavno. Dodajte sljedeće retke 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, staze prilagođavamo onima gdje imamo skripte. Stavio sam ih u isti folder gdje je instaliran agent.

Nakon što izvršite promjene, ponovno pokrenite uslugu Zabbix agenta.

Promjena korisnika pod kojim se pokreće usluga Zabbix Agent

Kako biste primali informacije putem dfsrdiag, uslužni program mora biti pokrenut pod računom koji ima administrativna prava za slanje i primanje članova replikacijske grupe. Usluga Zabbix agenta, pokrenuta prema zadanim postavkama pod računom sustava, neće moći izvršiti takav zahtjev. Stvorio sam zaseban račun u domeni, dao mu administrativna prava na potrebnim poslužiteljima i konfigurirao uslugu da radi pod njim na tim poslužiteljima.

Možete ići drugim putem: jer dfsrdiag, zapravo, radi kroz isti WMI, onda možete koristiti opis, kako domenskom računu dati prava za korištenje bez izdavanja administrativnih prava, ali ako imamo mnogo replikacijskih grupa, tada će izdavanje prava svakoj grupi biti teško. Međutim, u slučaju da želimo nadzirati replikaciju volumena sustava domene na kontrolerima domene, ovo može biti jedina prihvatljiva opcija, jer davanje administratorskih prava domene računu usluge nadzora nije dobra ideja.

Predložak za praćenje

Na temelju podataka koje sam dobio izradio sam predložak koji:

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

Možete preuzeti predložak za Zabbix 2.2 здесь.

Ukupan

Nakon uvoza predloška u Zabbix i kreiranja računa s potrebnim pravima, trebat ćemo samo kopirati skripte na poslužitelje datoteka koje želimo nadzirati za DFSR, dodati dva retka u konfiguraciju agenta na njima i ponovno pokrenuti uslugu Zabbix agenta , postavljajući ga da radi kao željeni račun. Nisu potrebne druge ručne postavke za DFSR nadzor.

Izvor: www.habr.com

Dodajte komentar