Lihtne DFS Replikatsiooni jälgimine Zabbixis

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 intBackLog

Avastusskript

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 kirjeldust, 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 siin.

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

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster