Az elosztott fájlrendszer replikációjának egyszerű figyelése a Zabbixben

Bevezetés

Egy meglehetősen nagy és elosztott infrastruktúra esetében, amely az elosztott fájlrendszert használja egyetlen hozzáférési pontként az adatokhoz, és a DFSR-t használja az adatreplikációhoz az adatközpontok és a fiókkiszolgálók között, felmerül a kérdés, hogy ellenőrizni kell-e a replikáció állapotát.
Véletlenül a DFSR használatának megkezdése után szinte azonnal megkezdtük a Zabbix bevezetését azzal a céllal, hogy a meglévő állatkertet különféle eszközökkel lecseréljük, és az infrastruktúra-felügyeletet informatívabb, teljesebb és logikusabb formába hozzuk. Szó lesz a Zabbix használatáról az elosztott fájlrendszer-replikáció figyelésére.

Mindenekelőtt el kell döntenünk, hogy az elosztott fájlrendszer-replikációról milyen adatokat kell beszerezni az állapotának figyeléséhez. A legrelevánsabb mutató a lemaradás. Olyan fájlokat tartalmaz, amelyek nincsenek szinkronizálva a replikációs csoport többi tagjával. A méretét a segédprogram segítségével tekintheti meg dfsrdiag, DFSR szerepkörrel telepítve. Normál replikációs állapotban a hátralék méretének megközelítenie kell a nullát. Ennek megfelelően a hátralékban lévő fájlok nagy száma a replikációval kapcsolatos problémákat jelez.

Most pedig a kérdés gyakorlati oldaláról.

A hátralék nagyságának a Zabbix Agenten keresztül történő nyomon követéséhez szükségünk lesz:

  • Szkript, amely elemzi a kimenetet dfsrdiag a lemaradás végső méretének megadása a Zabbix számára,
  • Egy szkript, amely meghatározza, hogy hány replikációs csoport van a szerveren, milyen mappákat replikálnak, és milyen más szerverek szerepelnek bennük (nem akarjuk mindezt kézzel beírni a Zabbixba minden szerverhez, ugye?),
  • Ezeket a szkripteket UserParameterként hozzáadva a Zabbix ügynök konfigurációjához a megfigyelő szerverről történő későbbi hívásokhoz,
  • A Zabbix ügynök szolgáltatás elindítása olyan felhasználóként, aki jogosult a hátralék olvasására,
  • A Zabbix sablonja, amelyben a csoportok észlelése, a kapott adatok feldolgozása és az azokra vonatkozó riasztások konfigurálása történik meg.

Szkriptelemző

Az elemző megírásához a VBS-t választottam, mint a leguniverzálisabb nyelvet, amely a Windows Server összes verziójában megtalálható. A szkript logikája egyszerű: a parancssoron keresztül megkapja a replikációs csoport nevét, a replikált mappát, valamint a küldő és fogadó szerverek nevét. Ezek a paraméterek ezután átadásra kerülnek dfsrdiag, és a kimenetétől függően a következőket állítja elő:
Fájlok száma - ha üzenet érkezik a fájlok lemaradásban való jelenlétéről,
0 – ha üzenet érkezik a lemaradásban lévő fájlok hiányáról („Nincs hátralék”),
-1 - ha hibaüzenet érkezik dfsrdiag kéré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, "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

Felfedezési forgatókönyv

Ahhoz, hogy a Zabbix meg tudja határozni a szerveren található összes replikációs csoportot, és megtudja a kéréshez szükséges összes paramétert (mappanév, szomszédos szerverek nevei), először is meg kell szereznünk ezeket az információkat, másodsorban pedig be kell mutatnunk. Zabbix számára érthető formátumban. A felderítő eszköz által értelmezett 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 minket érdeklő információkhoz a legegyszerűbben a WMI-n keresztül juthatunk hozzá, a DfsrReplicationGroupConfig megfelelő szakaszaiból kihúzva. Ennek eredményeként megszületett egy szkript, amely egy kérést generál a WMI felé, és a kívánt formátumban kiadja a csoportok, azok mappáinak és szervereinek listáját.

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

Egyetértek, lehet, hogy a szkript nem tündököl a kód eleganciájával, és bizonyos dolgokat biztosan le lehetne egyszerűsíteni benne, de a fő funkcióját teljesíti - a replikációs csoportok paramétereiről ad tájékoztatást a Zabbix számára érthető formátumban.

Szkriptek hozzáadása a Zabbix ügynök konfigurációjához

Itt minden rendkívül egyszerű. Adja hozzá a következő sorokat az ügynök konfigurációs fájljának végéhez:

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 az elérési utakat azokhoz igazítjuk, ahol szkriptjeink vannak. Ugyanabba a mappába tettem őket, ahol az ügynök telepítve van.

A módosítások elvégzése után indítsa újra a Zabbix ügynökszolgáltatást.

A felhasználó módosítása, aki alatt a Zabbix Agent szolgáltatás fut

Annak érdekében, hogy információt kapjon keresztül dfsrdiag, a segédprogramot olyan fiók alatt kell futtatni, amely rendszergazdai jogokkal rendelkezik a replikációs csoport küldő és fogadó tagjaihoz egyaránt. A rendszerfiók alatt alapértelmezés szerint futó Zabbix ügynökszolgáltatás nem tud ilyen kérést végrehajtani. Létrehoztam egy külön fiókot a tartományban, adminisztrátori jogokat adtam neki a szükséges szervereken, és beállítottam a szolgáltatást, hogy ezeken a szervereken ez alatt fusson.

Lehet másképp is: mert dfsrdiag, valójában ugyanazon a WMI-n keresztül működik, akkor használhatod leírás, hogyan adhatunk egy tartományi fióknak a használati jogokat rendszergazdai jogok kiadása nélkül, de ha sok replikációs csoportunk van, akkor az egyes csoportokhoz való jogok kiadása nehéz lesz. Abban az esetben azonban, ha a tartományi rendszerkötet-replikációt tartományvezérlőkön szeretnénk figyelni, ez lehet az egyetlen elfogadható lehetőség, mivel nem jó ötlet tartományadminisztrátori jogosultságokat adni a megfigyelési szolgáltatás fiókjához.

Monitoring sablon

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

  • A replikációs csoportok automatikus felderítését óránként egyszer futtatja,
  • Minden csoportnál 5 percenként ellenőrzi a lemaradás méretét,
  • Tartalmaz egy triggert, amely riasztást ad ki, ha bármely csoport lemaradási mérete meghaladja a 100-at 30 percig. A trigger prototípusként van leírva, amely automatikusan hozzáadódik az észlelt csoportokhoz,
  • Az egyes replikációs csoportokhoz hátralékméret-grafikonokat készít.

Letöltheti a Zabbix 2.2 sablont itt.

Teljes

Miután importáltuk a sablont a Zabbixba, és létrehoztunk egy fiókot a szükséges jogosultságokkal, már csak át kell másolnunk a szkripteket a DFSR-hez figyelni kívánt fájlszerverekre, két sort kell hozzáadnunk az ügynökkonfigurációhoz, és újra kell indítanunk a Zabbix ügynök szolgáltatást. , állítsa be, hogy a kívánt fiókként fusson. A DFSR felügyeletéhez nincs szükség más kézi beállításra.

Forrás: will.com

Hozzászólás