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