Enkel overvågning af DFS-replikering i Zabbix

Indledning

Med en ret stor og distribueret infrastruktur, der bruger DFS som et enkelt adgangspunkt til data og DFSR til datareplikering mellem datacentre og filialservere, opstår spørgsmålet om overvågning af status for denne replikering.
Tilfældigvis begyndte vi næsten umiddelbart efter, at vi begyndte at bruge DFSR, at implementere Zabbix med det mål at erstatte den eksisterende zoo af forskellige værktøjer og bringe infrastrukturovervågning til en mere informativ, komplet og logisk form. Vi vil tale om at bruge Zabbix til at overvåge DFS-replikering.

Først og fremmest skal vi beslutte, hvilke data om DFS-replikering der skal indhentes for at overvåge dens status. Den mest relevante indikator er efterslæb. Den indeholder filer, der ikke er blevet synkroniseret med andre medlemmer af replikeringsgruppen. Du kan se dens størrelse ved hjælp af værktøjet dfsrdiag, installeret med DFSR-rollen. I en normal replikationstilstand bør backlog-størrelsen nærme sig nul. Derfor indikerer et stort antal filer i backlog problemer med replikering.

Nu om den praktiske side af sagen.

For at overvåge størrelsen af ​​efterslæbet gennem Zabbix Agent har vi brug for:

  • Script, der vil analysere outputtet dfsrdiag for at give Zabbix endelige backlogstørrelsesværdier,
  • Et script, der bestemmer, hvor mange replikeringsgrupper der er på serveren, hvilke mapper de replikerer, og hvilke andre servere der er inkluderet i dem (vi ønsker ikke at indtaste alt dette i Zabbix manuelt for hver server, vel?).
  • Tilføjelse af disse scripts som UserParameter til Zabbix-agentkonfigurationen til efterfølgende opkald fra overvågningsserveren,
  • Start af Zabbix-agenttjenesten som en bruger, der har rettigheder til at læse backlog,
  • En skabelon til Zabbix, hvor detektering af grupper, behandling af modtagne data og udstedelse af advarsler om dem vil blive konfigureret.

Script-parser

For at skrive parseren valgte jeg VBS som det mest universelle sprog, der findes i alle versioner af Windows Server. Logikken i scriptet er enkel: det modtager navnet på replikeringsgruppen, den replikerede mappe og navnene på de afsendende og modtagende servere via kommandolinjen. Disse parametre sendes derefter til dfsrdiag, og afhængigt af dens output producerer den:
Antal filer - hvis der modtages en besked om tilstedeværelsen af ​​filer i backlog,
0 — hvis der modtages en besked om fravær af filer i backlog ("Ingen backlog"),
-1 - hvis der modtages en fejlmeddelelse dfsrdiag når du udfører en anmodning ("[FEJL]").

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

Discovery script

For at Zabbix kan bestemme alle replikeringsgrupperne på serveren og finde ud af alle de parametre, der kræves til anmodningen (mappenavn, navne på naboservere), skal vi for det første indhente disse oplysninger og for det andet præsentere dem i et format, der er forståeligt for Zabbix. Formatet, som opdagelsesværktøjet forstår, ser således ud:

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

...

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

Den nemmeste måde at få den information, vi er interesseret i, er gennem WMI, ved at trække den ud fra de tilsvarende sektioner af DfsrReplicationGroupConfig. Som et resultat blev der født et script, der genererer en anmodning til WMI og udsender en liste over grupper, deres mapper og servere i det krævede format.

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

Jeg er enig i, at scriptet måske ikke skinner med elegance af kode, og nogle ting i det kunne bestemt forenkles, men det udfører sin hovedfunktion - at give information om parametrene for replikeringsgrupper i et format, som Zabbix kan forstå.

Tilføjelse af scripts til Zabbix-agentkonfigurationen

Alt her er ekstremt enkelt. Tilføj følgende linjer til slutningen af ​​agentkonfigurationsfilen:

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"

Vi tilpasser selvfølgelig stierne til dem, hvor vi har scripts. Jeg lægger dem i den samme mappe, hvor agenten er installeret.

Når du har foretaget ændringer, skal du genstarte Zabbix-agenttjenesten.

Ændring af den bruger, som Zabbix Agent-tjenesten kører under

For at modtage information gennem dfsrdiag, skal hjælpeprogrammet køres under en konto, der har administrative rettigheder til både afsendende og modtagende medlemmer af replikeringsgruppen. Zabbix-agenttjenesten, der kører som standard under systemkontoen, vil ikke være i stand til at udføre en sådan anmodning. Jeg oprettede en separat konto i domænet, gav den administrative rettigheder på de nødvendige servere og konfigurerede tjenesten til at køre under den på disse servere.

Du kan gå en anden vej: fordi dfsrdiag, faktisk fungerer gennem den samme WMI, så kan du bruge beskrivelse, hvordan man giver en domænekonto rettighederne til at bruge den uden at udstede administrative rettigheder, men hvis vi har mange replikeringsgrupper, vil det være svært at udstede rettigheder til hver gruppe. Men hvis vi ønsker at overvåge domænesystemvolumenreplikering på domænecontrollere, kan dette være den eneste acceptable mulighed, da det ikke er en god idé at give domæneadministratorrettigheder til overvågningstjenestekontoen.

Overvågningsskabelon

Baseret på de data, jeg modtog, lavede jeg en skabelon, der:

  • Kører automatisk opdagelse af replikeringsgrupper én gang i timen,
  • Kontrollerer efterslæbets størrelse for hver gruppe en gang hvert 5. minut,
  • Indeholder en trigger, der udsender en advarsel, når backlog-størrelsen for en gruppe er mere end 100 i 30 minutter. Triggeren beskrives som en prototype, der automatisk tilføjes til detekterede grupper,
  • Opbygger efterslæbsstørrelsesgrafer for hver replikeringsgruppe.

Du kan downloade skabelonen til Zabbix 2.2 her.

Total

Efter at have importeret skabelonen til Zabbix og oprettet en konto med de nødvendige rettigheder, skal vi kun kopiere scripts til de filservere, som vi ønsker at overvåge for DFSR, tilføje to linjer til agentkonfigurationen på dem og genstarte Zabbix agenttjenesten. , indstille den til at køre som den ønskede konto. Der kræves ingen andre manuelle indstillinger til DFSR-overvågning.

Kilde: www.habr.com

Tilføj en kommentar