Sissejuhatus
Kui infrastruktuur on piisavalt suur ja hajutatud, kasutades DFS-i kui ainus andmete pääsupunkt ja DFSR-i andmete replikatsiooniks andmekeskuse ja filiaaliserverite vahel, kerkib esile küsimus selle replikatsiooni oleku jälgimisest.
Nii juhtus, et peaaegu kohe pärast DFSR-iga alustamist alustasime Zabbixi rakendamist, et asendada olemasolev erinevate tööriistade zootsirkus ja tuua infrastruktuuri jälgimine informatiivsemaks, täielikumaks ja loogilisemaks. Räägime Zabbixi kasutamisest DFS-replikatsiooni jälgimiseks.
Esimese asjana peame selgitama, milliseid DFS-replikatsiooni andmeid on vaja saada selle oleku jälgimiseks. Kõige olulisem näitaja on backlog. Sellesse kuuluvad failid, mis ei ole sünkroniseeritud teiste replikatsiooni grupi liikmete kanssa. Selle suurust saab vaadata utiliidiga dfsrdiag, mis paigaldatakse koos DFSR-i rolliga. Terve replikatsiooni oleku korral peaks backlog'i suurus püüdlema nulli poole. Seega märkimisväärsed backlog'i failide arvud viitavad replikatsiooniprobleemidele.
Räägime nüüd küsimuse praktilisest küljest.
Selleks, et jälgida backlog'i suurust Zabbixi kaudu, vajame:
- Skripti, mis töötleb väljundit dfsrdiag tagamaks Zabbixile backlog'i suuruse lõppväärtuste provideerimise,
- Skripti, mis määrab, kui palju replikatsioonigrupe on serveris, milliseid kaustu nad replitseerivad ja millised veel serverid neisse kuuluvad (me ju ei taha need andmed Zabbixisse käsitsi iga serveri jaoks sisestada, eks?);
- Nende skriptide lisamine Zabbixi agendi konfiguratsiooni UserParameterina edasiseks kutsumiseks jälgimisse serverist,
- Zabbixi agendi teenuse käivitamine kasutajana, kellel on õigused backlog'i lugemiseks,
- Zabbixi mall, milles on seadistatud grupi avastamine, saadud andmete töötlemine ja nende põhjal häirete väljastamine.
Skripti-parsija
Parsija kirjutamiseks valisin VBS-i, kuna see on kõige universaalsem keel, mis on olemas kõigis Windows Serveri versioonides. Skripti loogika on lihtne: see võtab käsurealt replikatsioonigrupi nime, replitseeritud kausta nime ning saatmise ja vastuvõtmise serverite nimed. Seejärel edastatakse need parameetrid dfsrdiag, ja lõpptulemusena antakse välja:
Failide arv — kui saadi teade backlog'is failide olemasolust,
0 — kui saadakse sõnum, et backlog on tühi («No Backlog»),
-1 — kui saadakse veateade 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 intBackLogAvastusskript
Et Zabbix suudaks ise tuvastada kõik replikatsiooni gruppide, mis on serveris olemas, ja selgitada välja kõik küll vajalikud päringu parameetrid (kaustade nimed, naaberserverite nimed), peame need andmed kõigepealt hankima ja seejärel esitama Zabbixi jaoks arusaadavas formaadis. Tuvastustööriista mõistetav formaat on järgmine:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}Küll vajalikku teavet on kõige lihtsam saada WMI kaudu, välja tõmmates selle vastavatest DfsrReplicationGroupConfig osadest. Lõpptulemusena sündis skript, mis loob päringu WMI-le ja väljastab loendi rühmadest, nende kaustadest ja serveritest vajalikus formaadis.
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
Nõustun, skript ei pruugi olla koodilt kõige elegantsem ja seal on kindlasti kohti, mida saaks lihtsustada, kuid peamine funktsioon — edastada teavet replikatsioonigruppide parameetrite kohta Zabbixile arusaadavas formaadis — töötab see edukalt.
Skriptide lisamine Zabbixi agendi konfiguratsiooni
Siin on kõik väga lihtne. Lisame agendi konfiguratsiooni faili lõppu 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"
Loomulikult muudame tee nendele, kuhu meie skriptid on salvestatud. Mina panin need samasse kausta, kuhu agent on installitud.
Pärast muudatuste tegemist taaskäivitame Zabbixi agendi teenuse.
Zabbixi agendi teenuse käitamise kasutaja muutmine
Kuna teavet saamiseks tuleb dfsrdiag, utiliit tuleb käivitada haldusõigustega konto all, nii saatmise kui ka vastuvõtmise replikatsiooni grupis. Vaikimisi käivitatud Zabbixi agent ei saa sellist päringut täita süsteemi kontole. Loodud eraldi konto domeenis, andsin sellele haldusõigused vajalikutele serveritele ja seadistasin nendel serveritel teenuse käivitamise selle alt.
On võimalik minna ka teist teed: kuna dfsrdiag, põhimõtteliselt töötab see sama WMI kaudu, siis saab kasutada , kuidas anda domeeni kasutajakontole õigused selle kasutamiseks ilma haldusõiguste andmiseta, kuid kui meil on palju replikatsiooni gruppe, siis on iga grupi õiguste andmine keeruline. Kuid juhul, kui me soovime jälgida Domain System Volume'i replikatsiooni domeeni juhtimisseadmetes, võib see osutuda ainukeseks sobivaks valikuks, kuna domeeni administraatori õiguste andmine jälgimist teenusele ei ole kõige parem idee.
Monitooringu mall
Saadud andmete põhjal lõin malli, mis:
- Käivitab automaatse replikatsiooni gruppide avastamise iga tunni tagant,
- Kontrollib iga grupi backlog'i suurust iga 5 minuti järel,
- Sisaldab käivitajat, mis annab teate, kui mõne grupi backlog'i suurus ületab 100 30 minuti jooksul. Käivitaja on kirjeldatud prototüübi kujul, mis lisatakse automaatselt avastatud gruppidele,
- Konstruktsioon graafikud backlog'i suurusest iga replikatsiooni grupi jaoks.
Zabbix 2.2 malli allalaadimine on võimalik .
Kokkuvõte
Pärast malli importimist Zabbixisse ja vajalike õigustega konto loomist piisab, kui kopeerida skriptid failiserveritesse, mida soovime jälgida DFSR osas, lisada neisse agentide konfiguratsioonis kaks rida ning taaskäivitada Zabbixi agendi teenus, seades selle käivitamise vajaliku konto alt. Mingeid muid käsitsi seadistusi DFSR jälgimiseks ei ole vaja.
Allikas: habr.com
