Jednoduché monitorování replikace DFS v Zabbix

úvod

S poměrně velkou a distribuovanou infrastrukturou, která používá DFS jako jediný přístupový bod k datům a DFSR pro replikaci dat mezi datovými centry a pobočkovými servery, vyvstává otázka monitorování stavu této replikace.
Shodou okolností jsme téměř okamžitě poté, co jsme začali používat DFSR, začali implementovat Zabbix s cílem nahradit stávající zoo různé nástroje a přinést monitoring infrastruktury do informativnější, ucelenější a logičtější podoby. Budeme mluvit o použití Zabbix ke sledování replikace DFS.

Nejprve se musíme rozhodnout, jaká data o replikaci DFS je třeba získat, abychom mohli sledovat její stav. Nejrelevantnějším ukazatelem jsou nevyřízené položky. Obsahuje soubory, které nebyly synchronizovány s ostatními členy replikační skupiny. Jeho velikost můžete zobrazit pomocí nástroje dfsrdiag, nainstalovaný s rolí DFSR. V normálním stavu replikace by se velikost nevyřízené položky měla blížit nule. V souladu s tím velký počet souborů v backlogu naznačuje problémy s replikací.

Nyní o praktické stránce problému.

Abychom mohli monitorovat velikost backlogu prostřednictvím Zabbix Agenta, budeme potřebovat:

  • Skript, který bude analyzovat výstup dfsrdiag poskytnout společnosti Zabbix konečné hodnoty velikosti nevyřízených položek,
  • Skript, který určí, kolik replikačních skupin je na serveru, jaké složky replikují a jaké další servery jsou v nich zahrnuty (nechceme to všechno zadávat do Zabbixu ručně pro každý server, že?),
  • Přidání těchto skriptů jako UserParameter do konfigurace agenta Zabbix pro následné volání z monitorovacího serveru,
  • Spuštění služby agenta Zabbix jako uživatel, který má práva číst nevyřízené položky,
  • Šablona pro Zabbix, ve které se bude konfigurovat detekce skupin, zpracování přijatých dat a vydávání upozornění na ně.

Parser skriptů

Pro napsání analyzátoru jsem zvolil VBS jako nejuniverzálnější jazyk přítomný ve všech verzích Windows Serveru. Logika skriptu je jednoduchá: přijímá název replikační skupiny, replikovanou složku a názvy odesílacích a přijímajících serverů prostřednictvím příkazového řádku. Tyto parametry jsou pak předány do dfsrdiaga v závislosti na svém výstupu produkuje:
Počet souborů – pokud je přijata zpráva o přítomnosti souborů v backlogu,
0 — pokud je přijata zpráva o nepřítomnosti souborů v backlogu (“No Backlog”),
-1 - pokud je přijata chybová zpráva dfsrdiag při provádění požadavku ("[CHYBA]").

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

Discovery skript

Aby mohl Zabbix určit všechny replikační skupiny přítomné na serveru a zjistit všechny parametry požadované pro požadavek (název složky, jména sousedních serverů), potřebujeme tyto informace za prvé získat a za druhé prezentovat ve formátu srozumitelném pro Zabbix. Formát, kterému nástroj pro vyhledávání rozumí, vypadá takto:

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

...

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

Nejjednodušší způsob, jak získat informace, které nás zajímají, je prostřednictvím WMI, jejich stažením z odpovídajících částí DfsrReplicationGroupConfig. V důsledku toho se zrodil skript, který generuje požadavek na WMI a vydává seznam skupin, jejich složek a serverů v požadovaném formátu.

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

Souhlasím, skript možná nezáří elegancí kódu a některé věci v něm by se určitě daly zjednodušit, ale plní svou hlavní funkci - poskytování informací o parametrech replikačních skupin ve formátu srozumitelném pro Zabbix.

Přidání skriptů do konfigurace agenta Zabbix

Vše je zde velmi jednoduché. Na konec konfiguračního souboru agenta přidejte následující řádky:

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"

Cesty samozřejmě upravujeme na ty, kde máme skripty. Dal jsem je do stejné složky, kde je nainstalován agent.

Po provedení změn restartujte službu agenta Zabbix.

Změna uživatele, pod kterým služba Zabbix Agent běží

Aby bylo možné přijímat informace prostřednictvím dfsrdiag, obslužný program musí být spuštěn pod účtem, který má práva správce k odesílajícím i přijímajícím členům replikační skupiny. Služba agenta Zabbix, která je standardně spuštěna pod systémovým účtem, nebude moci takový požadavek provést. Vytvořil jsem samostatný účet v doméně, udělil mu administrátorská práva na nezbytných serverech a nakonfiguroval službu tak, aby na těchto serverech běžela pod ním.

Můžete jít jinou cestou: protože dfsrdiag, ve skutečnosti funguje přes stejné WMI, pak můžete použít popis, jak dát doménovému účtu práva k jeho používání bez udělení administrátorských práv, ale pokud máme mnoho replikačních skupin, pak bude udělování práv každé skupině obtížné. V případě, že chceme monitorovat replikaci systémového svazku domény na řadičích domény, může to být jediná přijatelná možnost, protože udělení práv správce domény k účtu monitorovací služby není dobrý nápad.

Monitorovací šablona

Na základě získaných dat jsem vytvořil šablonu, která:

  • Spouští automatické zjišťování replikačních skupin jednou za hodinu,
  • Kontroluje velikost nevyřízeného záznamu pro každou skupinu každých 5 minut,
  • Obsahuje spouštěč, který vydá výstrahu, když je velikost nevyřízené položky pro jakoukoli skupinu větší než 100 po dobu 30 minut. Spouštěč je popsán jako prototyp, který se automaticky přidává do detekovaných skupin,
  • Vytváří grafy velikosti nevyřízených položek pro každou skupinu replikace.

Můžete si stáhnout šablonu pro Zabbix 2.2 zde.

Celkový

Po importu šablony do Zabbix a vytvoření účtu s potřebnými právy nám bude stačit zkopírovat skripty na souborové servery, které chceme sledovat pro DFSR, přidat na ně dva řádky do konfigurace agenta a restartovat službu agenta Zabbix , nastavte jej tak, aby běžel jako požadovaný účet. Pro monitorování DFSR nejsou nutná žádná další ruční nastavení.

Zdroj: www.habr.com

Přidat komentář