Introduktion
Ved en stor og distribueret infrastruktur, der bruger DFS som en enkelt adgangspunk til data og DFSR til replikering af data mellem datacentre og filialservere, opstår spørgsmålet om overvågning af status for denne replikation.
Det viste sig, at næsten med det samme efter begyndelsen af brugen af DFSR begyndte vi implementeringen af Zabbix med det formål at erstatte den eksisterende dyrehave af forskellige værktøjer og bringe overvågningen af infrastrukturen til en mere informativ, fuld og logisk tilstand. Det er om brugen af Zabbix til overvågning af DFS-replikationen, som vi skal tale.
Først skal vi finde ud af, hvilke data om DFS-replikering der skal indsamles for at overvåge dens tilstand. Den mest relevante indikator er backlog. Heri findes filer, der ikke er blevet synkroniseret med andre medlemmer af replikationsgruppen. Man kan se dens størrelse med værktøjet dfsrdiag, som installeres sammen med DFSR-rollen. I en normal replikationstilstand skal størrelsen af backlog tendere mod nul. Derfor viser store værdier i antallet af filer i backlog problemer med replikationen.
Nu til den praktiske side af spørgsmålet.
For at overvåge størrelsen af backlog via Zabbix Agent har vi brug for:
- Et script, der vil parse output dfsrdiag for at give Zabbix de endelige værdier af størrelsen på backlog,
- Et script, der bestemmer, hvor mange replikationsgrupper der er på serveren, hvilke mapper de replikerer, og hvilke andre servere der er involveret (vi ønsker jo ikke at indtaste alt dette i Zabbix manuelt for hver server, vel?),
- Indsættelse af disse scripts som UserParameter i konfigurationen af Zabbix-agenten til senere kald fra overvågningsserveren,
- Kørsel af Zabbix-agenttjenesten under en bruger, der har rettigheder til at læse backlog,
- En skabelon til Zabbix, som vil være indstillet til opdagelse af grupper, behandling af de modtagne data og udstedelse af alarmer på dem.
Parser-script
Til at skrive parseren valgte jeg VBS, da det er et meget universelt sprog, der findes i alle versioner af Windows Server. Logikken i scriptet er simpel: det modtager via kommandolinjen navnet på replikationsgruppen, den replikerede mappe samt navnene på sending- og receiving-serverne. Derefter overføres disse parametre til dfsrdiag, og afhængigt af dens output gives der:
Antal filer — hvis der modtages en meddelelse om, at der er filer i backlog.
0 — hvis der er modtaget besked om, at der ikke er filer i backloggen ("No Backlog");
-1 — hvis der er modtaget besked om en fejl dfsrdiag ved udførelsen af anmodningen ("[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:""" & 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 intBackLogDetektionsscript
For at Zabbix automatisk kan bestemme alle replikeringsgrupper, der findes på serveren, og selv finde ud af alle nødvendige parametre til forespørgslen (mappenavn, naboservernes navne), skal vi først få denne information og dernæst præsentere den i et format, som Zabbix kan forstå. Det format, som opdagelsesværktøjet forstår, ser således ud:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}Den ønskede information kan nemmest hentes via WMI, ved at udtrække den fra de relevante sektioner i DfsrReplicationGroupConfig. Resultatet blev et script, der danner en forespørgsel til WMI og giver en liste over grupper, deres mapper og servere i det ønskede format.
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
Jeg er enig i, at scriptet måske ikke stråler af kodeæstetik, og der er helt sikkert noget, der kan forenkles, men det udfører sin hovedfunktion — at levere oplysninger om parametrene for replikationsgrupper i et format, der er forståeligt for Zabbix — med succes.
Indsættelse af scripts i Zabbix-agentens konfiguration
Her er det helt enkelt. Tilføj linjerne til slutningen af konfigurationsfilen for agenten:
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"
Stierne skal naturligvis rettes til dem, hvor vi har vores scripts. Jeg har lagt dem i den samme mappe, hvor agenten er installeret.
Efter at have indført ændringerne genstarter vi Zabbix-agentens tjeneste.
Ændring af brugeren, som Zabbix Agent-tjenesten kører som
For at kunne modtage oplysninger via dfsrdiag, værktøjet skal køres fra en konto med administrative rettigheder på både sending og receiving medlemmerne af replikeringsgruppen. Zabbix-agenttjenesten, der som standard kører under systemkontoen, kan ikke udføre en sådan anmodning. Jeg oprettede en separat konto i domænet, gav den administrative rettigheder på de nødvendige servere og indstillede tjenesten til at køre under denne konto.
Man kan gå en anden vej: da dfsrdiag, i princippet fungerer gennem den samme WMI, så man kan benytte , hvordan man giver domænekontoen rettigheder til at benytte det uden at tildele administrative rettigheder, men hvis vi har mange replikeringsgrupper, bliver det besværligt at give rettigheder til hver gruppe. Men i tilfælde af at vi ønsker at overvåge replikationen af Domain System Volume på domænekontrollere, kan dette vise sig at være den eneste acceptable mulighed, da det ikke er den bedste idé at give domæneserverens administratorrettigheder til overvågningskontoen.
Overvågningsskabelon
Baseret på de indsamlede data skabte jeg en skabelon, der:
- En gang i timen kører automatisk opdagelse af replikeringsgrupper,
- Hver 5. minut tjekker størrelsen af backlog for hver gruppe,
- Indeholder en trigger, der udsender en alert, når backlog-størrelsen for en gruppe overstiger 100 i 30 minutter. Triggeren er beskrevet som en prototype, der automatisk tilføjes til de opdagede grupper,
- Bygger grafer over backlog-størrelsen for hver replikeringsgruppe.
Man kan downloade skabelonen til Zabbix 2.2 .
Resultat
Efter at have importeret skabelonen til Zabbix og oprettet en konto med de nødvendige rettigheder, vil det være tilstrækkeligt kun at kopiere scriptfilerne til de filservere, vi ønsker at overvåge for DFSR, tilføje to linjer i agentens konfiguration på dem og genstarte Zabbix-agenttjenesten og indstille den til at køre under den ønskede konto. Ingen andre manuelle indstillinger vil være nødvendige for at overvåge DFSR.
Kilde: habr.com
