Sissejuhatus
Kui infrastruktuur on piisavalt suur ja hajutatud, kasutades DFS-i kui ainsat andmete juurdepääsu punkti ning DFSR-i andmete replikatsiooniks andmekeskuste ja harude serverite vahel, tekib küsimus selle replikatsiooni seisundi jälgimisest.
Nii juhtus, et peaaegu kohe pärast DFSR-i kasutuselevõttu alustasime Zabbixi rakendamist, et asendada olemasolev erinevate tööriistade züür ja tuua infrastruktuuri jälgimine informatiivsemale, täielikumale ja loogilisemale tasandile. Just Zabbixi kasutamisest DFS-i replikatsiooni jälgimiseks räägime.
Esimese asjana peame selgitama välja, milliseid DFS-i replikatsiooni andmeid on vaja jälgida, et kontrollida selle seisundit. Kõige olulisem näitaja on backlog. See sisaldab faile, mis pole teiste replikatsioonigruppide liikmete vahel sünkroniseeritud. Backlog'i suurust saab vaadata utiliidiga dfsrdiag, mis installitakse koos DFSR-i rolliga. Normaalsetes tingimustes peaks replikatsiooni backlog olema lähenemas nullile. Seega, suur backlog'i failide arv viitab replikatsiooniprobleemidele.
Nüüd praktilise poole peale.
Backlog'i suuruse jälgimiseks Zabbix Agenti kaudu vajame järgmist:
- Skripti, mis analüüsib väljundit dfsrdiag tagamaks Zabbixile backlog'i suuruse lõppväärtused,
- Skripti, mis määrab, kui palju replikeerimisgrupe on serveris, milliseid kaustu nad replikeerivad ja millised teised serverid on nendes (me ei soovi ju seda kõike käsitsi Zabbixisse sisestada iga serveri jaoks, kas pole?),
- Nende skriptide lisamine UserParameter'ina Zabbixi agendi konfiguratsiooni, et neid saaks hiljem monitooringuserverilt kutsuda,
- Zabbixi agendi teenuse käivitamine kasutajalt, kellel on õigused backlog'i lugeda,
- Zabbix'i mall, kus on seadistatud rühmade tuvastamine, saadud andmete töötlemine ja nende põhjal häirete väljastamine.
Parserskript
Parsi kirjutamiseks valisin VBS-i kui kõige universaalsema keele, mis on olemas kõigis Windows Serveri versioonides. Skripti tööloogika on lihtne: see võtab käsurealt replikeerimisgrupi nime, replikeeritava kausta ja saatva ning vastuvõtva serveri nimed. Edasi edastatakse need parameetrid dfsrdiag, ja olenevalt selle väljundist antakse välja:
Failide arv — kui on saadud sõnum failide olemasolu kohta backlogis,
0 — kui on saadud sõnum, et faile backlogis ei ole ("No Backlog"),
-1 — kui on saadud tõsise sõnumi tuvastamise viga dfsrdiag päringu täitmisel ("[ERROR]").
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 intBackLogTuvastamise skript
Et Zabbix saaks automaatselt tuvastada kõik replikatsiooni grupid, mis serveris on, ja selgitada välja kõik päringuks vajalikud parameetrid (kausta nimi, naaberserverite nimed), peab meil kõigepealt see info hankima ja seejärel esitama Zabbixile arusaadavas formaadis. Tuvastusvahendi mõistetav formaat näeb välja järgmine:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]Kuna meid huvitavat teavet on kõige lihtsam saada WMI kaudu, tõmmates selle vastavatest DfsrReplicationGroupConfig jaotistest. Tulemuseks on skript, mis genereerib WMI päringu ja tagastab vajaliku vorminguga loendi rühmadest, nende kaustadest ja serveritest.
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
Ma nõustun, et skript ei pruugi olla kõige elegantsema koodiga ning selles on kindlasti midagi, mida saaks lihtsustada, kuid oma põhifunktsiooni — edastada replikatsiooni gruppide parameetrite teavet Zabbixile arusaadavas vormingus — täidab ta edukalt.
Skriptide lisamine Zabbixi agendi konfiguratsiooni
Siin on kõik äärmiselt lihtne. Lisasime konfiguratsioonifaili lõpuks järgmised read:
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"
Muidugi, muuda teid sinna, kus meie skriptid asuvad. Mina panin need samasse kausta, kuhu agent on installitud.
Muutke Zabbixi agendi teenuse kasutajat, kelle alt see töötab
Kuna soovite saada teavet
Ette saada teavet läbi dfsrdiag, utiliiti tuleb käivitada kontolt, millel on administraatori õigused nii sendingi kui ka receiving rühma replikatsiooniliikmete osas. Zabbixi agent teenus, mis käivitatakse vaikimisi süsteemi kontolt, ei saa seda taotlust täita. Loodud on eraldi konto domeenis, millele on antud administraatori õigused vajalikul serveritel ja seadistatud teenuse käivitamine nende serverite alt.
On võimalik minna ka muud teed: kuna dfsrdiag, töötab põhimõtteliselt sama WMI kaudu, saab kasutada , kuidas anda domeeni kasutajakontole õigused selle kasutamiseks ilma administraatori õiguste andmiseta, kuid kui meil on palju replikatsioonigruppe, siis iga grupi õiguste andmine osutub keeruliseks. Siiski, kui tahame monitoorida domeeni süsteemi mahtu replikatsiooni domeeni kontrollerites, võib see osutuda ainsaks vastuvõetavaks valikuks, kuna domeeni administraatori õiguste andmine monitoorimisteenuse kontole pole parim idee.
Monitooringumäng
Saadud andmetel põhinedes olen loonud mall, mis:
- Iga tunni tagant käivitab automaatse replikatsioonigruppide tuvastamise.
- Kontrollib backlog'i suurust iga viie minuti järel igas grupis.
- Sisaldab päästikut, mis annab hoiatuse, kui mõne grupi backlog on üle 100 30 minuti jooksul. Päästik on kirjeldatud prototüübina, mis lisatakse automaatselt tuvastatud gruppidele.
- Ehitatakse backlog'i suuruse graafikud iga replikatsiooni grupi jaoks.
Zabbix 2.2 jaoks saab alla laadida mall. .
Kokkuvõte
Pärast mallide importimist Zabbixisse ja vajalike õigustega konto loomist piisab vaid skriptide kopeerimisest failiserveritesse, mida soovime jälgida DFSR osas, lisades nendesse kaks rida agendi konfiguratsiooni ja taaskäivitades Zabbixi agendi teenuse, seadistades selle jooksma soovitud konto nimel. DFSR jälgimiseks ei ole muid käsitsi seadeid vajalik.
Allikas: habr.com
