Eenvoudige monitering van DFS-replikasie in Zabbix

Inleiding

Met 'n voldoende groot en verspreide infrastruktuur wat DFS as 'n enkele datatoegangspunt en DFSR vir data-replikasie tussen die datasentrum en takbedieners gebruik, ontstaan ​​die vraag om die status van hierdie replikasie te monitor.
Toevallig het ons byna onmiddellik na die begin van die gebruik van DFSR begin om Zabbix te implementeer om die bestaande dieretuin van verskeie gereedskap te vervang en infrastruktuurmonitering na 'n meer insiggewende, volledige en logiese vorm te bring. Ons sal praat oor die gebruik van Zabbix om DFS-replikasie te monitor.

Eerstens moet ons besluit watter data oor DFS-replikasie ons moet ontvang om die status daarvan te monitor. Die mees relevante aanwyser is die agterstand. Dit bevat lêers wat nie met ander lede van die replikasiegroep gesinchroniseer is nie. U kan die grootte daarvan met die hulpprogram sien dfsrdiaggeïnstalleer met die DFSR-rol. In die normale toestand van replikasie behoort die agterstandgrootte na nul te neig. Gevolglik dui groot getalle lêers in die agterstand op probleme met replikasie.

Nou oor die praktiese sy van die saak.

Om die agterstandgrootte deur Zabbix Agent te monitor, benodig ons:

  • Skrip wat die uitvoer sal ontleed dfsrdiag om finale agterstandgrootte waardes aan Zabbix te verskaf,
  • 'n Skrip wat sal bepaal hoeveel replikasiegroepe daar op die bediener is, watter vouers hulle repliseer en watter ander bedieners hulle insluit (ons wil nie dit alles met die hand vir elke bediener in Zabbix indryf nie, reg?),
  • Die invoer van hierdie skrifte as 'n UserParameter in die Zabbix-agentkonfigurasie vir daaropvolgende oproep van die moniteringsbediener,
  • Begin die Zabbix-agentdiens as 'n gebruiker met regte om die agterstand te lees,
  • Sjabloon vir Zabbix, waarin groepontdekking gekonfigureer sal word, verwerking van ontvangde data en die uitreiking van waarskuwings daaroor.

Script Ontleder

Om die ontleder te skryf, het ek VBS gekies as die mees universele taal wat in alle weergawes van Windows Server teenwoordig is. Die logika van die skrif is eenvoudig: dit ontvang die naam van die replikasiegroep, die gerepliseerde vouer en die name van die stuur- en ontvangbedieners via die opdragreël. Hierdie parameters word dan deurgegee na dfsrdiag, en afhangende van die uitset daarvan:
Aantal lêers - as 'n boodskap oor die teenwoordigheid van lêers in die agterstand ontvang word,
0 - as 'n boodskap ontvang is oor die afwesigheid van lêers in die agterstand ("Geen agterstand"),
-1 - as 'n foutboodskap ontvang is dfsrdiag wanneer die versoek uitgevoer word ("[FOUT]").

kry-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

Ontdekkingsskrif

Om vir Zabbix al die replikasiegroepe wat op die bediener self teenwoordig is, te bepaal en al die parameters wat vir die versoek vereis word (vouernaam, name van naburige bedieners) uit te vind, moet ons hierdie inligting eerstens kry en tweedens dit in 'n formaat wat Zabbix verstaan. Die formaat wat die ontdekkingsinstrument verstaan, lyk soos volg:

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

...

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

Die maklikste manier om die inligting waarin ons belangstel te kry, is deur WMI, om dit uit die ooreenstemmende afdelings van DfsrReplicationGroupConfig te trek. Gevolglik is 'n skrip gebore wat 'n versoek aan WMI genereer en 'n lys groepe, hul dopgehou en bedieners in die vereiste formaat uitstuur.

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

Ek stem saam, die skrif skyn dalk nie met die elegansie van die kode nie en iets daarin kan beslis vereenvoudig word, maar die hooffunksie daarvan - om inligting te gee oor die parameters van replikasiegroepe in 'n formaat wat Zabbix verstaanbaar - dit werk suksesvol.

Voeg skrifte by die Zabbix-agentkonfigurasie

Alles is uiters eenvoudig hier. Voeg die volgende reëls by die einde van die agentkonfigurasielêer:

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"

Natuurlik korrigeer ons die paaie na dié waar ons skrifte het. Ek plaas hulle in dieselfde vouer waar die agent geïnstalleer is.

Nadat u veranderinge aangebring het, herbegin die Zabbix-agentdiens.

Verander die gebruiker waaronder die Zabbix Agent-diens loop

Om inligting te ontvang deur dfsrdiag, moet die hulpprogram namens 'n rekening uitgevoer word wat administratiewe regte het vir beide die stuur en die ontvangs van lede van die replikasiegroep. Die Zabbix-agentdiens, wat by verstek onder die stelselrekening loop, sal nie aan so 'n versoek kan voldoen nie. Ek het 'n aparte rekening in die domein geskep, dit administratiewe regte op die vereiste bedieners gegee en hierdie bedieners gekonfigureer om die diens daaronder te begin.

Jy kan ook anderpad gaan: sedert dfsrdiag, in werklikheid, werk deur dieselfde WMI, wat jy kan gebruik beskrywing, hoe om 'n domeinrekening die reg te gee om dit te gebruik sonder om administratiewe regte uit te reik, maar as ons baie replikasiegroepe het, sal dit moeilik wees om regte aan elke groep uit te reik. As ons egter domeinstelselvolume-replikasie op domeinbeheerders wil monitor, kan dit die enigste aanvaarbare opsie wees, aangesien die gee van domeinadministrateurregte aan die moniteringsdiensrekening nie die beste idee is nie.

Monitering sjabloon

Op grond van die data wat ek ontvang het, het ek 'n sjabloon geskep wat:

  • Loop outomatiese ontdekking van replikasiegroepe een keer per uur,
  • Kontroleer een keer elke 5 minute die grootte van die agterstand vir elke groep,
  • Bevat 'n sneller wat 'n waarskuwing uitreik wanneer die grootte van die agterstand vir enige groep meer as 100 is vir 30 minute. Die sneller word beskryf as 'n prototipe wat outomaties by die ontdekte groepe gevoeg word,
  • Stip die agterstandgrootte vir elke replikasiegroep.

U kan die sjabloon vir Zabbix 2.2 aflaai hier.

Totale

Nadat ons die sjabloon in Zabbix ingevoer het en 'n rekening met die nodige regte geskep het, hoef ons net die skrifte na die lêerbedieners te kopieer wat ons vir DFSR wil monitor, twee reëls by die agentkonfigurasie daarop voeg en die Zabbix-agentdiens herbegin, konfigureer dit om namens die verlangde rekening te loop. Geen ander handmatige instellings is nodig om DFSR te monitor nie.

Bron: will.com

Voeg 'n opmerking