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 intBackLogFelfedező 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 , 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 .
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
