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