Monitorim i thjeshtë i DFS Replication në Zabbix

Hyrje

Kur një infrastrukturë mjaft të madhe dhe të shpërndarë që përdor DFS si një pikë të vetme qasjeje në të dhëna dhe DFSR për replikimin e të dhënave midis Qendrës së Të Dhënave dhe serverëve të degës, lind pyetja e monitorimit të gjendjes së kësaj replikimi.
Rastësisht, menjëherë pas fillimit të përdorimit të DFSR, ne filluam implementimin e Zabbix me qëllim zëvendësimin e një kopshti ekzistues të mjeteve të ndryshme dhe të sjellim monitorimin e infrastrukturës në një pamje më të informuar, të plotë dhe logjike. Do të flasim për përdorimin e Zabbix për të monitoruar replikimin e DFS.

Së pari, na nevojitet të përcaktojmë cilat të dhëna rreth replikimit të DFS duhen marrë për të kontrolluar gjendjen e tij. Indikatori më i rëndësishëm është backlog. Atëherë, mbledhjen e skedarëve që nuk janë sinkronizuar me anëtarët e tjerë të grupit të replikimit e gjejmë në të. Mund ta shohim madhësinë e saj me ndihmën e dfsrdiag, i cili instalohet me rolin DFSR. Në gjendjen normale të replikimit, madhësia e backlog duhet të tendoset drejt zero. Prandaj, vlerat e mëdha të numrit të skedarëve në backlog tregojnë për probleme me replikimin.

Tani për aspektin praktik të çështjes.

Për të monitoruar madhësinë e backlog 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,
  • NjĂ« skript qĂ« do tĂ« pĂ«rcaktojĂ« se sa grupe replikimi ka nĂ« server, cilat dosje ato po replikojnĂ« dhe cilat serverĂ« tĂ« tjerĂ« hyjnĂ« nĂ« to (ne nuk duam tĂ« shtojmĂ« gjithçka manualisht nĂ« Zabbix pĂ«r çdo server, apo jo?),
  • Shtimi i kĂ«tyre skripteve si UserParameter nĂ« konfigurimin e agentit Zabbix pĂ«r thirrje tĂ« mĂ«vonshme nga serveri i monitorimit,
  • Nxjerrja e shĂ«rbimit tĂ« agentit Zabbix nĂ« emĂ«r tĂ« njĂ« pĂ«rdoruesi qĂ« ka tĂ« drejta pĂ«r tĂ« lexuar backlog,
  • NjĂ« model pĂ«r Zabbix, ku do tĂ« konfiguroni zbulimin e grupeve, pĂ«rpunimin e tĂ« dhĂ«nave tĂ« marra dhe dhĂ«nien e alarmeve pĂ«r to.

Skripti-analizues

Për të shkruar analizuesin, zgjodha VBS si gjuhën më universale, e cila është e pranishme në të gjitha versionet e Windows Server. Logjika e punës së skriptit është mjaft e thjeshtë: ai merr përmes komandës emrin e grupit të replikimit, dosjen që po replikon dhe emrat e serverëve dërgues dhe marrës. Pastaj këto parametra kalohen në dfsrdiag, dhe në varësi të daljes së saj, jepet:
Numri i skedarĂ«ve — nĂ«se Ă«shtĂ« marrĂ« njĂ« mesazh pĂ«r praninĂ« e skedarĂ«ve nĂ« backlog,
0 — nĂ«se merrni njĂ« mesazh pĂ«r mungesĂ«n e skedarĂ«ve nĂ« backlog («No Backlog»),
-1 — nĂ«se merrni njĂ« mesazh gabimi dfsrdiag nĂ« pĂ«rmbushjen 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 intBackLog

Skripti i zbulimit

Për të lejuar që Zabbix të identifikojë automatikisht të gjitha grupet e replikimit që janë të pranishme në server, dhe të zbulojë të gjithë parametrat e nevojshëm për kërkesën (emri i folderit, emrat e serverëve fqinj), na nevojitet kësaj informacioni, së pari, për ta marrë, dhe së dyti, ta paraqesim në një format të kuptueshëm për Zabbix. Formati që e kupton instrumenti i zbulimit është kështu:

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

Informacioni që na intereson mund të merret më lehtë përmes WMI, duke e nxjerrë atë nga seksionet përkatëse DfsrReplicationGroupConfig. Në përfundim, u lind skripti që formon një kërkesë për WMI dhe në daljen e saj jep një listë grupesh, folderash dhe serverësh 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 pranuar, skenari, ndoshta, nuk shquhet për shkëlqim kodesh dhe ndoshta mund të thjeshtohet disa gjëra, por funksionin e tij kryesor - të ofrojë 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 agjentit Zabbix

Këtu gjithçka është jashtëzakonisht e thjeshtë. Në fund të skedarit të konfigurimit të agjentit 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"

Natyrisht, rrugët i përmirësojmë në ato ku kemi skriptet. Unë i kam vendosur në të njëjtën dosje ku është instaluar agjenti.

Pas bërë ndryshimeve, rindizni shërbimin e agjentit Zabbix.

Ndryshimi i përdoruesit nga i cili funksionon shërbimi Zabbix Agent

Për të marrë informacionin përmes dfsrdiag, utilitari duhet të nisë nga një llogari që ka të drejta administrative si në anëtarët e group-it dërgues ashtu edhe në ata marrës. Shërbimi i agjentit Zabbix, që funksionon nën llogarinë sistemore si parazgjedhje, nuk mund të kryejë një kërkesë të tillë. Krijova një llogari të veçantë në domen, i dhashë të drejta administrative në serverët e nevojshëm dhe e konfigurita shërbimin që të nisë nga ajo llogari në këto servera.

Mund tĂ« shkojmĂ« edhe nĂ« njĂ« rrugĂ« tjetĂ«r: pĂ«r shkak se dfsrdiag, nĂ« thelb, punon nĂ«pĂ«rmjet tĂ« njĂ«jtĂ«s WMI, mund tĂ« shfrytĂ«zojmĂ« pĂ«rshkrimin, se si t'i japim llogarisĂ« sĂ« domenit tĂ« drejtat pĂ«r ta shfrytĂ«zuar pa i dhĂ«nĂ« tĂ« drejta administrative, por nĂ«se kemi shumĂ« grupe replikimi, do tĂ« ishte e vĂ«shtirĂ« tĂ« jepnim tĂ« drejta pĂ«r çdo grup. MegjithatĂ«, nĂ« rastin kur duam tĂ« monitorojmĂ« replikimin e Domain System Volume nĂ« kontrolluesit e domenit, kjo mund tĂ« jetĂ« opsioni i vetĂ«m i pranueshĂ«m, pasi t'i japĂ«sh privilegje administratori llogarisĂ« sĂ« shĂ«rbimit tĂ« monitorimit — nuk Ă«shtĂ« ideja mĂ« e mirĂ«.

Shablloni i monitorimit

Duke u bazuar në të dhënat e marra, krijova një shabllon që:

  • Nis automatikisht zbulimin e grupeve tĂ« replikimit çdo orĂ«,
  • Kontrollon madhĂ«sinĂ« e backlog pĂ«r çdo grup çdo 5 minuta,
  • PĂ«rmban njĂ« nxitĂ«s qĂ« jep njĂ« alarm kur madhĂ«sia e backlog pĂ«r ndonjĂ« grup kalon 100 pĂ«r 30 minuta. NxitĂ«si pĂ«rshkruhet si njĂ« prototip, qĂ« shtohet automatikisht nĂ« grupet e zbuluara,
  • NdĂ«rton grafike tĂ« madhĂ«sisĂ« sĂ« backlog pĂ«r çdo grup replikimi.

Mund të shkarkoni shabllonin për Zabbix 2.2 këtu.

Përfundimi

Pas importit të shabllonit në Zabbix dhe krijimit të një llogarie me të drejtat e nevojshme, mjafton vetëm të kopjoni skriptet në serverët e skedarëve që dëshirojmë të monitorojmë për DFSR, të shtoni dy rreshta në konfigurimin e agjentit dhe të riaktivizoni shërbimin agjentit Zabbix, duke e konfiguruar që të nisë nga llogaria e nevojshme. Nuk do të nevojiten asnjë konfigurim tjetër manual për monitorimin e DFSR.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster