Monitorim i thjeshtë i replikimit të DFS në Zabbix

Paraqitje

Me një infrastrukturë mjaft të madhe dhe të shpërndarë që përdor DFS si një pikë të vetme aksesi në të dhëna dhe DFSR për riprodhimin e të dhënave midis qendrave të të dhënave dhe serverëve të degëve, lind pyetja e monitorimit të statusit të këtij replikimi.
Rastësisht, pothuajse menjëherë pasi filluam përdorimin e DFSR-së, filluam zbatimin e Zabbix me synimin për të zëvendësuar kopshtin zoologjik ekzistues të mjeteve të ndryshme dhe për ta sjellë monitorimin e infrastrukturës në një formë më informuese, të plotë dhe logjike. Ne do të flasim për përdorimin e Zabbix për të monitoruar përsëritjen e DFS.

Para së gjithash, ne duhet të vendosim se cilat të dhëna në lidhje me riprodhimin e DFS duhet të merren për të monitoruar statusin e tij. Treguesi më i rëndësishëm është prapambetja. Ai përmban skedarë që nuk janë sinkronizuar me anëtarët e tjerë të grupit të riprodhimit. Ju mund të shikoni madhësinë e tij duke përdorur programin dfsrdiag, i instaluar me rolin DFSR. Në një gjendje normale të përsëritjes, madhësia e prapambetjes duhet t'i afrohet zeros. Rrjedhimisht, një numër i madh skedarësh në dosjen e mbetur tregojnë probleme me riprodhimin.

Tani për anën praktike të çështjes.

Për të monitoruar madhësinë e prapambetjes përmes Agjentit Zabbix, do të na duhet:

  • Skript që do të analizojë daljen dfsrdiag për të ofruar vlerat përfundimtare të madhësisë së mbeturinave për Zabbix,
  • Një skript që do të përcaktojë sa grupe riprodhimi ka në server, çfarë dosjesh replikojnë dhe cilët serverë të tjerë përfshihen në to (nuk duam t'i fusim të gjitha këto në Zabbix me dorë për secilin server, apo jo?),
  • Shtimi i këtyre skripteve si UserParameter në konfigurimin e agjentit Zabbix për thirrje të mëvonshme nga serveri i monitorimit,
  • Nisja e shërbimit të agjentit Zabbix si një përdorues që ka të drejtë të lexojë dosjet e prapambetura,
  • Një shabllon për Zabbix, në të cilin do të konfigurohet zbulimi i grupeve, përpunimi i të dhënave të marra dhe lëshimi i sinjalizimeve mbi to.

Analizuesi i skriptit

Për të shkruar analizuesin, zgjodha VBS si gjuhën më universale të pranishme në të gjitha versionet e Windows Server. Logjika e skriptit është e thjeshtë: ai merr emrin e grupit të replikimit, dosjen e përsëritur dhe emrat e serverëve dërgues dhe marrës nëpërmjet linjës së komandës. Këta parametra kalohen më pas te dfsrdiag, dhe në varësi të prodhimit të tij prodhon:
Numri i skedarëve - nëse merret një mesazh në lidhje me praninë e skedarëve në dosjen e mbetur,
0 - nëse merret një mesazh në lidhje me mungesën e skedarëve në dosjen e mbetur ("Nuk ka prapambetje"),
-1 - nëse merret një mesazh gabimi dfsrdiag kur ekzekutoni një kërkesë ("[GABIM]").

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

Skript zbulimi

Në mënyrë që Zabbix të përcaktojë të gjitha grupet e riprodhimit të pranishëm në server dhe të zbulojë të gjithë parametrat e kërkuar për kërkesën (emri i dosjes, emrat e serverëve fqinjë), ne duhet, së pari, të marrim këtë informacion dhe së dyti, ta paraqesim atë. në një format të kuptueshëm për Zabbix. Formati që kupton mjeti i zbulimit duket si ky:

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

...

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

Mënyra më e lehtë për të marrë informacionin që na intereson është përmes WMI, duke e nxjerrë atë nga seksionet përkatëse të DfsrReplicationGroupConfig. Si rezultat, lindi një skript që gjeneron një kërkesë për WMI dhe nxjerr një listë të grupeve, dosjeve dhe serverëve të tyre në formatin e kërkuar.

DFSRDdiscovery.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

Jam dakord, skripti mund të mos shkëlqejë me elegancën e kodit dhe disa gjëra në të sigurisht që mund të thjeshtohen, por ai kryen funksionin e tij kryesor - siguron informacion në lidhje me parametrat e grupeve të riprodhimit në një format të kuptueshëm nga Zabbix.

Shtimi i skripteve në konfigurimin e agjentit Zabbix

Gjithçka këtu është jashtëzakonisht e thjeshtë. Shtoni rreshtat e mëposhtëm në fund të skedarit të konfigurimit të agjentit:

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, ne i rregullojmë shtigjet me ato ku kemi skripta. I vendosa në të njëjtën dosje ku është instaluar agjenti.

Pasi të bëni ndryshime, rinisni shërbimin e agjentit Zabbix.

Ndryshimi i përdoruesit nën të cilin funksionon shërbimi Zabbix Agent

Për të marrë informacion përmes dfsrdiag, programi duhet të ekzekutohet nën një llogari që ka të drejta administrative për dërgimin dhe marrjen e anëtarëve të grupit të replikimit. Shërbimi i agjentit Zabbix, i cili funksionon si parazgjedhje nën llogarinë e sistemit, nuk do të jetë në gjendje të ekzekutojë 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 konfigurova shërbimin që të funksionojë nën të në këta serverë.

Mund të shkoni në një mënyrë tjetër: sepse dfsrdiag, në fakt, funksionon përmes të njëjtës WMI, atëherë mund ta përdorni përshkrim, si t'i japim një llogarie domain-i të drejtat për ta përdorur atë pa lëshuar të drejta administrative, por nëse kemi shumë grupe të përsëritjes, atëherë lëshimi i të drejtave për secilin grup do të jetë i vështirë. Megjithatë, në rast se duam të monitorojmë përsëritjen e vëllimit të sistemit të domenit në kontrolluesit e domenit, kjo mund të jetë e vetmja mundësi e pranueshme, pasi dhënia e të drejtave të administratorit të domenit për llogarinë e shërbimit të monitorimit nuk është një ide e mirë.

Modeli i monitorimit

Bazuar në të dhënat që kam marrë, kam krijuar një shabllon që:

  • Kryen zbulimin automatik të grupeve të përsëritjes një herë në orë,
  • Kontrollon madhësinë e lëndës së mbetur për secilin grup një herë në 5 minuta,
  • Përmban një shkas që lëshon një sinjalizim kur madhësia e mbeturinave për çdo grup është më shumë se 100 për 30 minuta. Shkaku përshkruhet si një prototip që shtohet automatikisht në grupet e zbuluara,
  • Ndërton grafikët e madhësisë së mbeturinave për çdo grup replikimi.

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

Total

Pas importimit të shabllonit në Zabbix dhe krijimit të një llogarie me të drejtat e nevojshme, do të na duhet vetëm të kopjojmë skriptet në serverët e skedarëve që duam të monitorojmë për DFSR, të shtojmë dy rreshta në konfigurimin e agjentit në to dhe të rifillojmë shërbimin e agjentit Zabbix , duke e vendosur që të ekzekutohet si llogaria e dëshiruar. Nuk kërkohen cilësime të tjera manuale për monitorimin e DFSR.

Burimi: www.habr.com

Shto një koment