DFS-i replikatsiooni lihtne jälgimine Zabbixis

Sissejuhatus

Üsna suure ja hajutatud infrastruktuuri puhul, mis kasutab DFS-i andmetele ühtse juurdepääsupunktina ja DFSR-i andmete replikatsiooniks andmekeskuste ja haruserverite vahel, tekib küsimus selle replikatsiooni oleku jälgimise kohta.
Juhuslikult alustasime peaaegu kohe pärast DFSR-i kasutamise alustamist Zabbixi juurutamist eesmärgiga asendada olemasolev loomaaed erinevate tööriistadega ning viia infrastruktuuri monitooring informatiivsemale, terviklikumale ja loogilisemale kujule. Räägime Zabbixi kasutamisest DFS-i replikatsiooni jälgimiseks.

Kõigepealt peame otsustama, milliseid andmeid DFS-i replikatsiooni kohta tuleb hankida selle oleku jälgimiseks. Kõige olulisem näitaja on mahajäämus. See sisaldab faile, mida pole replikatsioonirühma teiste liikmetega sünkroonitud. Selle suurust saate vaadata utiliidi abil dfsrdiag, installitud DFSR-i rolliga. Tavalises replikatsiooniolekus peaks mahajäämuse suurus lähenema nullile. Sellest tulenevalt viitab mahajäämuses olevate failide suur arv probleeme replikatsiooniga.

Nüüd asja praktilisest küljest.

Zabbix Agendi kaudu mahajäämuse suuruse jälgimiseks vajame:

  • Skript, mis sõelub väljundit dfsrdiag anda Zabbixile lõplikud mahajäämuse suuruse väärtused,
  • Skript, mis määrab, kui palju replikatsioonirühmi serveris on, milliseid kaustu nad replitseerivad ja millised muud serverid nendesse on kaasatud (me ei taha seda kõike Zabbixisse iga serveri jaoks käsitsi sisestada, eks?),
  • Lisades need skriptid kasutajaparameetrina Zabbixi agendi konfiguratsiooni, et seireserverist hiljem helistada,
  • Zabbixi agenditeenuse käivitamine kasutajana, kellel on õigus lugeda mahajäämust,
  • Zabbixi mall, milles konfigureeritakse rühmade tuvastamine, vastuvõetud andmete töötlemine ja nende kohta hoiatusteadete väljastamine.

Skripti parser

Parseri kirjutamiseks valisin VBS-i kui kõige universaalsema keele, mis on kõigis Windows Serveri versioonides olemas. Skripti loogika on lihtne: see saab käsurea kaudu replikatsioonirühma nime, paljundatud kausta ning saatvate ja vastuvõtvate serverite nimed. Seejärel edastatakse need parameetrid dfsrdiagja sõltuvalt väljundist toodab see:
Failide arv - kui saabub teade failide olemasolu kohta mahajäämuses,
0 - kui saabub teade failide puudumise kohta mahajäämuses ("Tagasijäämist pole"),
-1 - kui saabub veateade dfsrdiag päringu täitmisel ("[VIGA]").

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

Avastamise skript

Selleks, et Zabbix saaks kindlaks teha kõik serveris olevad replikatsioonirühmad ja teada saada kõik päringu jaoks vajalikud parameetrid (kausta nimi, naaberserverite nimed), peame esiteks selle teabe hankima ja teiseks esitama Zabbixile arusaadavas vormingus. Vorming, mida avastamistööriist mõistab, näeb välja järgmine:

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

Lihtsaim viis meid huvitava teabe hankimiseks on WMI kaudu, tõmmates selle välja DfsrReplicationGroupConfigi vastavatest jaotistest. Selle tulemusena sündis skript, mis genereerib päringu WMI-le ja väljastab rühmade, nende kaustade ja serverite loendi vajalikus vormingus.

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

Olen nõus, skript ei pruugi koodi elegantsusega hiilgama ja mõnda asja selles võiks kindlasti lihtsustada, kuid see täidab oma põhifunktsiooni – annab infot replikatsioonirühmade parameetrite kohta Zabbixile arusaadavas vormingus.

Skriptide lisamine Zabbixi agendi konfiguratsiooni

Siin on kõik äärmiselt lihtne. Lisage agendi konfiguratsioonifaili lõppu 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"

Loomulikult kohandame teid nende järgi, kus meil on skriptid. Panin need samasse kausta, kuhu agent on installitud.

Pärast muudatuste tegemist taaskäivitage Zabbixi agenditeenus.

Kasutaja muutmine, kelle all Zabbix Agent teenus töötab

Info saamiseks läbi dfsrdiag, tuleb utiliiti käitada konto all, millel on administraatoriõigused nii replikatsioonirühma saatvatele kui ka vastuvõtvatele liikmetele. Zabbixi agenditeenus, mis töötab vaikimisi süsteemikonto all, ei saa sellist päringut täita. Tegin domeenis eraldi konto, andsin talle administraatoriõigused vajalikes serverites ja seadistasin teenuse nendes serverites selle all töötama.

Võite minna muul viisil: kuna dfsrdiag, tegelikult töötab sama WMI kaudu, siis saate seda kasutada kirjeldus, kuidas anda domeenikontole selle kasutamise õigusi ilma administraatoriõigusi väljastamata, kuid kui meil on palju replikatsioonirühmi, on igale rühmale õiguste väljastamine keeruline. Kui aga soovime jälgida domeenisüsteemi mahu replikatsiooni domeenikontrolleritel, võib see olla ainus vastuvõetav valik, kuna domeeni administraatori õiguste andmine jälgimisteenuse kontole ei ole hea mõte.

Järelevalve mall

Saadud andmete põhjal lõin malli, mis:

  • Käivitab kord tunnis automaatse replikatsioonirühmade tuvastamise,
  • Kontrollib iga grupi mahajäämuse suurust iga 5 minuti järel,
  • Sisaldab päästikut, mis väljastab hoiatuse, kui mis tahes rühma mahajäämus on 100 minuti jooksul suurem kui 30. Päästikut kirjeldatakse prototüübina, mis lisatakse automaatselt tuvastatud rühmadesse,
  • Koostab iga replikatsioonirühma jaoks mahajäämuse suuruse graafikud.

Saate alla laadida malli Zabbix 2.2 jaoks siin.

Summaarne

Pärast malli importimist Zabbixisse ja vajalike õigustega konto loomist peame kopeerima ainult skriptid failiserveritesse, mida tahame DFSR-i jaoks jälgida, lisama neile kaks rida agendi konfiguratsiooni ja taaskäivitama Zabbixi agenditeenuse , määrates selle soovitud kontona käitamiseks. DFSR-i jälgimiseks pole muid käsitsi seadistusi vaja.

Allikas: www.habr.com

Lisa kommentaar