Zabbix میں DFS نقل کی سادہ نگرانی

تعارف

کافی بڑے اور تقسیم شدہ انفراسٹرکچر کے ساتھ جو ڈی ایف ایس کو ڈیٹا تک رسائی کے واحد نقطہ کے طور پر استعمال کرتا ہے اور ڈیٹا سینٹرز اور برانچ سرورز کے درمیان ڈیٹا کی نقل کے لیے ڈی ایف ایس آر کا استعمال کرتا ہے، سوال یہ پیدا ہوتا ہے کہ اس نقل کی حیثیت کی نگرانی کی جائے۔
اتفاق سے، ہم نے DFSR کا استعمال شروع کرنے کے تقریباً فوراً بعد، ہم نے مختلف ٹولز کے موجودہ چڑیا گھر کو تبدیل کرنے اور انفراسٹرکچر کی نگرانی کو مزید معلوماتی، مکمل اور منطقی شکل میں لانے کے مقصد کے ساتھ Zabbix کو لاگو کرنا شروع کیا۔ ہم DFS نقل کی نگرانی کے لیے Zabbix استعمال کرنے کے بارے میں بات کریں گے۔

سب سے پہلے، ہمیں یہ فیصلہ کرنے کی ضرورت ہے کہ DFS کی نقل کے بارے میں کون سا ڈیٹا اس کی حیثیت کی نگرانی کے لیے حاصل کرنے کی ضرورت ہے۔ سب سے زیادہ متعلقہ اشارے بیک لاگ ہے۔ اس میں وہ فائلیں شامل ہیں جو نقل گروپ کے دوسرے ممبروں کے ساتھ ہم آہنگ نہیں ہوئی ہیں۔ آپ یوٹیلیٹی کا استعمال کرکے اس کا سائز دیکھ سکتے ہیں۔ dfsrdiag، DFSR رول کے ساتھ انسٹال ہوا۔ عام نقل کی حالت میں، بیک لاگ کا سائز صفر تک پہنچنا چاہیے۔ اس کے مطابق، بیک لاگ میں فائلوں کی بڑی تعداد نقل کے ساتھ مسائل کی نشاندہی کرتی ہے۔

اب مسئلے کے عملی پہلو کے بارے میں۔

Zabbix ایجنٹ کے ذریعے بیک لاگ کے سائز کی نگرانی کرنے کے لیے، ہمیں ضرورت ہو گی:

  • اسکرپٹ جو آؤٹ پٹ کو پارس کرے گی۔ dfsrdiag Zabbix کو آخری بیک لاگ سائز کی اقدار فراہم کرنے کے لیے،
  • ایک اسکرپٹ جو اس بات کا تعین کرے گا کہ سرور پر نقل کے کتنے گروپ ہیں، وہ کون سے فولڈرز کو نقل کرتے ہیں اور ان میں کون سے دوسرے سرور شامل ہیں (ہم یہ سب کچھ ہر سرور کے لیے ہاتھ سے Zabbix میں داخل نہیں کرنا چاہتے، ٹھیک ہے؟)
  • مانیٹرنگ سرور سے آنے والی کالنگ کے لیے زبکس ایجنٹ کنفیگریشن میں ان اسکرپٹس کو بطور UserParameter شامل کرنا،
  • Zabbix ایجنٹ سروس کو ایک صارف کے طور پر شروع کرنا جس کے پاس بیک لاگ پڑھنے کے حقوق ہیں،
  • Zabbix کے لیے ایک ٹیمپلیٹ، جس میں گروپس کا پتہ لگانے، موصول ہونے والے ڈیٹا کی پروسیسنگ اور ان پر الرٹ جاری کرنے کو ترتیب دیا جائے گا۔

اسکرپٹ پارسر

پارسر لکھنے کے لیے، میں نے VBS کو ونڈوز سرور کے تمام ورژنز میں موجود سب سے زیادہ عالمگیر زبان کے طور پر منتخب کیا۔ اسکرپٹ کی منطق آسان ہے: یہ ریپلیکشن گروپ کا نام، نقل شدہ فولڈر، اور کمانڈ لائن کے ذریعے بھیجنے اور وصول کرنے والے سرورز کے نام حاصل کرتا ہے۔ ان پیرامیٹرز کو پھر منتقل کیا جاتا ہے۔ dfsrdiag، اور اس کے آؤٹ پٹ پر منحصر ہے کہ یہ پیدا کرتا ہے:
فائلوں کی تعداد - اگر بیک لاگ میں فائلوں کی موجودگی کے بارے میں کوئی پیغام موصول ہوتا ہے،
0 - اگر بیک لاگ میں فائلوں کی عدم موجودگی کے بارے میں کوئی پیغام موصول ہوتا ہے ("بیک لاگ نہیں")،
-1 - اگر غلطی کا پیغام موصول ہوتا ہے۔ dfsrdiag درخواست پر عمل کرتے وقت ("[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

دریافت اسکرپٹ

Zabbix کے لیے سرور پر موجود تمام نقلی گروپوں کا تعین کرنے اور درخواست کے لیے درکار تمام پیرامیٹرز (فولڈر کا نام، پڑوسی سرورز کے نام) کا پتہ لگانے کے لیے، ہمیں، سب سے پہلے، یہ معلومات حاصل کرنے کی ضرورت ہے، اور دوم، اسے پیش کرنا ہوگا۔ Zabbix کے لیے قابل فہم شکل میں۔ دریافت کا آلہ جس شکل کو سمجھتا ہے وہ اس طرح لگتا ہے:

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

...

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

ہمیں جس معلومات میں دلچسپی ہے اسے حاصل کرنے کا سب سے آسان طریقہ WMI کے ذریعے ہے، اسے DfsrReplicationGroupConfig کے متعلقہ حصوں سے نکالنا ہے۔ نتیجے کے طور پر، ایک اسکرپٹ پیدا ہوا جو 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 کے ذریعہ قابل فہم شکل میں نقل گروپوں کے پیرامیٹرز کے بارے میں معلومات فراہم کرنا۔

زبکس ایجنٹ کنفیگریشن میں اسکرپٹ شامل کرنا

یہاں سب کچھ انتہائی سادہ ہے۔ ایجنٹ کنفیگریشن فائل کے آخر میں درج ذیل لائنیں شامل کریں:

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

نیا تبصرہ شامل کریں