Monitorización sinxela da replicación DFS en Zabbix

Introdución

Cunha infraestrutura bastante grande e distribuída que usa DFS como punto único de acceso aos datos e DFSR para a replicación de datos entre centros de datos e servidores de sucursais, xorde a cuestión de supervisar o estado desta replicación.
Casualmente, case inmediatamente despois de comezar a usar DFSR, comezamos a implementar Zabbix co obxectivo de substituír o zoolóxico existente de varias ferramentas e levar o seguimento da infraestrutura a unha forma máis informativa, completa e lóxica. Falaremos sobre o uso de Zabbix para supervisar a replicación DFS.

En primeiro lugar, debemos decidir que datos sobre a replicación DFS hai que obter para supervisar o seu estado. O indicador máis relevante é o atraso. Contén ficheiros que non se sincronizaron con outros membros do grupo de replicación. Podes ver o seu tamaño usando a utilidade dfsrdiag, instalado co rol DFSR. Nun estado de replicación normal, o tamaño do atraso debería achegarse a cero. En consecuencia, un gran número de ficheiros no atraso indican problemas coa replicación.

Agora sobre o lado práctico da cuestión.

Para controlar o tamaño do atraso a través de Zabbix Agent, necesitaremos:

  • Script que analizará a saída dfsrdiag para proporcionar valores finais de tamaño de atraso a Zabbix,
  • Un script que determinará cantos grupos de replicación hai no servidor, que cartafoles replican e que outros servidores están incluídos neles (non queremos introducir todo isto en Zabbix a man para cada servidor, non?),
  • Engadindo estes scripts como UserParameter á configuración do axente Zabbix para as chamadas posteriores desde o servidor de monitorización,
  • Iniciando o servizo de axente de Zabbix como usuario que ten dereitos para ler o atraso,
  • Un modelo para Zabbix, no que se configurará a detección de grupos, o tratamento dos datos recibidos e a emisión de alertas sobre eles.

Analizador de scripts

Para escribir o analizador, escollín VBS como a linguaxe máis universal presente en todas as versións de Windows Server. A lóxica do script é sinxela: recibe o nome do grupo de replicación, o cartafol replicado e os nomes dos servidores de envío e recepción a través da liña de comandos. Despois pásanse estes parámetros dfsrdiag, e dependendo da súa saída produce:
Número de ficheiros: se se recibe unha mensaxe sobre a presenza de ficheiros no atraso,
0: se se recibe unha mensaxe sobre a ausencia de ficheiros na carteira atrasada ("Non hai carteira atrasada"),
-1 - se recibe unha mensaxe de erro dfsrdiag ao executar unha solicitude ("[ERRO]").

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 descubrimento

Para que Zabbix determine todos os grupos de replicación presentes no servidor e descubra todos os parámetros necesarios para a solicitude (nome do cartafol, nomes dos servidores veciños), necesitamos, en primeiro lugar, obter esta información e, en segundo lugar, presentala. nun formato comprensible para Zabbix. O formato que entende a ferramenta de descubrimento é o seguinte:

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

...

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

A forma máis sinxela de obter a información que nos interesa é a través de WMI, extraéndoa das seccións correspondentes de DfsrReplicationGroupConfig. Como resultado, naceu un script que xera unha solicitude a WMI e saca unha lista de grupos, os seus cartafoles e servidores no formato necesario.

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

Estou de acordo, o script pode non brillar coa elegancia do código e algunhas cousas nel poderían simplificarse, pero cumpre a súa función principal: proporcionar información sobre os parámetros dos grupos de replicación nun formato comprensible por Zabbix.

Engadindo scripts á configuración do axente Zabbix

Todo aquí é extremadamente sinxelo. Engade as seguintes liñas ao final do ficheiro de configuración do axente:

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 suposto, axustamos os camiños a aqueles nos que temos guións. Póñoos no mesmo cartafol onde está instalado o axente.

Despois de facer cambios, reinicie o servizo de axente Zabbix.

Cambiando o usuario baixo o que se executa o servizo Zabbix Agent

Para recibir información a través de dfsrdiag, a utilidade debe executarse cunha conta que teña dereitos administrativos tanto para enviar como para recibir os membros do grupo de replicación. O servizo de axente de Zabbix, que se executa por defecto na conta do sistema, non poderá executar tal solicitude. Creei unha conta separada no dominio, dei dereitos administrativos nos servidores necesarios e configurei o servizo para que se execute baixo ela nestes servidores.

Podes ir doutro xeito: porque dfsrdiag, de feito, funciona a través do mesmo WMI, entón podes usar descrición, como darlle a unha conta de dominio os dereitos para usala sen emitir dereitos administrativos, pero se temos moitos grupos de replicación, será difícil emitir dereitos para cada grupo. Non obstante, no caso de que queiramos supervisar a replicación do volume do sistema de dominio nos controladores de dominio, esta pode ser a única opción aceptable, xa que non é unha boa idea dar dereitos de administrador de dominio á conta do servizo de monitorización.

Modelo de seguimento

A partir dos datos que recibín, creei un modelo que:

  • Executa a detección automática de grupos de replicación unha vez por hora,
  • Comproba o tamaño do atraso de cada grupo unha vez cada 5 minutos,
  • Contén un activador que emite unha alerta cando o tamaño do atraso de calquera grupo é superior a 100 durante 30 minutos. O disparador descríbese como un prototipo que se engade automaticamente aos grupos detectados,
  • Crea gráficos de tamaño de atraso para cada grupo de replicación.

Podes descargar o modelo para Zabbix 2.2 aquí.

Total

Despois de importar o modelo a Zabbix e crear unha conta cos dereitos necesarios, só necesitaremos copiar os scripts nos servidores de ficheiros que queremos supervisar para DFSR, engadir neles dúas liñas á configuración do axente e reiniciar o servizo de axente de Zabbix. , configurándoo para que se execute como a conta desexada. Non se precisa ningunha outra configuración manual para o seguimento do DFSR.

Fonte: www.habr.com

Engadir un comentario