Einfach Iwwerwaachung vun DFS Replikatioun an Zabbix

Aféierung

Mat enger zimlech grousser a verdeeler Infrastruktur déi DFS als eenzegen Zougangspunkt op Daten an DFSR fir Datereplikatioun tëscht Datenzenteren a Brancheserver benotzt, stellt d'Fro op d'Iwwerwaachung vum Status vun dëser Replikatioun.
Zoufälleg, bal direkt nodeems mir ugefaang hunn DFSR ze benotzen, hu mir ugefaang Zabbix ëmzesetzen mam Zil den existente Zoo vu verschiddenen Tools z'ersetzen an d'Infrastruktur Iwwerwaachung op eng méi informativ, komplett a logesch Form ze bréngen. Mir schwätzen iwwer d'Benotzung vun Zabbix fir DFS Replikatioun ze iwwerwaachen.

Als éischt musse mir entscheeden wéi eng Donnéeën iwwer DFS Replikatioun musse kritt ginn fir säi Status ze iwwerwaachen. Déi relevantst Indikator ass Réckstand. Et enthält Dateien déi net mat anere Membere vun der Replikatiounsgrupp synchroniséiert goufen. Dir kënnt seng Gréisst mat dem Utility kucken dfsrdiag, installéiert mat der DFSR Roll. An engem normale Replikatiounszoustand sollt d'Backloggréisst Null ukommen. Deementspriechend weisen eng grouss Zuel vu Dateien am Réckbléck Problemer mat der Replikatioun.

Elo iwwer déi praktesch Säit vum Thema.

Fir d'Gréisst vum Réckstand duerch Zabbix Agent ze iwwerwaachen, brauche mir:

  • Skript dat den Ausgang parséiert dfsrdiag fir endgülteg Réckstandsgréisst Wäerter un Zabbix ze liwweren,
  • E Skript dat wäert bestëmmen wéivill Replikatiounsgruppen et um Server sinn, wéi eng Ordner se replizéieren a wéi eng aner Serveren dra sinn (mir wëllen dat alles net an Zabbix mat der Hand fir all Server aginn, richteg?),
  • Dës Scripten als UserParameter an d'Zabbix Agent Konfiguratioun bäizefügen fir spéider vum Iwwerwaachungsserver ze ruffen,
  • Start den Zabbix Agent Service als Benotzer deen d'Rechter huet fir de Réckstand ze liesen,
  • Eng Schabloun fir Zabbix, an där d'Detektioun vu Gruppen, d'Veraarbechtung vun den empfangenen Donnéeën an d'Emissioun vun Alarmer op hinnen konfiguréiert gëtt.

Skript Parser

Fir de Parser ze schreiwen, hunn ech VBS als déi universellst Sprooch gewielt, déi an all Versioune vu Windows Server präsent ass. D'Logik vum Skript ass einfach: et kritt den Numm vun der Replikatiounsgrupp, de replizéierten Dossier, an d'Nimm vun de Sender an Empfangsserver iwwer d'Kommandozeil. Dës Parameteren ginn dann un dfsrdiag, an ofhängeg vu senger Ausgab produzéiert et:
Unzuel vun Dateien - wann e Message iwwer d'Präsenz vu Dateien am Réckstand kritt gëtt,
0 - wann e Message iwwer d'Feele vu Dateien am Réckbléck kritt gëtt ("No Backlog"),
-1 - wann e Feeler Message kritt dfsrdiag wann Dir eng Ufro ausféiert ("[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

Entdeckung Schrëft

Fir datt Zabbix all d'Replikatiounsgruppen um Server feststellt an all d'Parameteren erausfannen, déi fir d'Ufro erfuerderlech sinn (Dossiernumm, Nimm vun de Nopeschserveren), musse mir éischtens dës Informatioun kréien, an zweetens presentéieren se. an engem Format verständlech fir Zabbix. De Format dat den Entdeckungsinstrument versteet gesäit esou aus:

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

...

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

Deen einfachste Wee fir d'Informatioun ze kréien, déi mir interesséiert sinn, ass duerch WMI, an zitt se aus de entspriechende Sektiounen vun DfsrReplicationGroupConfig. Als Resultat gouf e Skript gebuer, deen eng Ufro un WMI generéiert an eng Lëscht vu Gruppen, hir Classeure a Serveren am erfuerderleche Format erausgëtt.

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

Ech averstanen, d'Skript kann net mat Eleganz vum Code blénken an e puer Saachen dran kéinte sécherlech vereinfacht ginn, awer et mécht seng Haaptfunktioun - Informatioun iwwer d'Parameter vun de Replikatiounsgruppen an engem Format verständlech vum Zabbix.

Füügt Scripten un d'Zabbix Agent Konfiguratioun

Alles hei ass extrem einfach. Füügt déi folgend Zeilen un d'Enn vun der Agent Konfiguratiounsdatei:

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"

Natierlech passen mir d'Weeër un déi wou mir Skripte hunn. Ech setzen se am selwechten Dossier wou den Agent installéiert ass.

Nodeems Dir Ännerungen gemaach hutt, start den Zabbix Agent Service nei.

Ännert de Benotzer ënner deem den Zabbix Agent Service leeft

Fir Informatiounen ze kréien duerch dfsrdiag, d'Utility muss ënner engem Kont lafen, deen administrativ Rechter huet fir Membere vun der Replikatiounsgrupp ze schécken an ze kréien. Den Zabbix Agent Service, deen als Standard ënner dem Systemkonto leeft, kann esou eng Ufro net ausféieren. Ech hunn e separaten Kont am Domain erstallt, hunn et administrativ Rechter op déi néideg Serveren ginn, an de Service konfiguréiert fir op dës Serveren ze lafen.

Dir kënnt en anere Wee goen: well dfsrdiag, Tatsächlech, Wierker duerch déi selwecht WMI, da kënnt Dir benotzen Beschreiwung, Wéi gitt Dir e Domainkonto d'Rechter fir se ze benotzen ouni administrativ Rechter auszeginn, awer wa mir vill Replikatiounsgruppen hunn, da gëtt d'Rechter op all Grupp schwiereg. Wéi och ëmmer, am Fall wou mir d'Domain System Volume Replikatioun op Domain Controller wëllen iwwerwaachen, kann dëst déi eenzeg akzeptabel Optioun sinn, well d'Domain Administrator Rechter op den Iwwerwaachungsservice Kont ginn ass net eng gutt Iddi.

Iwwerwachung Schabloun

Baséierend op den Donnéeën déi ech krut hunn ech eng Schabloun erstallt déi:

  • Leeft automatesch Entdeckung vu Replikatiounsgruppen eemol pro Stonn,
  • Kontrolléiert d'Backloggréisst fir all Grupp eemol all 5 Minutten,
  • Enthält en Ausléiser deen eng Alarm erausgëtt wann d'Backloggréisst fir all Grupp méi wéi 100 fir 30 Minutten ass. Den Ausléiser gëtt als Prototyp beschriwwen, deen automatesch un detektéierte Gruppen bäigefüügt gëtt,
  • Baut Réckbléckgréisst Grafike fir all Replikatiounsgrupp.

Dir kënnt d'Schabloun fir Zabbix 2.2 eroflueden hei.

D 'Resultat

Nodeems Dir d'Schabloun an Zabbix importéiert an e Kont mat den néidege Rechter erstallt hutt, brauche mir nëmmen d'Skripten op d'Dateiserver ze kopéieren, déi mir fir DFSR iwwerwaache wëllen, zwee Zeilen an d'Agentkonfiguratioun op hinnen addéieren an den Zabbix Agent Service nei starten , astellen et als de gewënschte Kont ze lafen. Keng aner manuell Astellunge si fir DFSR Iwwerwaachung erfuerderlech.

Source: will.com

Setzt e Commentaire