Pengenalan
Dengan infrastruktur yang agak besar dan teragih yang menggunakan DFS sebagai satu titik akses kepada data dan DFSR untuk replikasi data antara pusat data dan pelayan cawangan, timbul persoalan untuk memantau status replikasi ini.
Secara kebetulan, hampir serta-merta selepas kami mula menggunakan DFSR, kami mula melaksanakan Zabbix dengan matlamat untuk menggantikan zoo sedia ada pelbagai alatan dan membawa pemantauan infrastruktur kepada bentuk yang lebih bermaklumat, lengkap dan logik. Kami akan bercakap tentang menggunakan Zabbix untuk memantau replikasi DFS.
Pertama sekali, kita perlu memutuskan data tentang replikasi DFS yang perlu diperolehi untuk memantau statusnya. Penunjuk yang paling relevan ialah tunggakan. Ia mengandungi fail yang belum disegerakkan dengan ahli kumpulan replikasi yang lain. Anda boleh melihat saiznya menggunakan utiliti dfsrdiag, dipasang dengan peranan DFSR. Dalam keadaan replikasi biasa, saiz tunggakan harus menghampiri sifar. Sehubungan itu, sejumlah besar fail dalam tunggakan menunjukkan masalah dengan replikasi.
Sekarang mengenai bahagian praktikal isu ini.
Untuk memantau saiz tunggakan melalui Ejen Zabbix, kami memerlukan:
- Skrip yang akan menghuraikan output dfsrdiag untuk memberikan nilai saiz tunggakan akhir kepada Zabbix,
- Skrip yang akan menentukan berapa banyak kumpulan replikasi yang terdapat pada pelayan, folder apa yang mereka tiru dan pelayan lain yang disertakan di dalamnya (kami tidak mahu memasukkan semua ini ke dalam Zabbix dengan tangan untuk setiap pelayan, bukan?),
- Menambah skrip ini sebagai UserParameter pada konfigurasi ejen Zabbix untuk panggilan berikutnya daripada pelayan pemantauan,
- Memulakan perkhidmatan ejen Zabbix sebagai pengguna yang mempunyai hak untuk membaca tunggakan,
- Templat untuk Zabbix, di mana pengesanan kumpulan, pemprosesan data yang diterima dan mengeluarkan makluman pada mereka akan dikonfigurasikan.
Penghurai skrip
Untuk menulis parser, saya memilih VBS sebagai bahasa paling universal yang terdapat dalam semua versi Windows Server. Logik skrip adalah mudah: ia menerima nama kumpulan replikasi, folder yang direplikasi, dan nama pelayan menghantar dan menerima melalui baris arahan. Parameter ini kemudiannya dihantar ke dfsrdiag, dan bergantung pada outputnya ia menghasilkan:
Bilangan fail - jika mesej diterima tentang kehadiran fail dalam tunggakan,
0 — jika mesej diterima tentang ketiadaan fail dalam tunggakan (“Tiada Tunggakan”),
-1 - jika mesej ralat diterima dfsrdiag apabila melaksanakan permintaan ("[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
Skrip penemuan
Agar Zabbix dapat menentukan semua kumpulan replikasi yang terdapat pada pelayan dan untuk mengetahui semua parameter yang diperlukan untuk permintaan (nama folder, nama pelayan jiran), kita perlu, pertama, mendapatkan maklumat ini, dan kedua, membentangkannya dalam format yang boleh difahami oleh Zabbix. Format yang difahami oleh alat penemuan kelihatan seperti ini:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
Cara paling mudah untuk mendapatkan maklumat yang kami minati ialah melalui WMI, mengeluarkannya daripada bahagian DfsrReplicationGroupConfig yang sepadan. Akibatnya, skrip dilahirkan yang menjana permintaan kepada WMI dan mengeluarkan senarai kumpulan, folder dan pelayan mereka dalam format yang diperlukan.
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
Saya bersetuju, skrip mungkin tidak bersinar dengan keanggunan kod dan beberapa perkara di dalamnya pasti boleh dipermudahkan, tetapi ia melaksanakan fungsi utamanya - memberikan maklumat tentang parameter kumpulan replikasi dalam format yang boleh difahami oleh Zabbix.
Menambah skrip pada konfigurasi ejen Zabbix
Segala-galanya di sini sangat mudah. Tambahkan baris berikut pada penghujung fail konfigurasi ejen:
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"
Sudah tentu, kami melaraskan laluan ke laluan yang kami mempunyai skrip. Saya meletakkannya dalam folder yang sama di mana ejen dipasang.
Selepas membuat perubahan, mulakan semula perkhidmatan ejen Zabbix.
Menukar pengguna di mana perkhidmatan Ejen Zabbix dijalankan
Bagi menerima maklumat melalui dfsrdiag, utiliti mesti dijalankan di bawah akaun yang mempunyai hak pentadbiran untuk menghantar dan menerima ahli kumpulan replikasi. Perkhidmatan ejen Zabbix, yang dijalankan secara lalai di bawah akaun sistem, tidak akan dapat melaksanakan permintaan sedemikian. Saya mencipta akaun berasingan dalam domain, memberikannya hak pentadbiran pada pelayan yang diperlukan, dan mengkonfigurasi pelayan ini untuk menjalankan perkhidmatan di bawahnya.
Anda boleh pergi dengan cara lain: kerana dfsrdiag, sebenarnya, berfungsi melalui WMI yang sama, maka anda boleh gunakan
Templat pemantauan
Berdasarkan data yang saya terima, saya mencipta templat yang:
- Menjalankan penemuan automatik kumpulan replikasi sekali setiap jam,
- Menyemak saiz tunggakan untuk setiap kumpulan sekali setiap 5 minit,
- Mengandungi pencetus yang mengeluarkan amaran apabila saiz tunggakan untuk mana-mana kumpulan adalah lebih daripada 100 selama 30 minit. Pencetus diterangkan sebagai prototaip yang ditambahkan secara automatik pada kumpulan yang dikesan,
- Membina graf saiz tunggakan untuk setiap kumpulan replikasi.
Anda boleh memuat turun templat untuk Zabbix 2.2
Jumlah
Selepas mengimport templat ke dalam Zabbix dan mencipta akaun dengan hak yang diperlukan, kami hanya perlu menyalin skrip ke pelayan fail yang kami ingin pantau untuk DFSR, tambah dua baris pada konfigurasi ejen padanya dan mulakan semula perkhidmatan ejen Zabbix , menetapkannya untuk dijalankan sebagai akaun yang diingini. Tiada tetapan manual lain diperlukan untuk pemantauan DFSR.
Sumber: www.habr.com