Zabbix இல் DFS ரெப்ளிகேஷனின் எளிய கண்காணிப்பு

அறிமுகம்

தரவு மையங்கள் மற்றும் கிளைச் சேவையகங்களுக்கிடையில் தரவு நகலெடுப்பதற்கு DFS மற்றும் தரவுக்கான அணுகல் ஒரு ஒற்றை புள்ளியாக DFS ஐப் பயன்படுத்தும் மிகப் பெரிய மற்றும் விநியோகிக்கப்பட்ட உள்கட்டமைப்புடன், இந்தப் பிரதியின் நிலையைக் கண்காணிக்கும் கேள்வி எழுகிறது.
தற்செயலாக, நாங்கள் DFSR ஐப் பயன்படுத்தத் தொடங்கிய உடனேயே, தற்போதுள்ள பல்வேறு கருவிகளின் உயிரியல் பூங்காவை மாற்றுவது மற்றும் உள்கட்டமைப்பு கண்காணிப்பை மிகவும் தகவலறிந்த, முழுமையான மற்றும் தர்க்கரீதியான வடிவத்திற்கு கொண்டு வருவதற்கான குறிக்கோளுடன் Zabbix ஐ செயல்படுத்தத் தொடங்கினோம். DFS பிரதிகளை கண்காணிக்க Zabbix ஐப் பயன்படுத்துவதைப் பற்றி பேசுவோம்.

முதலில், DFS நகலெடுப்பின் நிலையைக் கண்காணிக்க அதைப் பற்றிய எந்தத் தரவைப் பெற வேண்டும் என்பதை நாம் தீர்மானிக்க வேண்டும். மிகவும் பொருத்தமான காட்டி பேக்லாக் ஆகும். பிரதி குழுவின் மற்ற உறுப்பினர்களுடன் ஒத்திசைக்கப்படாத கோப்புகள் இதில் உள்ளன. பயன்பாட்டைப் பயன்படுத்தி அதன் அளவைக் காணலாம் dfsrdiag, DFSR பாத்திரத்துடன் நிறுவப்பட்டது. ஒரு சாதாரண பிரதி நிலையில், பேக்லாக் அளவு பூஜ்ஜியத்தை நெருங்க வேண்டும். அதன்படி, பின்னிணைப்பில் உள்ள அதிக எண்ணிக்கையிலான கோப்புகள் நகலெடுப்பதில் உள்ள சிக்கல்களைக் குறிக்கின்றன.

இப்போது பிரச்சினையின் நடைமுறை பக்கத்தைப் பற்றி.

ஜாபிக்ஸ் ஏஜென்ட் மூலம் பேக்லாக் அளவைக் கண்காணிக்க, எங்களுக்கு இது தேவைப்படும்:

  • வெளியீட்டை அலசும் ஸ்கிரிப்ட் dfsrdiag Zabbix க்கு இறுதி பேக்லாக் அளவு மதிப்புகளை வழங்க,
  • சர்வரில் எத்தனை பிரதிக் குழுக்கள் உள்ளன, அவை என்னென்ன கோப்புறைகளைப் பிரதியெடுக்கின்றன மற்றும் எந்தெந்த சேவையகங்கள் அவற்றில் சேர்க்கப்பட்டுள்ளன என்பதைத் தீர்மானிக்கும் ஒரு ஸ்கிரிப்ட் (ஒவ்வொரு சேவையகத்திற்கும் கையால் Zabbix இல் இதையெல்லாம் உள்ளிட விரும்பவில்லை, இல்லையா?),
  • கண்காணிப்பு சேவையகத்திலிருந்து வரும் அழைப்பிற்காக, Zabbix முகவர் கட்டமைப்பில் இந்த ஸ்கிரிப்ட்களை UserParameter ஆகச் சேர்ப்பது,
  • பின்னிணைப்பைப் படிக்க உரிமையுள்ள பயனராக Zabbix முகவர் சேவையைத் தொடங்குதல்,
  • Zabbix க்கான டெம்ப்ளேட், இதில் குழுக்களைக் கண்டறிதல், பெறப்பட்ட தரவை செயலாக்குதல் மற்றும் அவற்றில் விழிப்பூட்டல்களை வழங்குதல் ஆகியவை கட்டமைக்கப்படும்.

ஸ்கிரிப்ட் பாகுபடுத்தி

பாகுபடுத்தி எழுத, விண்டோஸ் சர்வரின் அனைத்து பதிப்புகளிலும் உள்ள உலகளாவிய மொழியாக VBS ஐத் தேர்ந்தெடுத்தேன். ஸ்கிரிப்ட்டின் தர்க்கம் எளிதானது: இது பிரதி குழுவின் பெயர், பிரதி செய்யப்பட்ட கோப்புறை மற்றும் கட்டளை வரி வழியாக அனுப்பும் மற்றும் பெறும் சேவையகங்களின் பெயர்களைப் பெறுகிறது. இந்த அளவுருக்கள் பின்னர் அனுப்பப்படும் dfsrdiag, மற்றும் அதன் வெளியீட்டைப் பொறுத்து அது உற்பத்தி செய்கிறது:
கோப்புகளின் எண்ணிக்கை - பேக்லாக்கில் கோப்புகள் இருப்பதாக செய்தி வந்தால்,
0 — பேக்லாக்கில் கோப்புகள் இல்லாதது பற்றி ஒரு செய்தி வந்தால் ("பேக்லாக் இல்லை"),
-1 - பிழை செய்தி வந்தால் dfsrdiag கோரிக்கையை நிறைவேற்றும் போது ("[பிழை]").

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

கண்டுபிடிப்பு ஸ்கிரிப்ட்

Zabbix சேவையகத்தில் உள்ள அனைத்து பிரதி குழுக்களையும் தீர்மானிக்க மற்றும் கோரிக்கைக்கு தேவையான அனைத்து அளவுருக்களையும் (கோப்புறை பெயர், அண்டை சேவையகங்களின் பெயர்கள்) கண்டறிய, முதலில், இந்த தகவலைப் பெற வேண்டும், இரண்டாவதாக, அதை வழங்க வேண்டும். Zabbix க்கு புரிந்துகொள்ளக்கூடிய வடிவத்தில். கண்டுபிடிப்பு கருவி புரிந்துகொள்ளும் வடிவம் இதுபோல் தெரிகிறது:

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

...

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

DfsrReplicationGroupConfig இன் தொடர்புடைய பிரிவுகளில் இருந்து அதை வெளியே எடுப்பது WMI மூலம் நாங்கள் ஆர்வமாக உள்ள தகவலைப் பெறுவதற்கான எளிதான வழி. இதன் விளைவாக, ஒரு ஸ்கிரிப்ட் பிறந்தது, இது WMI க்கு ஒரு கோரிக்கையை உருவாக்குகிறது மற்றும் குழுக்கள், அவற்றின் கோப்புறைகள் மற்றும் சேவையகங்களின் பட்டியலை தேவையான வடிவத்தில் வெளியிடுகிறது.

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

நான் ஒப்புக்கொள்கிறேன், ஸ்கிரிப்ட் குறியீட்டின் நேர்த்தியுடன் பிரகாசிக்காமல் இருக்கலாம் மற்றும் அதில் உள்ள சில விஷயங்கள் நிச்சயமாக எளிமைப்படுத்தப்படலாம், ஆனால் அது அதன் முக்கிய செயல்பாட்டை செய்கிறது - Zabbix ஆல் புரிந்துகொள்ளக்கூடிய வடிவத்தில் பிரதி குழுக்களின் அளவுருக்கள் பற்றிய தகவல்களை வழங்குகிறது.

Zabbix முகவர் கட்டமைப்பில் ஸ்கிரிப்ட்களைச் சேர்த்தல்

இங்கே எல்லாம் மிகவும் எளிமையானது. முகவர் உள்ளமைவு கோப்பின் முடிவில் பின்வரும் வரிகளைச் சேர்க்கவும்:

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"

நிச்சயமாக, எங்களிடம் ஸ்கிரிப்டுகள் இருக்கும் பாதைகளை நாங்கள் சரிசெய்கிறோம். முகவர் நிறுவப்பட்ட அதே கோப்புறையில் அவற்றை வைத்தேன்.

மாற்றங்களைச் செய்த பிறகு, Zabbix முகவர் சேவையை மீண்டும் தொடங்கவும்.

Zabbix முகவர் சேவை இயங்கும் பயனரை மாற்றுகிறது

மூலம் தகவல் பெறுவதற்காக dfsrdiag, நகலெடுக்கும் குழுவின் உறுப்பினர்களை அனுப்புவதற்கும் பெறுவதற்கும் நிர்வாக உரிமைகளைக் கொண்ட ஒரு கணக்கின் கீழ் பயன்பாடு இயக்கப்பட வேண்டும். கணினி கணக்கின் கீழ் இயல்பாக இயங்கும் Zabbix முகவர் சேவை, அத்தகைய கோரிக்கையை செயல்படுத்த முடியாது. டொமைனில் ஒரு தனி கணக்கை உருவாக்கி, அதற்கு தேவையான சர்வர்களில் நிர்வாக உரிமைகளை கொடுத்து, இந்த சர்வர்களில் அதன் கீழ் இயங்கும் வகையில் சேவையை உள்ளமைத்தேன்.

நீங்கள் வேறு வழியில் செல்லலாம்: ஏனெனில் dfsrdiag, உண்மையில், அதே WMI மூலம் செயல்படுகிறது, பிறகு நீங்கள் பயன்படுத்தலாம் விளக்கம், ஒரு டொமைன் கணக்கிற்கு நிர்வாக உரிமைகளை வழங்காமல் அதைப் பயன்படுத்துவதற்கான உரிமைகளை எவ்வாறு வழங்குவது, ஆனால் எங்களிடம் பல பிரதி குழுக்கள் இருந்தால், ஒவ்வொரு குழுவிற்கும் உரிமைகளை வழங்குவது கடினமாக இருக்கும். இருப்பினும், டொமைன் சிஸ்டம் வால்யூம் நகலெடுப்பதை டொமைன் கன்ட்ரோலர்களில் நாம் கண்காணிக்க விரும்பினால், இது மட்டுமே ஏற்றுக்கொள்ளக்கூடிய விருப்பமாக இருக்கலாம், ஏனெனில் கண்காணிப்பு சேவைக் கணக்கிற்கு டொமைன் நிர்வாகி உரிமைகளை வழங்குவது நல்ல யோசனையல்ல.

கண்காணிப்பு வார்ப்புரு

நான் பெற்ற தரவுகளின் அடிப்படையில், நான் ஒரு டெம்ப்ளேட்டை உருவாக்கினேன்:

  • ஒரு மணி நேரத்திற்கு ஒருமுறை பிரதி குழுக்களின் தானியங்கி கண்டுபிடிப்பை இயக்குகிறது,
  • ஒவ்வொரு குழுவிற்கும் 5 நிமிடங்களுக்கு ஒருமுறை பேக்லாக் அளவை சரிபார்க்கிறது,
  • எந்தவொரு குழுவிற்கும் 100 நிமிடங்களுக்கு 30க்கு மேல் பேக்லாக் அளவு இருக்கும்போது விழிப்பூட்டலை வழங்கும் தூண்டுதலைக் கொண்டுள்ளது. தூண்டுதல் கண்டறியப்பட்ட குழுக்களில் தானாகவே சேர்க்கப்படும் முன்மாதிரியாக விவரிக்கப்படுகிறது,
  • ஒவ்வொரு பிரதி குழுவிற்கும் பேக்லாக் அளவு வரைபடங்களை உருவாக்குகிறது.

Zabbix 2.2க்கான டெம்ப்ளேட்டை நீங்கள் பதிவிறக்கலாம் இங்கே.

இதன் விளைவாக

டெம்ப்ளேட்டை Zabbix இல் இறக்குமதி செய்து, தேவையான உரிமைகளுடன் கணக்கை உருவாக்கிய பிறகு, DFSR க்காக நாம் கண்காணிக்க விரும்பும் கோப்பு சேவையகங்களுக்கு ஸ்கிரிப்ட்களை நகலெடுத்து, அவற்றில் உள்ள முகவர் உள்ளமைவில் இரண்டு வரிகளைச் சேர்த்து, Zabbix முகவர் சேவையை மறுதொடக்கம் செய்ய வேண்டும். , விரும்பிய கணக்கை இயக்கும்படி அமைக்கவும். DFSR கண்காணிப்புக்கு வேறு கையேடு அமைப்புகள் தேவையில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்