Мониторинги оддии DFS Replication дар Zabbix

Муқаддима

Бо инфрасохтори хеле калон ва тақсимшуда, ки DFS-ро ҳамчун нуқтаи ягонаи дастрасӣ ба додаҳо ва DFSR барои такрори маълумот байни марказҳои додаҳо ва серверҳои филиал истифода мебарад, саволи мониторинги ҳолати ин репликатсия ба миён меояд.
Тасодуфан, қариб дарҳол пас аз оғози истифодаи DFSR, мо татбиқи Zabbix-ро бо мақсади иваз кардани зоопаркҳои мавҷудаи асбобҳои гуногун ва расонидани мониторинги инфрасохтор ба шакли иттилоотӣ, мукаммал ва мантиқӣ оғоз кардем. Мо дар бораи истифодаи Zabbix барои назорат кардани такрори DFS сӯҳбат хоҳем кард.

Пеш аз ҳама, мо бояд муайян кунем, ки кадом маълумотро дар бораи такрори DFS барои назорат кардани ҳолати он ба даст овардан лозим аст. Нишондиҳандаи аз ҳама мувофиқ ин кафомонӣ мебошад. Он дорои файлҳое мебошад, ки бо дигар аъзоёни гурӯҳи такрорӣ ҳамоҳанг карда нашудаанд. Шумо метавонед андозаи онро бо истифода аз утилита бинед dfsrdiag, бо нақши DFSR насб карда шудааст. Дар ҳолати такрории муқаррарӣ, андозаи пасмонда бояд ба сифр наздик шавад. Мутаносибан, шумораи зиёди файлҳо дар пасмонда мушкилоти такрориро нишон медиҳанд.

Акнун дар бораи тарафи амалии масъала.

Барои назорат кардани андозаи пасмонда тавассути Zabbix Agent, ба мо лозим аст:

  • Скрипт, ки баромадро таҳлил мекунад dfsrdiag барои пешниҳоди арзишҳои ниҳоии андозаи пасмонда ба Zabbix,
  • Скрипт, ки дар сервер чанд гурӯҳи такрорӣ мавҷуд аст, кадом ҷузвдонҳоро такрор мекунанд ва кадом серверҳои дигар ба онҳо дохил мешаванд (мо намехоҳем ҳамаи инро ба Zabbix дастӣ барои ҳар як сервер ворид кунем, ҳамин тавр не?),
  • Илова кардани ин скриптҳо ҳамчун UserParameter ба конфигуратсияи агенти Zabbix барои занги минбаъда аз сервери мониторинг,
  • Оғоз кардани хидмати агенти Zabbix ҳамчун корбаре, ки ҳуқуқи хондани қафоро дорад,
  • Шаблон барои Zabbix, ки дар он муайян кардани гурӯҳҳо, коркарди маълумоти гирифташуда ва додани огоҳиҳо дар бораи онҳо танзим карда мешавад.

Таҳлилгари скрипт

Барои навиштани таҳлилгар, ман VBS-ро ҳамчун забони универсалтарин дар ҳама версияҳои Windows Server интихоб кардам. Мантиқи скрипт оддӣ аст: он номи гурӯҳи такрорӣ, ҷузвдони такрорӣ ва номи серверҳои ирсолкунанда ва қабулкунандаро тавассути сатри фармон қабул мекунад. Пас аз ин параметрҳо ба он интиқол дода мешаванд 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 фаҳмо аст.

Илова кардани скриптҳо ба конфигуратсияи агенти 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 Agent кор мекунад

Барои гирифтани маълумот тавассути dfsrdiag, утилита бояд дар зери суратҳисобе иҷро шавад, ки ҳуқуқи маъмуриро ҳам барои фиристодан ва ҳам қабул кардани аъзои гурӯҳи такрорӣ дорад. Хидмати агенти Zabbix, ки бо нобаёнӣ дар зери ҳисоби система кор мекунад, наметавонад чунин дархостро иҷро кунад. Ман дар домен ҳисоби алоҳида таъсис додам, ба он ҳуқуқҳои маъмуриро дар серверҳои зарурӣ додам ва хидматро танзим кардам, ки зери он дар ин серверҳо кор кунад.

Шумо метавонед бо роҳи дигар равед: зеро dfsrdiag, дар асл, тавассути ҳамон WMI кор мекунад, пас шумо метавонед истифода баред тавсиф, чӣ гуна ба ҳисоби домен ҳуқуқи истифодаи онро бидуни додани ҳуқуқи маъмурӣ додан мумкин аст, аммо агар мо гурӯҳҳои такрории зиёд дошта бошем, пас додани ҳуқуқ ба ҳар як гурӯҳ душвор хоҳад буд. Аммо, агар мо мехоҳем, ки такрори ҳаҷми системаи доменро дар контроллерҳои домен назорат кунем, ин метавонад ягона варианти қобили қабул бошад, зеро додани ҳуқуқи мудири домен ба ҳисоби хидматрасонии мониторинг фикри хуб нест.

Шаблон мониторинги

Дар асоси маълумоте, ки ман гирифтам, ман як қолаберо сохтам, ки:

  • Дар як соат як маротиба кашфи автоматии гурӯҳҳои такрориро иҷро мекунад,
  • Андозаи кафомондаро барои ҳар як гурӯҳ як маротиба дар 5 дақиқа тафтиш мекунад,
  • Як триггерро дар бар мегирад, ки ҳушдор медиҳад, вақте ки андозаи пасмонда барои ҳар як гурӯҳ аз 100 барои 30 дақиқа зиёд аст. Триггер ҳамчун прототип тавсиф карда мешавад, ки ба таври худкор ба гурӯҳҳои ошкоршуда илова карда мешавад,
  • Барои ҳар як гурӯҳи такрорӣ графикҳои андозаи пасмондаро месозад.

Шумо метавонед қолабро барои Zabbix 2.2 зеркашӣ кунед дар ин ҷо.

Натиҷа

Пас аз ворид кардани қолаб ба Zabbix ва эҷод кардани ҳисоб бо ҳуқуқҳои зарурӣ, мо танҳо бояд скриптҳоро ба серверҳои файлие, ки мо мехоҳем барои DFSR назорат кунем, нусхабардорӣ кунем, ба конфигуратсияи агент дар онҳо ду сатр илова кунем ва хидмати агенти Zabbix-ро аз нав оғоз кунем. , танзим кардани он ҳамчун ҳисоби дилхоҳ кор кунад. Барои мониторинги DFSR дигар танзимоти дастӣ лозим нест.

Манбаъ: will.com

Илова Эзоҳ