Monitoreo simple de replicación DFS en Zabbix

introducción

Con una infraestructura bastante grande y distribuida que utiliza DFS como punto único de acceso a los datos y DFSR para la replicación de datos entre centros de datos y servidores de sucursales, surge la cuestión de monitorear el estado de esta replicación.
Casualmente, casi inmediatamente después de que comenzamos a usar DFSR, comenzamos a implementar Zabbix con el objetivo de reemplazar el zoológico existente de varias herramientas y llevar el monitoreo de la infraestructura a una forma más informativa, completa y lógica. Hablaremos sobre el uso de Zabbix para monitorear la replicación DFS.

En primer lugar, debemos decidir qué datos sobre la replicación DFS se deben obtener para monitorear su estado. El indicador más relevante es el atraso. Contiene archivos que no se han sincronizado con otros miembros del grupo de replicación. Puedes ver su tamaño usando la utilidad. dfsrdiag, instalado con el rol DFSR. En un estado de replicación normal, el tamaño del trabajo pendiente debería acercarse a cero. En consecuencia, una gran cantidad de archivos acumulados indican problemas con la replicación.

Pasemos ahora al lado práctico de la cuestión.

Para monitorear el tamaño del trabajo pendiente a través de Zabbix Agent, necesitaremos:

  • Script que analizará la salida. dfsrdiag para proporcionar valores finales del tamaño del trabajo pendiente a Zabbix,
  • Un script que determinará cuántos grupos de replicación hay en el servidor, qué carpetas replican y qué otros servidores están incluidos en ellas (no queremos ingresar todo esto en Zabbix a mano para cada servidor, ¿verdad?),
  • Agregar estos scripts como UserParameter a la configuración del agente Zabbix para llamadas posteriores desde el servidor de monitoreo,
  • Iniciar el servicio del agente Zabbix como un usuario que tiene derechos para leer el trabajo pendiente,
  • Una plantilla para Zabbix, en la que se configurará la detección de grupos, el procesamiento de los datos recibidos y la emisión de alertas sobre los mismos.

analizador de guiones

Para escribir el analizador, elegí VBS como el lenguaje más universal presente en todas las versiones de Windows Server. La lógica del script es simple: recibe el nombre del grupo de replicación, la carpeta replicada y los nombres de los servidores de envío y recepción a través de la línea de comando. Estos parámetros luego se pasan a dfsrdiag, y dependiendo de su producción produce:
Número de archivos: si se recibe un mensaje sobre la presencia de archivos en el trabajo pendiente,
0 — si se recibe un mensaje sobre la ausencia de archivos en el trabajo pendiente (“No hay trabajo pendiente”),
-1 - si se recibe un mensaje de error dfsrdiag al ejecutar una solicitud ("[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ón de descubrimiento

Para que Zabbix pueda determinar todos los grupos de replicación presentes en el servidor y conocer todos los parámetros necesarios para la solicitud (nombre de la carpeta, nombres de los servidores vecinos), debemos, en primer lugar, obtener esta información y, en segundo lugar, presentarla. en un formato comprensible para Zabbix. El formato que entiende la herramienta de descubrimiento es el siguiente:

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

...

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

La forma más sencilla de obtener la información que nos interesa es a través de WMI, extrayéndola de las secciones correspondientes de DfsrReplicationGroupConfig. Como resultado, nació un script que genera una solicitud a WMI y genera una lista de grupos, sus carpetas y servidores en el formato requerido.

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

Estoy de acuerdo, es posible que el script no brille con la elegancia del código y algunas cosas en él ciertamente podrían simplificarse, pero cumple su función principal: proporcionar información sobre los parámetros de los grupos de replicación en un formato comprensible para Zabbix.

Agregar scripts a la configuración del agente Zabbix

Todo aquí es extremadamente simple. Agregue las siguientes líneas al final del archivo de configuración del agente:

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"

Por supuesto, ajustamos las rutas a aquellas en las que tengamos scripts. Los puse en la misma carpeta donde está instalado el agente.

Después de realizar cambios, reinicie el servicio del agente Zabbix.

Cambiar el usuario bajo el cual se ejecuta el servicio Zabbix Agent

Para recibir información a través de dfsrdiag, la utilidad debe ejecutarse con una cuenta que tenga derechos administrativos tanto para enviar como para recibir miembros del grupo de replicación. El servicio del agente Zabbix, que se ejecuta de forma predeterminada en la cuenta del sistema, no podrá ejecutar dicha solicitud. Creé una cuenta separada en el dominio, le otorgué derechos administrativos en los servidores necesarios y configuré el servicio para que se ejecutara en estos servidores.

Puedes ir por otro camino: porque dfsrdiag, de hecho, funciona a través del mismo WMI, entonces puedes usar descripción, cómo otorgarle a una cuenta de dominio los derechos para usarlo sin otorgar derechos administrativos, pero si tenemos muchos grupos de replicación, entonces será difícil otorgar derechos a cada grupo. Sin embargo, en caso de que queramos monitorear la replicación del volumen del sistema de dominio en los controladores de dominio, esta puede ser la única opción aceptable, ya que otorgar derechos de administrador de dominio a la cuenta del servicio de monitoreo no es una buena idea.

Plantilla de seguimiento

Según los datos que recibí, creé una plantilla que:

  • Ejecuta el descubrimiento automático de grupos de replicación una vez por hora.
  • Comprueba el tamaño del trabajo pendiente para cada grupo una vez cada 5 minutos,
  • Contiene un activador que emite una alerta cuando el tamaño del trabajo pendiente de cualquier grupo es superior a 100 durante 30 minutos. El disparador se describe como un prototipo que se agrega automáticamente a los grupos detectados,
  • Crea gráficos de tamaño de trabajo pendiente para cada grupo de replicación.

Puedes descargar la plantilla para Zabbix 2.2 aquí.

Total

Después de importar la plantilla a Zabbix y crear una cuenta con los derechos necesarios, solo necesitaremos copiar los scripts a los servidores de archivos que queremos monitorear para DFSR, agregar dos líneas a la configuración del agente en ellos y reiniciar el servicio del agente Zabbix. , configurándolo para que se ejecute como la cuenta deseada. No se requieren otras configuraciones manuales para el monitoreo DFSR.

Fuente: habr.com

Añadir un comentario