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