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
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
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