Monitorim i thjeshtë i Replikimit DFS në Zabbix

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 intBackLog

Skripti 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 përshkrimi, 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 këtu.

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

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster