Pambuka
Kanthi infrastruktur sing cukup gedhe lan disebarake sing nggunakake DFS minangka titik siji akses menyang data lan DFSR kanggo replikasi data antarane pusat data lan server cabang, pitakonan muncul kanggo ngawasi status replikasi iki.
Kebetulan, meh sanalika sawise kita miwiti nggunakake DFSR, kita wiwit ngleksanakake Zabbix kanthi tujuan ngganti kebon binatang sing wis ana saka macem-macem alat lan nggawa pemantauan infrastruktur menyang wangun sing luwih informatif, lengkap lan logis. Kita bakal ngomong babagan nggunakake Zabbix kanggo ngawasi replikasi DFS.
Kaping pisanan, kita kudu mutusake apa data babagan replikasi DFS sing kudu dipikolehi kanggo ngawasi statuse. Indikator sing paling relevan yaiku backlog. Isine file sing durung disinkronake karo anggota grup replikasi liyane. Sampeyan bisa ndeleng ukurane nggunakake sarana dfsrdiag, diinstal karo peran DFSR. Ing negara replikasi normal, ukuran backlog kudu nyedhaki nol. Mulane, akeh file ing backlog nuduhake masalah karo replikasi.
Saiki babagan sisih praktis saka masalah kasebut.
Kanggo ngawasi ukuran backlog liwat Agen Zabbix, kita butuh:
- Skrip sing bakal ngurai output dfsrdiag kanggo nyedhiyakake nilai ukuran backlog pungkasan menyang Zabbix,
- Skrip sing bakal nemtokake pirang-pirang grup replikasi ing server, folder apa sing ditiru lan apa server liyane sing kalebu ing kono (kita ora pengin nglebokake kabeh iki menyang Zabbix kanthi tangan kanggo saben server, bener?),
- Nambahake skrip kasebut minangka UserParameter menyang konfigurasi agen Zabbix kanggo panggilan sabanjure saka server ngawasi,
- Miwiti layanan agen Zabbix minangka pangguna sing duwe hak kanggo maca backlog,
- Cithakan kanggo Zabbix, ing ngendi deteksi klompok, ngolah data sing ditampa lan menehi tandha bakal dikonfigurasi.
Parser skrip
Kanggo nulis parser, aku milih VBS minangka basa paling universal sing ana ing kabeh versi Windows Server. Logika skrip kasebut prasaja: nampa jeneng grup replikasi, folder sing ditiru, lan jeneng server sing ngirim lan nampa liwat baris printah. Parameter kasebut banjur diterusake menyang dfsrdiag, lan gumantung saka output sing diasilake:
Jumlah file - yen pesen ditampa babagan anané file ing backlog,
0 - yen pesen ditampa babagan ora ana file ing backlog ("Ora Backlog"),
-1 - yen pesen kesalahan ditampa dfsrdiag nalika nglakokake panjalukan ("[ERROR]").
njaluk-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
Skrip Discovery
Supaya Zabbix nemtokake kabeh klompok replikasi sing ana ing server lan ngerteni kabeh paramèter sing dibutuhake kanggo panyuwunan (jeneng folder, jeneng server tetanggan), kita kudu, pisanan, entuk informasi iki, lan nomer loro, saiki. ing format dingerteni kanggo Zabbix. Format sing dingerteni alat panemuan katon kaya iki:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
Cara paling gampang kanggo entuk informasi sing kita kasengsem yaiku liwat WMI, narik metu saka bagean DfsrReplicationGroupConfig sing cocog. Akibaté, skrip lair sing nggawe panjalukan menyang WMI lan ngasilake dhaptar grup, folder lan server ing format sing dibutuhake.
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
Aku setuju, script bisa uga ora cemlorot karo keanggunan kode lan sawetara bab ing iku mesthi bisa simplified, nanging nindakake fungsi utama - nyedhiyani informasi bab paramèter saka klompok réplikasi ing format dingerteni dening Zabbix.
Nambahake skrip menyang konfigurasi agen Zabbix
Kabeh ing kene gampang banget. Tambah baris ing ngisor iki menyang mburi file konfigurasi agen:
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"
Mesthi, kita nyetel dalan menyang sing duwe skrip. Aku sijine wong ing folder padha ngendi agen wis diinstal.
Sawise nggawe pangowahan, miwiti maneh layanan agen Zabbix.
Ngganti pangguna ing ngendi layanan Zabbix Agent mlaku
Kanggo nampa informasi liwat dfsrdiag, utilitas kudu mbukak ing akun sing nduweni hak administratif kanggo ngirim lan nampa anggota grup replikasi. Layanan agen Zabbix, mlaku kanthi standar ing akun sistem, ora bakal bisa nglakokake panjaluk kasebut. Aku nggawe akun kapisah ing domain, menehi hak administratif ing server perlu, lan ngatur layanan kanggo mbukak ing server iki.
Sampeyan bisa pindhah cara liyane: amarga dfsrdiag, ing kasunyatan, dianggo liwat WMI padha, banjur sampeyan bisa nggunakake
Cithakan ngawasi
Adhedhasar data sing ditampa, aku nggawe template sing:
- Nglakokake panemuan otomatis klompok replikasi sapisan saben jam,
- Priksa ukuran backlog kanggo saben klompok sapisan saben 5 menit,
- Ngandhut pemicu sing menehi tandha nalika ukuran backlog kanggo klompok apa wae luwih saka 100 sajrone 30 menit. Pemicu kasebut diterangake minangka prototipe sing ditambahake kanthi otomatis menyang grup sing dideteksi,
- Mbangun grafik ukuran backlog kanggo saben klompok replikasi.
Sampeyan bisa ndownload template kanggo Zabbix 2.2
Asile
Sawise ngimpor cithakan menyang Zabbix lan nggawe akun kanthi hak sing dibutuhake, kita mung kudu nyalin skrip menyang server file sing pengin dipantau kanggo DFSR, nambah rong baris menyang konfigurasi agen lan miwiti maneh layanan agen Zabbix. , nyetel kanggo mbukak minangka akun sing dikarepake. Ora ana setelan manual liyane sing dibutuhake kanggo ngawasi DFSR.
Source: www.habr.com