Egyszerű monitorozás DFS Replication a Zabbixban

Bevezetés

Egy elég nagy és elosztott infrastruktúra esetén, amely a DFS-t használja, mint az adatok egyetlen hozzáférési pontját, és a DFSR-t az adatok replikációjára a központi adatközpont és a fiók szerverei között, felmerül a kérdés a replikáció állapotának monitorozásáról.
Úgy alakult, hogy szinte azonnal a DFSR használatának megkezdése után elkezdtük a Zabbix bevezetését azzal a céllal, hogy a meglévő különféle eszközök „zoo-ját” felváltsuk, és az infrastruktúra monitorozását informatívabbá, teljesebbé és logikusabbá tegyük. Arról lesz szó, hogy hogyan használjuk a Zabbix-ot a DFS replikáció megfigyelésére.

Először is meg kell határoznunk, hogy milyen DFS replikációs adatokat kell gyűjtenünk a működésének figyelemmel kíséréséhez. A legfontosabb mutató a backlog. Ide kerülnek azok a fájlok, amelyek nem lettek szinkronizálva a replikáló csoport többi tagjával. A méretét a következő segédprogrammal lehet megvizsgálni: dfsrdiag, amely a DFSR szereppel együtt telepíthető. Normális replikációs állapotban a backlog méretének nullához kell közelítenie. Ennek megfelelően a backlogban lévő fájlok nagy száma replikációs problémákról tanúskodik.

Most a gyakorlati oldalról.

A backlog méretének Zabbix Agent-en keresztüli monitorozásához a következőkre van szükségünk:

  • Egy szkriptre, amely elemzi a kimenetet, dfsrdiag hogy végső backlog méreteket adjon meg Zabbix számára,
  • Egy szkriptre, amely meghatározza, hány replikáló csoport van a szerveren, mely mappákat replikálják, és még mely szerverek tartoznak hozzájuk (nem szeretnénk kézzel bevinni ezeket a Zabbix-be minden egyes szerver esetében, igaz?),
  • Ezeknek a szkripteknek a UserParameter-be való beillesztése a Zabbix agent konfigurációjába a monitorozó szerver általi későbbi hívás érdekében,
  • A Zabbix ügynök szolgáltatásának elindítása olyan felhasználó nevében, akinek joga van olvasni a backlogot,
  • Egy Zabbix sablon, amely beállítja a csoportok felfedezését, a kapott adatok feldolgozását és az azokra vonatkozó riasztások kiadását.

Elemző szkript

A parser megírásához a VBScript nyelvet választottam, mivel ez a leguniverzálisabb nyelv, amely minden Windows Server verzióban megtalálható. A szkript logikája egyszerű: parancssorból megkapja a replikáló csoport nevét, a replikált mappa nevét, és a sending és receiving szerverek nevét. Ezen paraméterek ezután átkerülnek a dfsrdiag, és az attól függően, hogy mi a kimenete, megjelenik:
A fájlok száma — ha érkezett üzenet a backlogban lévő fájlok létezéséről,
0 — ha a backlog hiányzó fájlokról érkező üzenetet kapunk („Nincs backlog”),
-1 — ha hibát jelző üzenetet kapunk dfsrdiag a lekérdezés végrehajtásakor ("[HIBA]").

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, "Nincs backlog") > 0 then
	intBackLog = 0
ElseIf  InStr(strResult, "[HIBA]") > 0 Then
    intBackLog = -1
Else
	arrLines = Split(strResult, "\")
	arrResult = Split(arrLines(1), ":")
	intBackLog = arrResult(1)
End If

WScript.echo intBackLog

Felfedező szkript

Ahhoz, hogy a Zabbix automatikusan meghatározza az összes replication group-ot a szerveren, és maga kinyerje az összes szükséges paramétert (mappa neve, szomszédos kiszolgálók nevei), két dolgot kell tennünk: először is ezeket az információkat meg kell szereznünk, másodszor pedig érthető formában kell bemutatnunk a Zabbix számára. A discovery eszköz által értett formátum a következőképpen néz ki:

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

...

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

A számunkra érdekes információkat a WMI-n keresztül a legkönnyebben tudjuk megszerezni, kinyerve azokat a megfelelő DfsrReplicationGroupConfig szakaszból. Ennek eredményeként egy szkript készült, amely WMI lekérdezést generál, és a kimeneten a csoportok, azok mappái és kiszolgálói szükséges formátumban jelennek meg.

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

Bár lehet, hogy a szkript nem a legelragadóbb kód, és van benne, amit biztosan egyszerűsíteni lehet, de a fő funkcióját — hogy információkat adjon a replikációs csoportok paramétereiről a Zabbix számára érthető formátumban — sikeresen teljesíti.

A Zabbix ügynök konfigurációjába script beillesztése

Itt minden rendkívül egyszerű. A konfigurációs fájl végéhez hozzáadjuk a sorokat:

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"

Természetesen a fájlokat arra az útra módosítjuk, ahol a scriptek találhatóak. Én ugyanabba a mappába helyeztem őket, ahová az ügynök telepítve van.

A változtatások után újraindítjuk a Zabbix ügynök szolgáltatását.

A Zabbix Agent szolgáltatás által használt felhasználó módosítása

Annak érdekében, hogy információkat kapjunk a dfsrdiag, a segédprogramot rendszergazdai jogosultságokkal rendelkező fiókból kell futtatni, mind a küldő, mind a fogadó replikációs csoport tagjaiból. A Zabbix ügynökszolga, amely alapértelmezetten a rendszerfiók alatt fut, nem tudja ezt a kérést végrehajtani. Létrehoztam egy külön fiókot a doménben, adminisztrátori jogokat adtam neki a szükséges szervereken, és beállítottam a szolgáltatás ezen fiókból történő indítását a szervereken.

Van egy másik út is: mivel dfsrdiag, lényegében ugyanazon WMI-n keresztül működik, felhasználhatjuk leírást, arról, hogyan adhatjuk meg a domén fióknak a használati jogokat anélkül, hogy adminisztrátori jogokat adnánk, de ha sok replikációs csoportunk van, akkor minden csoporthoz jogokat adni nehézkes lesz. Azonban ha figyelemmel kell kísérnünk a Domain System Volume replikációját a doménvezérlőkön, ez lehet az egyetlen elfogadható megoldás, mivel a monitoring szolgáltatás fiókjának adminisztrátori jogot adni nem a legjobb ötlet.

Monitoring sablon

A kapott adatok alapján létrehoztam egy sablont, amely:

  • Minden órában automatikusan észleli a replikációs csoportokat,
  • Öt percenként ellenőrzi a backlog méretét minden csoport számára,
  • Tartalmaz egy riasztást, amely figyelmeztet, ha egy csoport backlog mérete 100 fölé emelkedik 30 percen keresztül. A riasztást prototípusként definiáltuk, amely automatikusan hozzáadódik a felfedezett csoportokhoz,
  • Grafikonokat készít a backlog méretéről minden replikációs csoport számára.

A Zabbix 2.2-höz letölthető sablon itt.

Result

A sablon Zabbix-be való importálása és a szükséges jogokkal rendelkező fiók létrehozása után elegendő csak a szkripteket átmásolni a fájl szerverekre, amelyeket a DFSR szempontjából szeretnénk monitorozni, két sort hozzáadni az ügynök konfigurációhoz, és újraindítani a Zabbix ügynökét, beállítva annak futását a szükséges fióktól. Nincs szükség más kézi beállításokra a DFSR monitorozásához.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster