Jednoduché monitorovanie replikácie DFS v Zabbixe

Úvod

Pri pomerne veľkej a distribuovanej infraštruktúre, ktorá využíva DFS ako jediný prístupový bod k údajom a DFSR na replikáciu údajov medzi dátovými centrami a pobočkovými servermi, vyvstáva otázka monitorovania stavu tejto replikácie.
Zhodou okolností sme takmer okamžite po tom, ako sme začali používať DFSR, začali implementovať Zabbix s cieľom nahradiť existujúcu zoologickú záhradu rôznymi nástrojmi a priniesť monitoring infraštruktúry do informatívnejšej, ucelenejšej a logickejšej podoby. Budeme hovoriť o používaní Zabbixu na monitorovanie replikácie DFS.

V prvom rade sa musíme rozhodnúť, aké údaje o replikácii DFS je potrebné získať na sledovanie jej stavu. Najrelevantnejším ukazovateľom sú nevybavené veci. Obsahuje súbory, ktoré neboli synchronizované s ostatnými členmi replikačnej skupiny. Jeho veľkosť si môžete pozrieť pomocou pomôcky dfsrdiag, nainštalovaný s rolou DFSR. V normálnom stave replikácie by sa veľkosť nevybavených vecí mala priblížiť k nule. Veľký počet súborov v backlogu teda naznačuje problémy s replikáciou.

Teraz o praktickej stránke problému.

Aby sme mohli monitorovať veľkosť backlogu prostredníctvom Zabbix Agenta, budeme potrebovať:

  • Skript, ktorý bude analyzovať výstup dfsrdiag poskytnúť spoločnosti Zabbix konečné hodnoty veľkosti nevybavených vecí,
  • Skript, ktorý určí, koľko replikačných skupín je na serveri, aké priečinky replikujú a aké ďalšie servery sú v nich zahrnuté (nechceme to všetko zadávať do Zabbixu ručne pre každý server, však?),
  • Pridanie týchto skriptov ako UserParameter do konfigurácie agenta Zabbix pre následné volanie z monitorovacieho servera,
  • Spustenie služby agenta Zabbix ako používateľa, ktorý má práva čítať nevybavené veci,
  • Šablóna pre Zabbix, v ktorej sa bude konfigurovať detekcia skupín, spracovanie prijatých údajov a vydávanie upozornení na ne.

Analyzátor skriptov

Na napísanie syntaktického analyzátora som si vybral VBS ako najuniverzálnejší jazyk prítomný vo všetkých verziách Windows Server. Logika skriptu je jednoduchá: cez príkazový riadok prijíma názov replikačnej skupiny, replikovaného priečinka a názvy odosielajúcich a prijímajúcich serverov. Tieto parametre sa potom odovzdajú dfsrdiaga v závislosti od svojho výstupu produkuje:
Počet súborov – ak je prijatá správa o prítomnosti súborov v backlogu,
0 — ak je prijatá správa o absencii súborov v backlogu (“No Backlog”),
-1 - ak je prijaté chybové hlásenie dfsrdiag pri vykonávaní požiadavky ("[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

Objavovací skript

Aby mohol Zabbix určiť všetky replikačné skupiny prítomné na serveri a zistiť všetky parametre požadované pre požiadavku (názov priečinka, názvy susedných serverov), musíme tieto informácie najskôr získať a po druhé prezentovať vo formáte zrozumiteľnom pre Zabbix. Formát, ktorému nástroj na vyhľadávanie rozumie, vyzerá takto:

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

...

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

Najjednoduchší spôsob, ako získať informácie, ktoré nás zaujímajú, je prostredníctvom WMI, pričom ich vytiahnete z príslušných sekcií DfsrReplicationGroupConfig. V dôsledku toho sa zrodil skript, ktorý generuje požiadavku na WMI a vydáva zoznam skupín, ich priečinkov a serverov v požadovanom formáte.

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

Súhlasím, skript možno nežiari eleganciou kódu a niektoré veci v ňom by sa určite dali zjednodušiť, ale plní svoju hlavnú funkciu – poskytovanie informácií o parametroch replikačných skupín vo formáte zrozumiteľnom pre Zabbix.

Pridanie skriptov do konfigurácie agenta Zabbix

Všetko je tu mimoriadne jednoduché. Na koniec konfiguračného súboru agenta pridajte nasledujúce riadky:

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 samozrejme upravujeme na tie, kde máme skripty. Dal som ich do rovnakého priečinka, kde je nainštalovaný agent.

Po vykonaní zmien reštartujte službu agenta Zabbix.

Zmena používateľa, pod ktorým beží služba Zabbix Agent

Aby ste mohli prijímať informácie prostredníctvom dfsrdiag, pomocný program musí byť spustený pod účtom, ktorý má administrátorské práva na odosielajúcich aj prijímajúcich členov replikačnej skupiny. Služba agenta Zabbix, ktorá je štandardne spustená pod systémovým účtom, nebude môcť vykonať takúto požiadavku. Vytvoril som samostatný účet v doméne, dal som mu administrátorské práva na potrebné servery a nakonfiguroval som službu tak, aby na týchto serveroch bežala pod ním.

Môžete ísť inou cestou: pretože dfsrdiag, v skutočnosti funguje prostredníctvom rovnakého WMI, potom ho môžete použiť popis, ako dať doménovému účtu práva na jeho používanie bez vydávania správcovských práv, ale ak máme veľa replikačných skupín, potom bude udelenie práv každej skupine zložité. Avšak v prípade, že chceme monitorovať replikáciu doménového systémového zväzku na doménových radičoch, môže to byť jediná prijateľná možnosť, pretože udelenie práv správcu domény na konto monitorovacej služby nie je dobrý nápad.

Monitorovacia šablóna

Na základe získaných údajov som vytvoril šablónu, ktorá:

  • Spustí automatické zisťovanie replikačných skupín raz za hodinu,
  • Kontroluje veľkosť nevybavených žiadostí pre každú skupinu raz za 5 minút,
  • Obsahuje spúšťač, ktorý vydá upozornenie, keď veľkosť nevybavených žiadostí pre ktorúkoľvek skupinu presiahne 100 počas 30 minút. Spúšťač je opísaný ako prototyp, ktorý sa automaticky pridáva do zistených skupín,
  • Vytvára grafy veľkosti nevybavených žiadostí pre každú skupinu replikácie.

Môžete si stiahnuť šablónu pre Zabbix 2.2 tu.

Celkový

Po naimportovaní šablóny do Zabbix a vytvorení účtu s potrebnými právami nám už len skopírovať skripty na súborové servery, ktoré chceme sledovať pre DFSR, pridať na nich dva riadky do konfigurácie agenta a reštartovať službu agenta Zabbix , nastavte ho tak, aby sa spúšťal ako požadovaný účet. Pre monitorovanie DFSR nie sú potrebné žiadne ďalšie manuálne nastavenia.

Zdroj: hab.com

Pridať komentár