Enkonduko
Kun sufiĉe granda kaj distribuita infrastrukturo, kiu uzas DFS kiel ununuran punkton de aliro al datumoj kaj DFSR por reproduktado de datumoj inter datumcentroj kaj branĉoserviloj, la demando ŝprucas pri monitorado de la statuso de ĉi tiu reproduktado.
Hazarde, preskaŭ tuj post kiam ni komencis uzi DFSR, ni komencis efektivigi Zabbix kun la celo anstataŭigi la ekzistantan zoon de diversaj iloj kaj alporti infrastrukturan monitoradon al pli informa, kompleta kaj logika formo. Ni parolos pri uzado de Zabbix por monitori DFS-reproduktadon.
Antaŭ ĉio, ni devas decidi, kiajn datumojn pri DFS-reproduktado necesas akiri por kontroli ĝian staton. La plej grava indikilo estas restaro. Ĝi enhavas dosierojn kiuj ne estis sinkronigitaj kun aliaj membroj de la reproduktadgrupo. Vi povas vidi ĝian grandecon uzante la ilon dfsrdiag, instalita kun la DFSR-rolo. En normala reproduktadŝtato, la restaro grandeco devus alproksimiĝi al nulo. Sekve, grandaj nombroj da dosieroj en la restaro indikas problemojn kun reproduktado.
Nun pri la praktika flanko de la afero.
Por kontroli la grandecon de la restaro per Zabbix Agent, ni bezonos:
- Skripto kiu analizos la eligon dfsrdiag provizi finajn restargajn grandvalorojn al Zabbix,
- Skripto, kiu determinos kiom da reproduktaj grupoj estas sur la servilo, kiajn dosierujojn ili reproduktas kaj kiaj aliaj serviloj estas inkluzivitaj en ili (ni ne volas enigi ĉion ĉi en Zabbix permane por ĉiu servilo, ĉu ne?),
- Aldonante ĉi tiujn skriptojn kiel UserParameter al la Zabbix-agenta agordo por posta vokado de la monitora servilo,
- Lanĉante la Zabbix-agentservon kiel uzanto kiu havas rajtojn legi la restaron,
- Ŝablono por Zabbix, en kiu la detekto de grupoj, prilaborado de ricevitaj datumoj kaj eldonado de atentigoj pri ili estos agordita.
Skripto analizilo
Por skribi la analizilon, mi elektis VBS kiel la plej universalan lingvon ĉeestanta en ĉiuj versioj de Windows Server. La logiko de la skripto estas simpla: ĝi ricevas la nomon de la reprodukta grupo, la reproduktitan dosierujon kaj la nomojn de la sendantaj kaj ricevantaj serviloj per la komandlinio. Tiuj parametroj tiam estas pasitaj al dfsrdiag, kaj depende de ĝia produktaĵo ĝi produktas:
Nombro da dosieroj - se oni ricevas mesaĝon pri la ĉeesto de dosieroj en la restaro,
0 — se oni ricevas mesaĝon pri la foresto de dosieroj en la restaraĵo ("Neniu restarigo"),
-1 - se erarmesaĝo estas ricevita dfsrdiag dum plenumado de peto ("[ERARO]").
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
Malkovra skripto
Por ke Zabbix determini ĉiujn replikajn grupojn ĉeestantajn sur la servilo kaj eksciu ĉiujn parametrojn necesajn por la peto (dosierujo-nomo, nomoj de najbaraj serviloj), ni devas unue akiri ĉi tiun informon, kaj due prezenti ĝin. en formato komprenebla por Zabbix. La formato, kiun la malkovra ilo komprenas, aspektas jene:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
La plej facila maniero akiri la informojn pri kiuj ni interesiĝas estas per WMI, eltiri ĝin el la respondaj sekcioj de DfsrReplicationGroupConfig. Kiel rezulto, skripto naskiĝis, kiu generas peton al WMI kaj eligas liston de grupoj, iliaj dosierujoj kaj serviloj en la bezonata formato.
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
Mi konsentas, la skripto eble ne brilas per eleganteco de kodo kaj iuj aferoj en ĝi certe povus esti simpligitaj, sed ĝi plenumas sian ĉefan funkcion - liverante informojn pri la parametroj de reproduktaj grupoj en formato komprenebla de Zabbix.
Aldonante skriptojn al la Zabbix-agenta agordo
Ĉio ĉi tie estas ege simpla. Aldonu la sekvajn liniojn al la fino de la agorda dosiero:
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"
Kompreneble, ni ĝustigas la vojojn al tiuj, kie ni havas skriptojn. Mi metis ilin en la saman dosierujon kie la agento estas instalita.
Post fari ŝanĝojn, rekomencu la Zabbix-agentservon.
Ŝanĝi la uzanton sub kiu funkcias la servo Zabbix Agent
Por ricevi informojn tra dfsrdiag, la ilo devas esti rulita sub konto kiu havas administrajn rajtojn al kaj sendado kaj ricevado de membroj de la reproduktadgrupo. La agentservo de Zabbix, funkcianta defaŭlte sub la sistema konto, ne povos plenumi tian peton. Mi kreis apartan konton en la domajno, donis al ĝi administrajn rajtojn sur la necesaj serviloj, kaj agordis la servon por funkcii sub ĝi sur ĉi tiuj serviloj.
Vi povas iri alian vojon: ĉar dfsrdiag, fakte, funkcias per la sama WMI, tiam vi povas uzi
Ŝablono de monitorado
Surbaze de la datumoj kiujn mi ricevis, mi kreis ŝablonon, kiu:
- Rulas aŭtomatan malkovron de reproduktaj grupoj unufoje je horo,
- Kontrolas la restaran grandecon por ĉiu grupo unufoje ĉiujn 5 minutojn,
- Enhavas ellasilon, kiu eligas alarmon kiam la restarigita grandeco por iu grupo estas pli ol 100 dum 30 minutoj. La ellasilo estas priskribita kiel prototipo kiu estas aŭtomate aldonita al detektitaj grupoj,
- Konstruas postrestantajn grandecografeojn por ĉiu reproduktadgrupo.
Vi povas elŝuti la ŝablonon por Zabbix 2.2
La rezulto
Post importi la ŝablonon en Zabbix kaj krei konton kun la necesaj rajtoj, ni nur bezonos kopii la skriptojn al la dosierserviloj, kiujn ni volas kontroli por DFSR, aldoni du liniojn al la agenta agordo sur ili kaj rekomenci la Zabbix-agentservon. , agordante ĝin por funkcii kiel la dezirata konto. Neniuj aliaj manaj agordoj estas bezonataj por DFSR-monitorado.
fonto: www.habr.com