Paprastas DFS replikacijos stebėjimas „Zabbix“.

į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 apibūdinimas, kaip suteikti domeno paskyrai teises ja naudotis neišduodant administravimo teisių, tačiau jei turime daug replikacijos grupių, tai bus sunku išduoti teises kiekvienai grupei. Tačiau, jei norime stebėti domeno sistemos apimties replikaciją domeno valdikliuose, tai gali būti vienintelė priimtina parinktis, nes domeno administratoriaus teisių suteikimas stebėjimo paslaugos paskyrai nėra gera idėja.

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ą čia.

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

Добавить комментарий