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