Pemantauan mudah Replikasi DFS dalam Zabbix

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 penerangan, bagaimana untuk memberi akaun domain hak untuk menggunakannya tanpa mengeluarkan hak pentadbiran, tetapi jika kita mempunyai banyak kumpulan replikasi, maka mengeluarkan hak kepada setiap kumpulan akan menjadi sukar. Walau bagaimanapun, sekiranya kami ingin memantau replikasi Volume Sistem Domain pada pengawal domain, ini mungkin satu-satunya pilihan yang boleh diterima, kerana memberikan hak pentadbir domain kepada akaun perkhidmatan pemantauan bukanlah idea yang baik.

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 di sini.

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

Tambah komen