Supervisió senzilla de la replicació DFS a Zabbix

Introducció

Amb una infraestructura prou gran i distribuïda que utilitza DFS com a punt d'accés a dades únic i DFSR per a la replicació de dades entre el centre de dades i els servidors de la sucursal, sorgeix la qüestió de supervisar l'estat d'aquesta rèplica.
Casualment, gairebé immediatament després de començar a utilitzar DFSR, vam començar a implementar Zabbix per substituir el zoològic existent de diverses eines i portar el monitoratge de la infraestructura a una forma més informativa, completa i lògica. Parlarem de l'ús de Zabbix per supervisar la replicació DFS.

En primer lloc, hem de decidir quines dades sobre la replicació DFS hem de rebre per controlar el seu estat. L'indicador més rellevant és l'endarreriment. Conté fitxers que no s'han sincronitzat amb altres membres del grup de rèplica. Podeu veure la seva mida amb la utilitat dfsrdiaginstal·lat amb el rol DFSR. En l'estat normal de replicació, la mida de l'endarreriment hauria de tendir a zero. En conseqüència, un gran nombre de fitxers a l'endarreriment indiquen problemes amb la rèplica.

Ara sobre la part pràctica de la qüestió.

Per controlar la mida de l'endarreriment mitjançant Zabbix Agent, necessitem:

  • Script que analitzarà la sortida dfsrdiag per proporcionar els valors finals de la mida de l'endarreriment a Zabbix,
  • Un script que determinarà quants grups de rèplica hi ha al servidor, quines carpetes repliquen i quins altres servidors inclouen (no volem introduir tot això a Zabbix a mà per a cada servidor, oi?),
  • Introduint aquests scripts com a UserParameter a la configuració de l'agent Zabbix per a una trucada posterior des del servidor de supervisió,
  • Iniciant el servei d'agent Zabbix com a usuari amb drets per llegir l'endarreriment,
  • Plantilla per a Zabbix, en la qual es configurarà la descoberta de grups, processament de les dades rebudes i emissió d'alertes sobre aquestes.

Analitzador de scripts

Per escriure l'analitzador, vaig triar VBS com l'idioma més universal present a totes les versions de Windows Server. La lògica de l'script és senzilla: rep el nom del grup de rèplica, la carpeta replicada i els noms dels servidors d'enviament i de recepció a través de la línia d'ordres. A continuació, es transmeten aquests paràmetres dfsrdiag, i depenent de la seva sortida:
Nombre de fitxers: si es rep un missatge sobre la presència de fitxers a l'endarreriment,
0 - si s'ha rebut un missatge sobre l'absència de fitxers a l'endarreriment ("No hi ha cap endarreriment"),
-1 - si s'ha rebut un missatge d'error dfsrdiag en executar la sol·licitud ("[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

Guió de descobriment

Per tal que Zabbix determini tots els grups de rèplica presents al propi servidor i esbrin tots els paràmetres necessaris per a la sol·licitud (nom de la carpeta, noms dels servidors veïns), hem d'obtenir aquesta informació, en primer lloc, i en segon lloc, presentar-la a un format que Zabbix entén. El format que entén l'eina de descobriment és el següent:

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

...

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

La manera més senzilla d'obtenir la informació que ens interessa és mitjançant WMI, traient-la de les seccions corresponents de DfsrReplicationGroupConfig. Com a resultat, va néixer un script que genera una sol·licitud a WMI i genera una llista de grups, les seves carpetes i servidors en el format requerit.

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

Estic d'acord, és possible que l'script no brilli amb l'elegància del codi i alguna cosa en ell sens dubte es pot simplificar, però la seva funció principal - donar informació sobre els paràmetres dels grups de replicació en un format comprensible per Zabbix - funciona amb èxit.

Afegint scripts a la configuració de l'agent Zabbix

Aquí tot és extremadament senzill. Afegiu les línies següents al final del fitxer de configuració de l'agent:

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"

Per descomptat, corregim els camins a aquells on tenim scripts. Els poso a la mateixa carpeta on està instal·lat l'agent.

Després de fer canvis, reinicieu el servei d'agent Zabbix.

Canviar l'usuari amb el qual s'executa el servei de l'agent Zabbix

Per tal de rebre informació a través de dfsrdiag, la utilitat s'ha d'executar en nom d'un compte que tingui drets administratius tant per enviar com per rebre els membres del grup de rèplica. El servei d'agent Zabbix, que s'executa de manera predeterminada amb el compte del sistema, no podrà complir aquesta sol·licitud. Vaig crear un compte independent al domini, li vaig donar drets administratius als servidors necessaris i vaig configurar aquests servidors per iniciar el servei des de sota.

També pots anar a l'altra banda: ja que dfsrdiag, de fet, funciona mitjançant el mateix WMI, que podeu utilitzar descripció, com donar a un compte de domini el dret d'utilitzar-lo sense emetre drets administratius, però si tenim molts grups de rèplica, serà difícil emetre drets a cada grup. Tanmateix, en cas que vulguem supervisar la rèplica del volum del sistema de domini als controladors de domini, aquesta pot ser l'única opció acceptable, ja que donar drets d'administrador de domini al compte del servei de monitorització no és la millor idea.

Plantilla de seguiment

A partir de les dades que vaig rebre, vaig crear una plantilla que:

  • Executa la detecció automàtica de grups de rèplica una vegada per hora,
  • Un cop cada 5 minuts comprova la mida de l'endarreriment per a cada grup,
  • Conté un activador que emet una alerta quan la mida de l'endarreriment de qualsevol grup és superior a 100 durant 30 minuts. El disparador es descriu com un prototip que s'afegeix automàticament als grups descoberts,
  • Representa la mida de l'endarreriment per a cada grup de rèplica.

Podeu descarregar la plantilla per a Zabbix 2.2 aquí.

Total

Després d'importar la plantilla a Zabbix i crear un compte amb els drets necessaris, només hem de copiar els scripts als servidors de fitxers que volem supervisar per DFSR, afegir-hi dues línies a la configuració de l'agent i reiniciar el servei d'agent Zabbix, configurant-lo perquè s'executi en nom del compte desitjat. No es requereix cap altra configuració manual per supervisar DFSR.

Font: www.habr.com

Afegeix comentari