Indledning
Med en ret stor og distribueret infrastruktur, der bruger DFS som et enkelt adgangspunkt til data og DFSR til datareplikering mellem datacentre og filialservere, opstår spørgsmålet om overvågning af status for denne replikering.
Tilfældigvis begyndte vi næsten umiddelbart efter, at vi begyndte at bruge DFSR, at implementere Zabbix med det mål at erstatte den eksisterende zoo af forskellige værktøjer og bringe infrastrukturovervågning til en mere informativ, komplet og logisk form. Vi vil tale om at bruge Zabbix til at overvåge DFS-replikering.
Først og fremmest skal vi beslutte, hvilke data om DFS-replikering der skal indhentes for at overvåge dens status. Den mest relevante indikator er efterslæb. Den indeholder filer, der ikke er blevet synkroniseret med andre medlemmer af replikeringsgruppen. Du kan se dens størrelse ved hjælp af værktøjet dfsrdiag, installeret med DFSR-rollen. I en normal replikationstilstand bør backlog-størrelsen nærme sig nul. Derfor indikerer et stort antal filer i backlog problemer med replikering.
Nu om den praktiske side af sagen.
For at overvåge størrelsen af efterslæbet gennem Zabbix Agent har vi brug for:
- Script, der vil analysere outputtet dfsrdiag for at give Zabbix endelige backlogstørrelsesværdier,
- Et script, der bestemmer, hvor mange replikeringsgrupper der er på serveren, hvilke mapper de replikerer, og hvilke andre servere der er inkluderet i dem (vi ønsker ikke at indtaste alt dette i Zabbix manuelt for hver server, vel?).
- Tilføjelse af disse scripts som UserParameter til Zabbix-agentkonfigurationen til efterfølgende opkald fra overvågningsserveren,
- Start af Zabbix-agenttjenesten som en bruger, der har rettigheder til at læse backlog,
- En skabelon til Zabbix, hvor detektering af grupper, behandling af modtagne data og udstedelse af advarsler om dem vil blive konfigureret.
Script-parser
For at skrive parseren valgte jeg VBS som det mest universelle sprog, der findes i alle versioner af Windows Server. Logikken i scriptet er enkel: det modtager navnet på replikeringsgruppen, den replikerede mappe og navnene på de afsendende og modtagende servere via kommandolinjen. Disse parametre sendes derefter til dfsrdiag, og afhængigt af dens output producerer den:
Antal filer - hvis der modtages en besked om tilstedeværelsen af filer i backlog,
0 — hvis der modtages en besked om fravær af filer i backlog ("Ingen backlog"),
-1 - hvis der modtages en fejlmeddelelse dfsrdiag når du udfører en anmodning ("[FEJL]").
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
For at Zabbix kan bestemme alle replikeringsgrupperne på serveren og finde ud af alle de parametre, der kræves til anmodningen (mappenavn, navne på naboservere), skal vi for det første indhente disse oplysninger og for det andet præsentere dem i et format, der er forståeligt for Zabbix. Formatet, 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 nemmeste måde at få den information, vi er interesseret i, er gennem WMI, ved at trække den ud fra de tilsvarende sektioner af DfsrReplicationGroupConfig. Som et resultat blev der født et script, der genererer en anmodning til WMI og udsender en liste over grupper, deres mapper og servere i det krævede 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 skinner med elegance af kode, og nogle ting i det kunne bestemt forenkles, men det udfører sin hovedfunktion - at give information om parametrene for replikeringsgrupper i et format, som Zabbix kan forstå.
Tilføjelse af scripts til Zabbix-agentkonfigurationen
Alt her er ekstremt enkelt. Tilføj følgende linjer til slutningen af agentkonfigurationsfilen:
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"
Vi tilpasser selvfølgelig stierne til dem, hvor vi har scripts. Jeg lægger dem i den samme mappe, hvor agenten er installeret.
Når du har foretaget ændringer, skal du genstarte Zabbix-agenttjenesten.
Ændring af den bruger, som Zabbix Agent-tjenesten kører under
For at modtage information gennem dfsrdiag, skal hjælpeprogrammet køres under en konto, der har administrative rettigheder til både afsendende og modtagende medlemmer af replikeringsgruppen. Zabbix-agenttjenesten, der kører som standard under systemkontoen, vil ikke være i stand til at udføre en sådan anmodning. Jeg oprettede en separat konto i domænet, gav den administrative rettigheder på de nødvendige servere og konfigurerede tjenesten til at køre under den på disse servere.
Du kan gå en anden vej: fordi dfsrdiag, faktisk fungerer gennem den samme WMI, så kan du bruge
Overvågningsskabelon
Baseret på de data, jeg modtog, lavede jeg en skabelon, der:
- Kører automatisk opdagelse af replikeringsgrupper én gang i timen,
- Kontrollerer efterslæbets størrelse for hver gruppe en gang hvert 5. minut,
- Indeholder en trigger, der udsender en advarsel, når backlog-størrelsen for en gruppe er mere end 100 i 30 minutter. Triggeren beskrives som en prototype, der automatisk tilføjes til detekterede grupper,
- Opbygger efterslæbsstørrelsesgrafer for hver replikeringsgruppe.
Du kan downloade skabelonen til Zabbix 2.2
Total
Efter at have importeret skabelonen til Zabbix og oprettet en konto med de nødvendige rettigheder, skal vi kun kopiere scripts til de filservere, som vi ønsker at overvåge for DFSR, tilføje to linjer til agentkonfigurationen på dem og genstarte Zabbix agenttjenesten. , indstille den til at køre som den ønskede konto. Der kræves ingen andre manuelle indstillinger til DFSR-overvågning.
Kilde: www.habr.com