Ngawasi prasaja saka Replikasi DFS ing Zabbix

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 katrangan, carane menehi akun domain hak kanggo nggunakake tanpa nerbitake hak administratif, nanging yen kita duwe akeh grup replikasi, banjur nerbitake hak kanggo saben grup bakal angel. Nanging, yen kita pengin ngawasi replikasi Volume Sistem Domain ing pengontrol domain, iki bisa uga dadi siji-sijine pilihan sing bisa ditampa, amarga menehi hak administrator domain menyang akun layanan pemantauan ora apik.

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 kene.

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

Add a comment