Introduktion
Vid en tillräckligt stor och distribuerad infrastruktur som använder DFS som en enhetlig accesspunkt för data och DFSR för replikering av data mellan datacenter och filialservrar, uppstår frågan om övervakning av tillståndet för denna replikering.
Det råkade så att nästan omedelbart efter att vi började använda DFSR, påbörjade vi implementeringen av Zabbix för att ersätta den befintliga djungeln av olika verktyg och göra övervakningen av infrastrukturen mer informativ, komplett och logisk. Vi kommer att diskutera användningen av Zabbix för att övervaka DFS-replikeringen.
Först och främst måste vi avgöra vilken data om DFS-replikeringen vi behöver hämta för att kontrollera dess tillstånd. Den mest relevanta indikatorn är backlog. Det omfattar filer som inte har synkroniserats med andra medlemmar i replikationsgruppen. Vi kan se dess storlek med hjälp av verktyget dfsrdiag, som installeras tillsammans med DFSR-rollen. I ett normalt tillstånd av replikering bör storleken på backlog sträva efter att vara noll. Stora värden av antalet filer i backlog indikerar därför problem med replikeringen.
Nu till den praktiska sidan av frågan.
För att övervaka storleken på backlog genom Zabbix Agent behöver vi:
- Ett skript som kommer att parsa utdata dfsrdiag för att tillhandahålla slutvärden för storleken på backlog till Zabbix,
- Ett skript som kommer att avgöra hur många replikationsgrupper som finns på servern, vilka mappar de replicerar och vilka andra servrar som ingår (vi vill ju inte mata in allt detta i Zabbix för varje server, eller hur?).
- Inkludering av dessa skript som UserParameter i Zabbix-agentens konfiguration för senare anrop från övervakningsservern,
- Körning av Zabbix-agentens tjänst under en användare som har rättigheter att läsa backlog,
- En mall för Zabbix där upptäckten av grupper, bearbetning av mottagna data och utfärdande av varningar kommer att konfigureras.
Parser-skript
För att skriva parse-skriptet valde jag VBS som det mest mångsidiga språket som finns i alla versioner av Windows Server. Logiken i skriptet är enkel: det tar emot via kommandoraden namnet på replikationsgruppen, den replikerade mappen och namnen på avsändar- och mottagarservrarna. Därefter överförs dessa parametrar till dfsrdiag, och beroende på dess utdata skapas:
Antalet filer - om ett meddelande om förekomst av filer i backlog mottas.
0 — om meddelandet "No Backlog" visas om det inte finns några filer i backloggen,
-1 — om ett felmeddelande har mottagits dfsrdiag vid utförandet av begäran ("[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 intBackLogUpptäcktskript
För att Zabbix ska kunna upptäcka alla replikationsgrupper som finns på servern och själv ta reda på alla nödvändiga parametrar för begäran (mappnamn, namn på närstående servrar), behöver vi först få denna information och sedan presentera den i ett format som Zabbix förstår. Formatet som upptäcktsverktyget förstår ser ut så här:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}Den information vi är intresserade av kan enklast hämtas via WMI, genom att hämta den från de aktuella sektionerna i DfsrReplicationGroupConfig. Resultatet blev ett skript som genererar en begäran till WMI och ger en lista över grupper, deras mappar och servrar i det önskade formatet.
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
Jag håller med om att skriptet kanske inte glänser med elegans och att vissa delar säkert kan förenklas, men det uppfyller sin huvudfunktion — att leverera information om parametrarna för replikationsgrupper i ett format som är förståeligt för Zabbix.
Integrering av skript i Zabbix-agentens konfiguration
Här är det enkelt. Vi lägger till rader i slutet av 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"
Självklart justerar vi sökvägarna till där våra skript ligger. Jag har lagt dem i samma mapp som agenten är installerad.
Efter att ha gjort ändringarna startar vi om Zabbix-agentens tjänst.
Ändring av användare för Zabbix-agentens tjänst
För att kunna få information genom dfsrdiag, verktyget måste köras av ett konto med administrativa rättigheter både på sending och receiving medlemmarna i replikeringsgruppen. Zabbix-agenttjänsten, som som standard körs under systemkontot, kan inte utföra en sådan begäran. Jag skapade ett separat konto i domänen, gav det administrativa rättigheter på de nödvändiga servrarna och konfigurerade tjänsten att köras under det kontot.
Det finns också en annan väg att gå: eftersom dfsrdiag, i grunden fungerar via samma WMI, så kan du använda , hur man ger domänekontot rätt att använda den utan att ge administrativa rättigheter, men om vi har många replikeringsgrupper, blir det besvärligt att ge rättigheter för varje grupp. Men om vi vill övervaka replikeringen av Domain System Volume på domänkontrollerna, kan det vara det enda acceptabla alternativet, eftersom det kanske inte är den bästa idén att ge domänadministratörsrättigheter till tjänstekontot för övervakning.
Övervakningsmall
Baserat på de insamlade uppgifterna skapade jag en mall som:
- Varsannat timme kör automatisk upptäckning av replikeringsgrupper,
- Varsjätte minut kontrollerar storleken på backlogg för varje grupp,
- Innehåller en trigger som ger ett alert om backloggstorleken för någon grupp överstiger 100 under 30 minuter. Triggern beskrivs som en prototyp som automatiskt läggs till de upptäckta grupperna,
- Bygger diagram över backloggstorleken för varje replikeringsgrupp.
Du kan ladda ner mallen för Zabbix 2.2 .
Resultat
Efter att ha importerat mallen till Zabbix och skapat ett konto med nödvändiga rättigheter, behöver vi bara kopiera skripten till filservrarna som vi vill övervaka vad gäller DFSR, lägga till två rader i agentkonfigurationen på dem och starta om Zabbix-agenttjänsten, konfigurerad att starta under det nödvändiga kontot. Inga andra manuella inställningar för övervakning av DFSR krävs.
Källa: habr.com
