pengenalan
Dengan infrastruktur yang cukup besar dan terdistribusi yang menggunakan DFS sebagai satu titik akses data dan DFSR untuk replikasi data antara pusat data dan server cabang, muncul pertanyaan tentang pemantauan status replikasi ini.
Secara kebetulan, segera setelah kami mulai menggunakan DFSR, kami mulai menerapkan Zabbix dengan tujuan menggantikan berbagai alat yang ada di kebun binatang dan membawa pemantauan infrastruktur ke bentuk yang lebih informatif, lengkap, dan logis. Kami akan membahas tentang penggunaan Zabbix untuk memantau replikasi DFS.
Pertama-tama, kita perlu memutuskan data apa tentang replikasi DFS yang perlu diperoleh untuk memantau statusnya. Indikator yang paling relevan adalah backlog. Ini berisi file yang belum disinkronkan dengan anggota grup replikasi lainnya. Anda dapat melihat ukurannya menggunakan utilitas dfsrdiag, diinstal dengan peran DFSR. Dalam keadaan replikasi normal, ukuran backlog harus mendekati nol. Oleh karena itu, sejumlah besar file di backlog menunjukkan masalah replikasi.
Sekarang tentang sisi praktis dari masalah ini.
Untuk memantau ukuran backlog melalui Zabbix Agent, kita memerlukan:
- Script yang akan mengurai output dfsrdiag untuk memberikan nilai ukuran backlog akhir ke Zabbix,
- Sebuah skrip yang akan menentukan berapa banyak grup replikasi yang ada di server, folder apa yang mereka replikasi, dan server lain apa yang disertakan di dalamnya (kami tidak ingin memasukkan semua ini ke Zabbix secara manual untuk setiap server, bukan?),
- Menambahkan skrip ini sebagai UserParameter ke konfigurasi agen Zabbix untuk panggilan selanjutnya dari server pemantauan,
- Memulai layanan agen Zabbix sebagai pengguna yang memiliki hak membaca backlog,
- Templat untuk Zabbix, yang akan mengonfigurasi pendeteksian grup, pemrosesan data yang diterima, dan mengeluarkan peringatan pada grup tersebut.
Pengurai skrip
Untuk menulis parser, saya memilih VBS sebagai bahasa paling universal yang ada di semua versi Windows Server. Logika skrip ini sederhana: ia menerima nama grup replikasi, folder yang direplikasi, dan nama server pengirim dan penerima melalui baris perintah. Parameter ini kemudian diteruskan ke dfsrdiag, dan bergantung pada keluarannya, ia menghasilkan:
Jumlah file - jika pesan diterima tentang keberadaan file di backlog,
0 β jika pesan diterima tentang tidak adanya file di backlog (βTidak Ada Backlogβ),
-1 - jika pesan kesalahan diterima dfsrdiag saat menjalankan permintaan ("[ERROR]").
dapatkan-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 grup replikasi yang ada di server dan mengetahui semua parameter yang diperlukan untuk permintaan tersebut (nama folder, nama server tetangga), pertama-tama kita perlu memperoleh informasi ini, dan kedua, menyajikannya dalam format yang dapat dimengerti oleh Zabbix. Format yang dipahami oleh alat penemuan terlihat seperti ini:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}
Cara termudah untuk mendapatkan informasi yang kami minati adalah melalui WMI, mengambilnya dari bagian DfsrReplicationGroupConfig yang sesuai. Hasilnya, sebuah skrip lahir yang menghasilkan permintaan ke WMI dan menampilkan daftar grup, folder dan servernya 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 setuju, skrip mungkin tidak bersinar dengan keanggunan kode dan beberapa hal di dalamnya tentu dapat disederhanakan, tetapi skrip menjalankan fungsi utamanya - memberikan informasi tentang parameter grup replikasi dalam format yang dapat dimengerti oleh Zabbix.
Menambahkan skrip ke konfigurasi agen Zabbix
Semuanya di sini sangat sederhana. Tambahkan baris berikut ke akhir 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"
Tentu saja, kami menyesuaikan jalurnya dengan jalur yang skripnya kami miliki. Saya meletakkannya di folder yang sama tempat agen diinstal.
Setelah melakukan perubahan, restart layanan agen Zabbix.
Mengubah pengguna di mana layanan Agen Zabbix berjalan
Untuk menerima informasi melalui dfsrdiag, utilitas harus dijalankan di bawah akun yang memiliki hak administratif untuk mengirim dan menerima anggota grup replikasi. Layanan agen Zabbix, yang berjalan secara default pada akun sistem, tidak akan dapat menjalankan permintaan tersebut. Saya membuat akun terpisah di domain tersebut, memberinya hak administratif di server yang diperlukan, dan mengonfigurasi layanan agar berjalan di bawahnya di server ini.
Anda dapat memilih cara lain: karena dfsrdiag, pada kenyataannya, bekerja melalui WMI yang sama, maka Anda dapat menggunakannya
Templat pemantauan
Berdasarkan data yang saya terima, saya membuat template yang:
- Menjalankan penemuan otomatis grup replikasi satu kali per jam,
- Memeriksa ukuran simpanan untuk setiap grup setiap 5 menit sekali,
- Berisi pemicu yang mengeluarkan peringatan ketika ukuran simpanan untuk grup mana pun lebih dari 100 selama 30 menit. Pemicunya digambarkan sebagai prototipe yang secara otomatis ditambahkan ke grup yang terdeteksi,
- Membuat grafik ukuran backlog untuk setiap grup replikasi.
Anda dapat mengunduh template untuk Zabbix 2.2
Total
Setelah mengimpor template ke Zabbix dan membuat akun dengan hak yang diperlukan, kita hanya perlu menyalin skrip ke server file yang ingin kita pantau untuk DFSR, menambahkan dua baris ke konfigurasi agen di dalamnya dan memulai ulang layanan agen Zabbix , mengaturnya agar dijalankan sebagai akun yang diinginkan. Tidak ada pengaturan manual lainnya yang diperlukan untuk pemantauan DFSR.
Sumber: www.habr.com