Monitoraghju simplice di a replicazione DFS in Zabbix

Introduzione

Cù una infrastruttura abbastanza grande è distribuita chì usa DFS cum'è un puntu d'accessu di dati unicu è DFSR per a replicazione di dati trà u centru di dati è i servitori di filiale, a quistione di monitorà u statutu di sta replicazione.
Coincidentamente, quasi subitu dopu à l'iniziu di l'usu di DFSR, avemu cuminciatu à implementà Zabbix per rimpiazzà u zoo esistente di diversi strumenti è portà u monitoraghju di l'infrastruttura in una forma più informativa, cumpleta è logica. Parleremu di utilizà Zabbix per monitorà a replicazione DFS.

Prima di tuttu, avemu bisognu di decide chì dati nantu à a replicazione DFS avemu bisognu di riceve per monitorà u so statutu. L'indicatore più pertinente hè u backlog. Contene i schedari chì ùn sò micca stati sincronizati cù altri membri di u gruppu di replicazione. Pudete vede a so dimensione cù l'utilità dfsrdiaginstallatu cù u rolu DFSR. In u statu normale di replicazione, a dimensione di backlog deve tende à cero. Per quessa, un gran numaru di schedari in u backlog indicanu prublemi cù a replicazione.

Avà nantu à u latu praticu di u prublema.

Per monitorizà a dimensione di u backlog attraversu Zabbix Agent, avemu bisognu:

  • Script chì analizà l'output dfsrdiag per furnisce i valori finali di a dimensione di u backlog à Zabbix,
  • Un script chì determinà quanti gruppi di replicazione ci sò in u servitore, chì cartulare replicanu è chì altri servitori includenu (ùn vulemu micca guidà tuttu questu in Zabbix à manu per ogni servitore, nò?),
  • Ingressu questi script cum'è UserParameter in a cunfigurazione di l'agente Zabbix per a chjama successiva da u servitore di monitoraghju,
  • Cumincià u serviziu di l'agente Zabbix cum'è un utilizatore cù diritti per leghje u backlog,
  • Template per Zabbix, in quale a scuperta di u gruppu serà cunfigurata, u trattamentu di e dati ricevuti è l'emissione di alerti nantu à elli.

Parser di script

Per scrive u parser, aghju sceltu VBS cum'è a lingua più universale presente in tutte e versioni di Windows Server. A logica di u script hè simplice: riceve u nome di u gruppu di replicazione, u cartulare replicatu, è i nomi di i servitori di mandatu è di ricivutu via a linea di cummanda. Questi paràmetri sò dopu passati à dfsrdiag, è sicondu u so output:
Numaru di schedari - se un missaghju nantu à a prisenza di i schedari in u backlog hè ricevutu,
0 - se un missaghju hè statu ricevutu annantu à l'absenza di schedari in u backlog ("No Backlog"),
-1 - se un missaghju d'errore hè statu ricevutu dfsrdiag quandu eseguisce a dumanda ("[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

Scrittura di scuperta

Per Zabbix per determinà tutti i gruppi di replicazione prisenti nantu à u servitore stessu è scopre tutti i paràmetri necessarii per a dumanda (nome di cartulare, nomi di servitori vicini), avemu bisognu di ottene questa informazione, prima, è secondu, prisentallu in un furmatu chì Zabbix capisce. U furmatu chì l'uttellu di scuperta capisce hè cusì:

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

...

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

A manera più faciule d'ottene l'infurmazioni chì ci interessa hè attraversu WMI, tirà fora di e sezioni currispundenti di DfsrReplicationGroupConfig. In u risultatu, hè natu un script chì genera una dumanda à WMI è pruduce una lista di gruppi, i so cartulare è i servitori in u formatu necessariu.

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

Sò d'accordu, u script ùn pò micca brilla cù l'eleganza di u codice è qualcosa in questu pò esse simplificatu, ma a so funzione principale - per dà infurmazioni nantu à i paràmetri di i gruppi di replicazione in un formatu comprensibile da Zabbix - eseguisce bè.

Aghjunghjendu script à a cunfigurazione di l'agente Zabbix

Tuttu hè estremamente simplice quì. Aghjunghjite e seguenti linee à a fine di u schedariu di cunfigurazione di l'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"

Di sicuru, correggemu i camini à quelli induve avemu script. I mette in u stessu cartulare induve l'agente hè stallatu.

Dopu avè fattu cambiamenti, riavvia u serviziu di l'agente Zabbix.

Cambia l'utilizatore sottu quale u serviziu Zabbix Agent hè in esecuzione

Per riceve infurmazioni attraversu dfsrdiag, l'utilità deve esse eseguita in nome di un contu chì hà i diritti amministrativi sia per mandà sia per riceve membri di u gruppu di replicazione. U serviziu di l'agente Zabbix, chì funziona per automaticamente sottu u contu di u sistema, ùn serà micca capaci di cumpiendu una tale dumanda. Aghju creatu un contu separatu in u duminiu, hà datu i diritti amministrativi nantu à i servitori necessarii, è cunfigurate questi servitori per inizià u serviziu da sottu.

Pudete ancu andà in l'altru modu: postu chì dfsrdiag, in fattu, travaglia attraversu u listessu WMI, pudete aduprà descrizzione, Cumu dà un cuntu di duminiu u dirittu di usà senza emette diritti amministrativi, ma s'ellu avemu parechji gruppi di replicazione, allora serà difficiule di emette diritti à ogni gruppu. In ogni casu, in casu chì vulemu monitorà a replicazione di u Volume di u Sistema di Dominiu nantu à i controller di duminiu, questu pò esse l'unica opzione accettabile, postu chì dà i diritti di l'amministratore di u duminiu à u cuntu di u serviziu di cuntrollu ùn hè micca a megliu idea.

U mudellu di monitoraghju

Basatu nantu à e dati chì aghju ricevutu, aghju creatu un mudellu chì:

  • Esegue a scuperta automatica di i gruppi di replicazione una volta per ora,
  • Una volta ogni 5 minuti verifica a dimensione di u backlog per ogni gruppu,
  • Contene un attivatore chì emette una alerta quandu a dimensione di u backlog per qualsiasi gruppu hè più di 100 per 30 minuti. U trigger hè scrittu cum'è un prototipu chì hè aghjuntu automaticamente à i gruppi scuperti,
  • Trace a dimensione di backlog per ogni gruppu di replicazione.

Pudete scaricà u mudellu per Zabbix 2.2 ccà.

U risultatu

Dopu avè impurtatu u mudellu in Zabbix è criatu un contu cù i diritti necessarii, avemu solu bisognu di copià i scripts à i servitori di schedari chì vulemu monitorà per DFSR, aghjunghje duie linee à a cunfigurazione di l'agente nantu à elli è ripigliate u serviziu di l'agente Zabbix. cunfigurà per eseguisce in nome di u contu desideratu. Nisun altru paràmetru manuale hè necessariu per monitorà DFSR.

Source: www.habr.com

Add a comment