įvedimas
Turint gana didelę ir paskirstytą infrastruktūrą, kuri naudoja DFS kaip vieną prieigos prie duomenų tašką ir DFSR duomenų replikavimui tarp duomenų centrų ir filialų serverių, kyla klausimas, kaip stebėti šios replikacijos būseną.
Atsitiktinai, beveik iš karto po to, kai pradėjome naudoti DFSR, pradėjome diegti Zabbix, siekdami pakeisti esamą įvairių įrankių zoologijos sodą ir suteikti infrastruktūros stebėjimą į informatyvesnį, išsamesnį ir logiškesnį. Kalbėsime apie Zabbix naudojimą DFS replikacijai stebėti.
Visų pirma, turime nuspręsti, kokius duomenis apie DFS replikaciją reikia gauti, kad galėtume stebėti jo būseną. Svarbiausias rodiklis yra atsilikimas. Jame yra failų, kurie nebuvo sinchronizuoti su kitais replikacijos grupės nariais. Galite peržiūrėti jo dydį naudodami įrankį dfsrdiag, įdiegtas su DFSR vaidmeniu. Įprastoje replikacijos būsenoje atsilikimo dydis turėtų artėti prie nulio. Atitinkamai, didelis atsilikimo failų skaičius rodo replikacijos problemas.
Dabar apie praktinę klausimo pusę.
Kad galėtume stebėti atsilikimo dydį per „Zabbix Agent“, mums reikės:
- Scenarijus, kuris analizuos išvestį dfsrdiag pateikti galutines atsilikimo dydžio vertes Zabbix,
- Scenarijus, kuris nustatys, kiek replikacijos grupių yra serveryje, kokius aplankus jie replikuoja ir kokie kiti serveriai juose yra (mes nenorime viso to įvesti „Zabbix“ ranka kiekvienam serveriui, tiesa?),
- Pridedant šiuos scenarijus kaip „UserParameter“ į „Zabbix“ agento konfigūraciją, kad vėliau būtų galima iškviesti iš stebėjimo serverio,
- Pradedant Zabbix agento paslaugą kaip vartotojui, turinčiam teisę skaityti atsilikimą,
- „Zabbix“ šablonas, kuriame bus sukonfigūruotas grupių aptikimas, gautų duomenų apdorojimas ir įspėjimų apie jas išdavimas.
Scenarijaus analizatorius
Norėdami parašyti analizatorių, pasirinkau VBS kaip universaliausią kalbą, esančią visose „Windows Server“ versijose. Scenarijaus logika paprasta: per komandinę eilutę jis gauna replikacijos grupės pavadinimą, replikuojamą aplanką ir siunčiančių bei priimančių serverių pavadinimus. Tada šie parametrai perduodami dfsrdiag, ir priklausomai nuo produkcijos jis gamina:
Failų skaičius – jei gaunamas pranešimas apie failų buvimą atsilikimo žurnale,
0 – jei gaunamas pranešimas apie failų nebuvimą atsilikimo žurnale („Nėra atsilikimų“),
-1 - jei gaunamas klaidos pranešimas dfsrdiag vykdant užklausą ("[KLAIDA]").
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
Atradimo scenarijus
Kad Zabbix nustatytų visas serveryje esančias replikacijų grupes ir išsiaiškintų visus užklausai reikalingus parametrus (aplanko pavadinimą, gretimų serverių pavadinimus), pirmiausia turime gauti šią informaciją ir, antra, pateikti. Zabbix suprantamu formatu. Formatas, kurį supranta atradimo įrankis, atrodo taip:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
Lengviausias būdas gauti mus dominančią informaciją yra WMI, ištraukiant ją iš atitinkamų DfsrReplicationGroupConfig skilčių. Dėl to gimė scenarijus, kuris generuoja užklausą WMI ir išveda grupių, jų aplankų ir serverių sąrašą reikiamu formatu.
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
Sutinku, scenarijus gal ir neblizga kodo elegancija ir kai kuriuos dalykus jame tikrai būtų galima supaprastinti, tačiau jis atlieka pagrindinę savo funkciją – pateikia informaciją apie replikacijos grupių parametrus Zabbix suprantamu formatu.
Scenarijų įtraukimas į „Zabbix“ agento konfigūraciją
Viskas čia labai paprasta. Prie agento konfigūracijos failo pabaigos pridėkite šias eilutes:
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"
Žinoma, takus prideriname prie tų, kur turime scenarijus. Įdėjau juos į tą patį aplanką, kuriame įdiegtas agentas.
Atlikę pakeitimus iš naujo paleiskite „Zabbix“ agento paslaugą.
Vartotojo, kuriam veikia „Zabbix Agent“ paslauga, keitimas
Norint gauti informaciją per dfsrdiag, įrankis turi būti paleistas naudojant paskyrą, kuri turi administravimo teises tiek siunčiantiems, tiek priimantiems replikacijos grupės nariams. „Zabbix“ agento paslauga, pagal numatytuosius nustatymus veikianti sistemos paskyroje, negalės įvykdyti tokios užklausos. Sukūriau atskirą paskyrą domene, suteikiau administravimo teises reikiamuose serveriuose ir sukonfigūravau paslaugą, kad ji veiktų šiuose serveriuose.
Galite eiti kitu keliu: nes dfsrdiag, iš tikrųjų veikia per tą patį WMI, tada galite naudoti
Stebėjimo šablonas
Remdamasis gautais duomenimis, sukūriau šabloną, kuris:
- Kartą per valandą atlieka automatinį replikacijos grupių aptikimą,
- Tikrina kiekvienos grupės atsilikimo dydį kartą per 5 minutes,
- Yra aktyviklis, kuris išduoda įspėjimą, kai bet kurios grupės atsilikimo dydis yra didesnis nei 100 30 minučių. Trigeris apibūdinamas kaip prototipas, kuris automatiškai pridedamas prie aptiktų grupių,
- Sukuria kiekvienos replikacijos grupės atsilikimo dydžio diagramas.
Galite atsisiųsti „Zabbix 2.2“ šabloną
Visas
Importavus šabloną į „Zabbix“ ir sukūrus paskyrą su reikiamomis teisėmis, mums tereikės nukopijuoti scenarijus į failų serverius, kuriuos norime stebėti DFSR, pridėti dvi eilutes prie agento konfigūracijos ir iš naujo paleisti „Zabbix“ agento paslaugą. , nustatydami, kad jis veiktų kaip norima paskyra. DFSR stebėjimui nereikia jokių kitų rankinių nustatymų.
Šaltinis: www.habr.com