Hyrje
Në një infrastrukturë të madhe dhe të shpërndarë, që përdor DFS si pikë e vetme të qasjes në të dhëna dhe DFSR për replikimin e të dhënave midis Qendrave të të Dhënave dhe serverëve të filialeve, lind pyetja e monitorimit të gjendjes së këtij replikimi.
Rasti ka qenë që pothuajse menjëherë pas fillimit të përdorimit të DFSR, ne filluam implementimin e Zabbix me qëllim të zëvendësimit të një grumbulli ekzistues të mjeteve të ndryshme dhe për të sjellë monitorimin e infrastrukturës në një pamje më informuese, të plotë dhe logjike. Përdorimi i Zabbix për të monitoruar replikimin e DFS do të jetë tema e këtij artikulli.
Së pari, na nevojitet të përcaktojmë se cilat të dhëna rreth replikimit të DFS duhen marrë për të kontrolluar gjendjen e tij. Indikatori më relevant është backlog. Këtu përfshihen skedarët që nuk janë sinkronizuar me anëtarët e tjerë të grupit të replikimit. Mund të shikoni madhësinë e tij me utilitarin dfsrdiag, i cili instalohet së bashku me rolin DFSR. Në një gjendje normale të replikimit, madhësia e backlog duhet të tendoset drejt zeros. Ndaj, vlera të mëdha të numrit të skedarëve në backlog tregojnë për probleme me replikimin.
Tani, për pjesën praktike të çështjes.
Për të monitoruar madhësinë e backlog-ut përmes Zabbix Agent, na nevojiten:
- Një skript që do të analizojë daljen dfsrdiag për të ofruar në Zabbix vlerat përfundimtare të madhësisë së backlog-ut,
- Një skript që do të përcaktojë se sa grupe replikimi ka në server, cilat dosje ato replikojnë dhe cilat servera të tjerë përfshihen (nuk duam ta shkruajmë të gjitha këto në Zabbix manualisht për çdo server, apo jo?),
- Inkludimi i këtyre skripteve si UserParameter në konfigurimin e agjentin Zabbix për thirrjen e mëvonshme nga serveri i monitorimit,
- à aktivizimi i shërbimit të agjentit Zabbix nga një përdorues që ka të drejta për të lexuar backlog-un,
- Një shabllon për Zabbix, ku do të konfigurohet zbulimi i grupeve, përpunimi i të dhënave të marra dhe njoftimi për to.
Skripti-analizues
Për të shkruar analizuesin zgjodha VBS si gjuhën më universale, e pranishme në të gjitha versionet e Windows Server. Logjika e punës së skriptit është e thjeshtë: ai merr përmes komandës emrin e grupit të replikimit, dosjen e replikuar dhe emrat e serverave dërgues dhe marrës. Më pas, këto parametra dërgohen në dfsrdiag, dhe në varësi të daljes së saj jepet:
Numri i skedareve â nĂ«se Ă«shtĂ« marrĂ« njĂ« mesazh mbi praninĂ« e skedareve nĂ« backlog,
0 â nĂ«se kĂ«mbimi i mesazhit tĂ« mungesĂ«s sĂ« skedarĂ«ve nĂ« backlog ("No Backlog"),
-1 â nĂ«se Ă«shtĂ« marrĂ« njĂ« mesazh gabimi dfsrdiag nĂ« kryerjen e kĂ«rkesĂ«s ("[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 intBackLogSkripti i zb discovery
Për të lejuar që Zabbix të identifikojë vetë të gjitha grupet e replikimit që janë të pranishme në server, dhe të zbulojë vetë të gjithë parametrat e nevojshëm për kërkesën (emri i dosjes, emrat e fqinjëve të serverëve), na nevojitet që këtë informacion, së pari, ta marrim, dhe së dyti, ta prezantojmë atë në një format të dukshëm për Zabbix. Formati që e kupton instrumenti i discovery-t, duket kështu:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}Informacionin që na intereson e marrim më lehtë përmes WMI, duke e nxjerrë atë nga seksionet përkatëse DfsrReplicationGroupConfig. Në fund lindi një skriptë që formon një kërkesë për WMI dhe përfundimisht jep një listë grupesh, dosjesh dhe serverash në formatin e nevojshëm.
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
E pranoj, skripti ndoshta nuk është i shkëlqyer në aspektin e kodit dhe ka diçka që me siguri mund të thjeshtohet, por funksionin e tij kryesor - të japë informacion mbi parametrat e grupeve të replikimit në një format të kuptueshëm për Zabbix - e kryen me sukses.
Shtimi i skripteve në konfigurimin e agentit Zabbix
Këtu gjithçka është ekstremisht e thjeshtë. Në fund të skedarit të konfigurimit të agentit, shtojmë rreshtat:
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"
Sigurisht, rrugët i rregullojmë në ato ku i kemi skriptet. Unë i kam vendosur ato në të njëjtën dosje ku është instaluar agjenti.
Pas bërë ndryshimeve, rindezim shërbimin e agentit Zabbix.
Ndryshimi i përdoruesit nga i cili funksionon shërbimi Zabbix Agent
Për të marrë informacion nëpërmjet dfsrdiag, duhen të fillojë nga një llogari që ka të drejta administrative si në anëtarët e sending ashtu edhe në ata të receiving të grupit të replikimit. Shërbimi i agentit Zabbix, i cili zakonisht drejtohet nga një llogari sistemike, nuk do të jetë në gjendje ta kryejë këtë kërkesë. Unë krijova një llogari të veçantë në domen, i dhashë atij të drejta administrative në serverat e nevojshëm dhe e konfigurova këtë shërbim për të funksionuar nën atë llogari.
Mund të shkojmë edhe në një mënyrë tjetër: duke qenë se dfsrdiag, në thelb, punon përmes të njëjtit WMI, mund të përfitojmë nga , si t'i japim llogarisë së domenit të drejta për ta përdorur atë pa i dhënë të drejta administrative, por nëse kemi shumë grupe replikimi, do të ishte e vështirë të jepeshin të drejta për secilën grup. Megjithatë, nëse duam të monitorojmë replikimin Domain System Volume në kontrollet e domenit, kjo mund të jetë opsioni i vetëm i pranueshëm, pasi dhënia e të drejtave të administratorit të domenit llogarive të shërbimit të monitorimit nuk është idea më e mirë.
Shablloni i monitorimit
Baze në të dhënat e marra, unë krijova një shabllon që:
- Ădo orĂ« aktivizon zbuluarjen automatike tĂ« grupeve tĂ« replikimit,
- Kontrollon madhësinë e backlog çdo 5 minuta për çdo grup,
- Përmban një trigger që lëshon një alarme kur madhësia e backlog për ndonjë grup është mbi 100 për 30 minuta. Triggeri është përshkruar si një prototip, i cili shtohet automatikisht në grupet e zbuluara,
- Ndërton grafike të madhësisë së backlog për çdo grup replikimi.
Mund të shkarkoni template për Zabbix 2.2 .
Përfundimi
Pas importimit të template në Zabbix dhe krijimit të një llogarie me të drejtat e nevojshme, është mjaft të kopjojmë skenaret në serverët e skedave që dëshirojmë të monitorojmë përsa i përket DFSR, të shtojmë dy rreshta në konfigurimin e agentit mbi ta dhe të rindezim shërbimin e agentit Zabbix, duke e konfiguruar atë të nisë nën emrin e llogarisë së nevojshme. Nuk do të nevojiten cilësime manuale të tjera për monitorimin e DFSR.
Burimi: habr.com
