Ynlieding
Mei in frij grutte en ferspraat ynfrastruktuer dy't brûkt DFS as ien punt fan tagong ta gegevens en DFSR foar gegevens replikaasje tusken data sintra en branch tsjinners, de fraach ûntstiet fan tafersjoch op de status fan dizze replikaasje.
Tafallich, hast fuortendaliks nei't wy begon te brûken DFSR, begûnen wy Zabbix te ymplementearjen mei it doel om de besteande bistetún fan ferskate ark te ferfangen en ynfrastruktuermonitoring nei in mear ynformative, folsleine en logyske foarm te bringen. Wy sille prate oer it brûken fan Zabbix om DFS-replikaasje te kontrolearjen.
Alderearst moatte wy beslute hokker gegevens oer DFS-replikaasje moatte wurde krigen om de status te kontrolearjen. De meast relevante yndikator is efterstân. It befettet triemmen dy't net syngronisearre binne mei oare leden fan 'e replikaasjegroep. Jo kinne de grutte besjen mei it hulpprogramma dfsrdiag, ynstalleare mei de DFSR-rol. Yn in normale replikaasjetastân moat de efterstângrutte nul benaderje. Dêrtroch jouwe grutte oantallen bestannen yn 'e efterstân problemen mei replikaasje oan.
No oer de praktyske kant fan it probleem.
Om de grutte fan 'e efterstân fia Zabbix Agent te kontrolearjen, sille wy nedich wêze:
- Skript dat de útfier sil parse dfsrdiag om definitive wearden fan efterstângrutte oan Zabbix te leverjen,
- In skript dat sil bepale hoefolle replikaasjegroepen der binne op 'e tsjinner, hokker mappen se replikearje en hokker oare servers binne opnommen yn har (wy wolle dit alles net mei de hân ynfiere yn Zabbix foar elke server, toch?),
- It tafoegjen fan dizze skripts as UserParameter oan 'e Zabbix-agentkonfiguraasje foar folgjende oprop fan' e monitorserver,
- De Zabbix-agenttsjinst begjinne as in brûker dy't rjochten hat om de efterstân te lêzen,
- In sjabloan foar Zabbix, wêryn de deteksje fan groepen, ferwurking fan ûntfongen gegevens en it útjaan fan warskôgings oer har wurde konfigureare.
Skript parser
Om de parser te skriuwen, keas ik VBS as de meast universele taal oanwêzich yn alle ferzjes fan Windows Server. De logika fan it skript is ienfâldich: it ûntfangt de namme fan 'e replikaasjegroep, de replikearre map, en de nammen fan' e ferstjoerende en ûntfangende tsjinners fia de kommandorigel. Dizze parameters wurde dan trochjûn oan dfsrdiag, en ôfhinklik fan syn útfier produsearret it:
Oantal bestannen - as in berjocht wurdt ûntfongen oer de oanwêzigens fan bestannen yn 'e efterstân,
0 - as in berjocht wurdt ûntfongen oer it ûntbrekken fan bestannen yn 'e efterstân ("Gjin efterstân"),
-1 - as in flater berjocht wurdt ûntfongen dfsrdiag by it útfieren fan in fersyk ("[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 intBackLog
Discovery skript
Om Zabbix te bepalen alle replikaasjegroepen oanwêzich op 'e tsjinner en om alle parameters te finen dy't nedich binne foar it fersyk (mapnamme, nammen fan oanbuorjende tsjinners), moatte wy earst dizze ynformaasje krije, en as twadde, presintearje it yn in foar Zabbix begryplik formaat. It formaat dat it ûntdekkingsark begrypt sjocht der sa út:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
De maklikste manier om de ynformaasje te krijen wêryn wy ynteressearre binne, is fia WMI, en lûkt it út 'e oerienkommende seksjes fan DfsrReplicationGroupConfig. As resultaat waard in skript berne dat in fersyk oan WMI genereart en in list mei groepen, har mappen en servers yn it fereaske formaat útfiert.
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
Ik gean akkoard, it skript kin miskien net skine mei elegânsje fan koade en guon dingen dêryn kinne grif ferienfâldige wurde, mar it docht syn haadfunksje - it leverjen fan ynformaasje oer de parameters fan replikaasjegroepen yn in formaat dat begrypt wurdt troch Zabbix.
Skripten tafoegje oan 'e Zabbix-agentkonfiguraasje
Alles hjir is ekstreem ienfâldich. Foegje de folgjende rigels ta oan it ein fan it agentkonfiguraasjetriem:
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"
Fansels oanpasse wy de paden oan dyjingen wêr't wy skripts hawwe. Ik set se yn deselde map dêr't de agent is ynstallearre.
Nei it meitsjen fan wizigingen, start de Zabbix-agenttsjinst opnij.
It feroarjen fan de brûker ûnder dêr't de Zabbix Agent-tsjinst rint
Om ynformaasje te krijen fia dfsrdiag, it hulpprogramma moat wurde útfierd ûnder in akkount dat bestjoerlike rjochten hat foar sawol ferstjoerende as ûntfangende leden fan 'e replikaasjegroep. De Zabbix-agenttsjinst, dy't standert rint ûnder it systeemakkount, sil sa'n fersyk net kinne útfiere. Ik makke in apart akkount yn it domein, joech it bestjoerlike rjochten op de nedige servers, en konfigureare de tsjinst om derûnder op dizze servers te rinnen.
Jo kinne in oare kant op: omdat dfsrdiag, yn feite, wurket troch deselde WMI, dan kinne jo brûke
Monitoring template
Op grûn fan de gegevens dy't ik krige, haw ik in sjabloan makke dat:
- Rint automatyske ûntdekking fan replikaasjegroepen ien kear yn 'e oere,
- Kontrolearret de efterstângrutte foar elke groep ien kear elke 5 minuten,
- Befettet in trigger dy't in warskôging jout as de efterstângrutte foar elke groep mear is as 100 foar 30 minuten. De trigger wurdt beskreaun as in prototype dat automatysk wurdt tafoege oan ûntdutsen groepen,
- Bout grafiken foar efterstângrutte foar elke replikaasjegroep.
Jo kinne it sjabloan downloade foar Zabbix 2.2
It resultaat
Nei it ymportearjen fan it sjabloan yn Zabbix en it meitsjen fan in akkount mei de nedige rjochten, hoege wy allinich de skripts te kopiearjen nei de triemservers dy't wy wolle kontrolearje foar DFSR, foegje twa rigels ta oan 'e agentkonfiguraasje op har en starte de Zabbix-agenttsjinst opnij , it ynstellen om te rinnen as it winske akkount. Gjin oare hânmjittige ynstellingen binne nedich foar DFSR-monitoring.
Boarne: www.habr.com