Simpleng pagsubaybay ng DFS Replication sa Zabbix

Pagpapakilala

Sa isang medyo malaki at distributed na imprastraktura na gumagamit ng DFS bilang isang solong punto ng pag-access sa data at DFSR para sa pagtitiklop ng data sa pagitan ng mga sentro ng data at mga server ng sangay, ang tanong ay lumitaw sa pagsubaybay sa katayuan ng pagtitiklop na ito.
Nagkataon, halos kaagad pagkatapos naming simulan ang paggamit ng DFSR, sinimulan naming ipatupad ang Zabbix na may layuning palitan ang umiiral na zoo ng iba't ibang mga tool at dalhin ang pagsubaybay sa imprastraktura sa isang mas nagbibigay-kaalaman, kumpleto at lohikal na anyo. Pag-uusapan natin ang paggamit ng Zabbix upang masubaybayan ang pagtitiklop ng DFS.

Una sa lahat, kailangan nating magpasya kung anong data tungkol sa pagtitiklop ng DFS ang kailangang makuha para masubaybayan ang katayuan nito. Ang pinaka-kaugnay na tagapagpahiwatig ay backlog. Naglalaman ito ng mga file na hindi na-synchronize sa ibang mga miyembro ng pangkat ng pagtitiklop. Maaari mong tingnan ang laki nito gamit ang utility dfsrdiag, na naka-install na may papel na DFSR. Sa isang normal na estado ng pagtitiklop, ang laki ng backlog ay dapat na malapit sa zero. Alinsunod dito, ang malaking bilang ng mga file sa backlog ay nagpapahiwatig ng mga problema sa pagtitiklop.

Ngayon tungkol sa praktikal na bahagi ng isyu.

Upang masubaybayan ang laki ng backlog sa pamamagitan ng Zabbix Agent, kakailanganin namin ang:

  • Script na mag-parse ng output dfsrdiag upang magbigay ng panghuling mga halaga ng laki ng backlog sa Zabbix,
  • Isang script na tutukuyin kung gaano karaming mga pangkat ng pagtitiklop ang mayroon sa server, anong mga folder ang kanilang ginagaya at kung ano ang iba pang mga server na kasama sa kanila (hindi namin nais na ipasok ang lahat ng ito sa Zabbix sa pamamagitan ng kamay para sa bawat server, tama ba?),
  • Ang pagdaragdag ng mga script na ito bilang UserParameter sa configuration ng ahente ng Zabbix para sa kasunod na pagtawag mula sa monitoring server,
  • Pagsisimula ng serbisyo ng ahente ng Zabbix bilang isang user na may karapatang basahin ang backlog,
  • Isang template para sa Zabbix, kung saan ang pagtuklas ng mga pangkat, pagproseso ng natanggap na data at pag-isyu ng mga alerto sa kanila ay mai-configure.

Parser ng script

Upang isulat ang parser, pinili ko ang VBS bilang ang pinaka-unibersal na wika na naroroon sa lahat ng mga bersyon ng Windows Server. Ang lohika ng script ay simple: natatanggap nito ang pangalan ng pangkat ng pagtitiklop, ang kinopya na folder, at ang mga pangalan ng pagpapadala at pagtanggap ng mga server sa pamamagitan ng command line. Ang mga parameter na ito ay ipinapasa sa dfsrdiag, at depende sa output nito ay gumagawa ito ng:
Bilang ng mga file - kung ang isang mensahe ay natanggap tungkol sa pagkakaroon ng mga file sa backlog,
0 β€” kung ang isang mensahe ay natanggap tungkol sa kawalan ng mga file sa backlog (β€œWalang Backlog”),
-1 - kung may natanggap na mensahe ng error dfsrdiag kapag nagsasagawa ng kahilingan ("[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

Discovery script

Upang matukoy ng Zabbix ang lahat ng mga pangkat ng pagtitiklop na naroroon sa server at upang malaman ang lahat ng mga parameter na kinakailangan para sa kahilingan (pangalan ng folder, mga pangalan ng mga kalapit na server), kailangan nating, una, makuha ang impormasyong ito, at pangalawa, ipakita ito sa isang format na naiintindihan ng Zabbix. Ang format na nauunawaan ng tool sa pagtuklas ay ganito:

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

Ang pinakamadaling paraan upang makuha ang impormasyong interesado kami ay sa pamamagitan ng WMI, na inilabas ito mula sa kaukulang mga seksyon ng DfsrReplicationGroupConfig. Bilang resulta, ipinanganak ang isang script na bumubuo ng kahilingan sa WMI at naglalabas ng listahan ng mga grupo, ang kanilang mga folder at server sa kinakailangang format.

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

Sumasang-ayon ako, ang script ay maaaring hindi lumiwanag sa kagandahan ng code at ang ilang mga bagay sa loob nito ay tiyak na mapasimple, ngunit ginagawa nito ang pangunahing function nito - pagbibigay ng impormasyon tungkol sa mga parameter ng mga pangkat ng pagtitiklop sa isang format na naiintindihan ng Zabbix.

Pagdaragdag ng mga script sa configuration ng ahente ng Zabbix

Lahat dito ay sobrang simple. Idagdag ang mga sumusunod na linya sa dulo ng file ng configuration ng ahente:

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"

Siyempre, inaayos namin ang mga landas sa kung saan mayroon kaming mga script. Inilagay ko ang mga ito sa parehong folder kung saan naka-install ang ahente.

Pagkatapos gumawa ng mga pagbabago, i-restart ang serbisyo ng ahente ng Zabbix.

Pagbabago sa user kung saan tumatakbo ang serbisyo ng Zabbix Agent

Upang makatanggap ng impormasyon sa pamamagitan ng dfsrdiag, ang utility ay dapat na patakbuhin sa ilalim ng isang account na may mga karapatang pang-administratibo sa parehong pagpapadala at pagtanggap ng mga miyembro ng pangkat ng pagtitiklop. Ang serbisyo ng ahente ng Zabbix, na tumatakbo bilang default sa ilalim ng system account, ay hindi magagawang isagawa ang naturang kahilingan. Gumawa ako ng hiwalay na account sa domain, binigyan ko ito ng mga karapatang pang-administratibo sa mga kinakailangang server, at na-configure ang serbisyo na tumakbo sa ilalim nito sa mga server na ito.

Maaari kang pumunta sa ibang paraan: dahil dfsrdiag, sa katunayan, gumagana sa parehong WMI, pagkatapos ay maaari mong gamitin paglalarawan, kung paano bigyan ang isang domain account ng mga karapatan na gamitin ito nang hindi nagbibigay ng mga karapatang pang-administratibo, ngunit kung marami kaming mga pangkat ng pagkopya, kung gayon ang pag-isyu ng mga karapatan sa bawat pangkat ay magiging mahirap. Gayunpaman, kung sakaling gusto naming subaybayan ang pagtitiklop ng Dami ng Domain System sa mga controller ng domain, maaaring ito lang ang katanggap-tanggap na opsyon, dahil hindi magandang ideya ang pagbibigay ng mga karapatan sa administrator ng domain sa account ng serbisyo sa pagsubaybay.

Template ng pagsubaybay

Batay sa data na natanggap ko, gumawa ako ng template na:

  • Nagpapatakbo ng awtomatikong pagtuklas ng mga pangkat ng pagtitiklop isang beses bawat oras,
  • Sinusuri ang laki ng backlog para sa bawat pangkat isang beses bawat 5 minuto,
  • Naglalaman ng trigger na nagbibigay ng alerto kapag ang laki ng backlog para sa anumang grupo ay higit sa 100 sa loob ng 30 minuto. Inilalarawan ang trigger bilang isang prototype na awtomatikong idinaragdag sa mga nakitang grupo,
  • Bumubuo ng mga backlog size graph para sa bawat pangkat ng pagtitiklop.

Maaari mong i-download ang template para sa Zabbix 2.2 dito.

Kabuuan

Pagkatapos i-import ang template sa Zabbix at lumikha ng isang account na may mga kinakailangang karapatan, kakailanganin lamang naming kopyahin ang mga script sa mga file server na gusto naming subaybayan para sa DFSR, magdagdag ng dalawang linya sa configuration ng ahente sa mga ito at i-restart ang serbisyo ng ahente ng Zabbix , itinakda ito upang tumakbo bilang ninanais na account. Walang ibang manu-manong setting ang kinakailangan para sa pagsubaybay sa DFSR.

Pinagmulan: www.habr.com

Magdagdag ng komento