Simpla monitorado de DFS-Reproduktado en Zabbix

Enkonduko

Kun sufiĉe granda kaj distribuita infrastrukturo, kiu uzas DFS kiel ununuran punkton de aliro al datumoj kaj DFSR por reproduktado de datumoj inter datumcentroj kaj branĉoserviloj, la demando ŝprucas pri monitorado de la statuso de ĉi tiu reproduktado.
Hazarde, preskaŭ tuj post kiam ni komencis uzi DFSR, ni komencis efektivigi Zabbix kun la celo anstataŭigi la ekzistantan zoon de diversaj iloj kaj alporti infrastrukturan monitoradon al pli informa, kompleta kaj logika formo. Ni parolos pri uzado de Zabbix por monitori DFS-reproduktadon.

Antaŭ ĉio, ni devas decidi, kiajn datumojn pri DFS-reproduktado necesas akiri por kontroli ĝian staton. La plej grava indikilo estas restaro. Ĝi enhavas dosierojn kiuj ne estis sinkronigitaj kun aliaj membroj de la reproduktadgrupo. Vi povas vidi ĝian grandecon uzante la ilon dfsrdiag, instalita kun la DFSR-rolo. En normala reproduktadŝtato, la restaro grandeco devus alproksimiĝi al nulo. Sekve, grandaj nombroj da dosieroj en la restaro indikas problemojn kun reproduktado.

Nun pri la praktika flanko de la afero.

Por kontroli la grandecon de la restaro per Zabbix Agent, ni bezonos:

  • Skripto kiu analizos la eligon dfsrdiag provizi finajn restargajn grandvalorojn al Zabbix,
  • Skripto, kiu determinos kiom da reproduktaj grupoj estas sur la servilo, kiajn dosierujojn ili reproduktas kaj kiaj aliaj serviloj estas inkluzivitaj en ili (ni ne volas enigi ĉion ĉi en Zabbix permane por ĉiu servilo, ĉu ne?),
  • Aldonante ĉi tiujn skriptojn kiel UserParameter al la Zabbix-agenta agordo por posta vokado de la monitora servilo,
  • Lanĉante la Zabbix-agentservon kiel uzanto kiu havas rajtojn legi la restaron,
  • Ŝablono por Zabbix, en kiu la detekto de grupoj, prilaborado de ricevitaj datumoj kaj eldonado de atentigoj pri ili estos agordita.

Skripto analizilo

Por skribi la analizilon, mi elektis VBS kiel la plej universalan lingvon ĉeestanta en ĉiuj versioj de Windows Server. La logiko de la skripto estas simpla: ĝi ricevas la nomon de la reprodukta grupo, la reproduktitan dosierujon kaj la nomojn de la sendantaj kaj ricevantaj serviloj per la komandlinio. Tiuj parametroj tiam estas pasitaj al dfsrdiag, kaj depende de ĝia produktaĵo ĝi produktas:
Nombro da dosieroj - se oni ricevas mesaĝon pri la ĉeesto de dosieroj en la restaro,
0 — se oni ricevas mesaĝon pri la foresto de dosieroj en la restaraĵo ("Neniu restarigo"),
-1 - se erarmesaĝo estas ricevita dfsrdiag dum plenumado de peto ("[ERARO]").

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

Malkovra skripto

Por ke Zabbix determini ĉiujn replikajn grupojn ĉeestantajn sur la servilo kaj eksciu ĉiujn parametrojn necesajn por la peto (dosierujo-nomo, nomoj de najbaraj serviloj), ni devas unue akiri ĉi tiun informon, kaj due prezenti ĝin. en formato komprenebla por Zabbix. La formato, kiun la malkovra ilo komprenas, aspektas jene:

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

...

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

La plej facila maniero akiri la informojn pri kiuj ni interesiĝas estas per WMI, eltiri ĝin el la respondaj sekcioj de DfsrReplicationGroupConfig. Kiel rezulto, skripto naskiĝis, kiu generas peton al WMI kaj eligas liston de grupoj, iliaj dosierujoj kaj serviloj en la bezonata formato.

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

Mi konsentas, la skripto eble ne brilas per eleganteco de kodo kaj iuj aferoj en ĝi certe povus esti simpligitaj, sed ĝi plenumas sian ĉefan funkcion - liverante informojn pri la parametroj de reproduktaj grupoj en formato komprenebla de Zabbix.

Aldonante skriptojn al la Zabbix-agenta agordo

Ĉio ĉi tie estas ege simpla. Aldonu la sekvajn liniojn al la fino de la agorda dosiero:

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"

Kompreneble, ni ĝustigas la vojojn al tiuj, kie ni havas skriptojn. Mi metis ilin en la saman dosierujon kie la agento estas instalita.

Post fari ŝanĝojn, rekomencu la Zabbix-agentservon.

Ŝanĝi la uzanton sub kiu funkcias la servo Zabbix Agent

Por ricevi informojn tra dfsrdiag, la ilo devas esti rulita sub konto kiu havas administrajn rajtojn al kaj sendado kaj ricevado de membroj de la reproduktadgrupo. La agentservo de Zabbix, funkcianta defaŭlte sub la sistema konto, ne povos plenumi tian peton. Mi kreis apartan konton en la domajno, donis al ĝi administrajn rajtojn sur la necesaj serviloj, kaj agordis la servon por funkcii sub ĝi sur ĉi tiuj serviloj.

Vi povas iri alian vojon: ĉar dfsrdiag, fakte, funkcias per la sama WMI, tiam vi povas uzi Priskribo, kiel doni al domajna konto la rajtojn uzi ĝin sen eldonado de administraj rajtoj, sed se ni havas multajn reproduktajn grupojn, tiam eldonado de rajtoj al ĉiu grupo estos malfacila. Tamen, se ni volas monitori reproduktadon de Domajna Sistemo-Vulumo sur domajnaj regiloj, ĉi tio eble estas la nura akceptebla opcio, ĉar doni domajnan administrantajn rajtojn al la monitora servokonto ne estas bona ideo.

Ŝablono de monitorado

Surbaze de la datumoj kiujn mi ricevis, mi kreis ŝablonon, kiu:

  • Rulas aŭtomatan malkovron de reproduktaj grupoj unufoje je horo,
  • Kontrolas la restaran grandecon por ĉiu grupo unufoje ĉiujn 5 minutojn,
  • Enhavas ellasilon, kiu eligas alarmon kiam la restarigita grandeco por iu grupo estas pli ol 100 dum 30 minutoj. La ellasilo estas priskribita kiel prototipo kiu estas aŭtomate aldonita al detektitaj grupoj,
  • Konstruas postrestantajn grandecografeojn por ĉiu reproduktadgrupo.

Vi povas elŝuti la ŝablonon por Zabbix 2.2 tie.

La rezulto

Post importi la ŝablonon en Zabbix kaj krei konton kun la necesaj rajtoj, ni nur bezonos kopii la skriptojn al la dosierserviloj, kiujn ni volas kontroli por DFSR, aldoni du liniojn al la agenta agordo sur ili kaj rekomenci la Zabbix-agentservon. , agordante ĝin por funkcii kiel la dezirata konto. Neniuj aliaj manaj agordoj estas bezonataj por DFSR-monitorado.

fonto: www.habr.com

Aldoni komenton