Zabbixте DFS репликациясынын жөнөкөй мониторинги

тааныштыруу

DFSди берилиштерге жетүүнүн бирдиктүү чекити катары жана маалымат борборлору менен филиалдык серверлердин ортосунда маалыматтарды репликациялоо үчүн DFSR колдонгон жетишээрлик чоң жана бөлүштүрүлгөн инфраструктура менен бул репликациянын абалына мониторинг жүргүзүү маселеси туулат.
Кокустан, биз DFSR колдоно баштагандан кийин, биз ар кандай куралдардын учурдагы зоопарктарын алмаштыруу жана инфраструктуранын мониторингин маалыматтык, толук жана логикалык формага жеткирүү максатында Zabbixти ишке киргизе баштадык. DFS репликациясын көзөмөлдөө үчүн Zabbix колдонуу жөнүндө сүйлөшөбүз.

Биринчиден, биз анын абалын көзөмөлдөө үчүн DFS репликациясы жөнүндө кандай маалыматтарды алуу керектигин чечишибиз керек. Эң актуалдуу көрсөткүч бул артта калуу. Ал репликация тобунун башка мүчөлөрү менен синхрондоштурулган эмес файлдарды камтыйт. Сиз анын өлчөмүн утилитаны колдонуп көрө аласыз dfsrdiag, DFSR ролу менен орнотулган. Кадимки репликация абалында артта калуу көлөмү нөлгө жакын болушу керек. Демек, артта калган файлдардын көп саны репликациядагы көйгөйлөрдү көрсөтүп турат.

Эми маселенин практикалык жагы жөнүндө.

Zabbix Agent аркылуу артта калуу көлөмүн көзөмөлдөө үчүн бизге керек болот:

  • Чыгарууну талдоочу скрипт dfsrdiag Zabbixке акыркы артта калуу өлчөмүн берүү үчүн,
  • Серверде канча репликация тобу бар экенин, алар кандай папкаларды репликациялайт жана аларга дагы кандай серверлер кирерин аныктай турган скрипт (биз мунун баарын Zabbixке ар бир сервер үчүн кол менен киргизгибиз келбейт, туурабы?),
  • Бул скрипттерди UserParameter катары Zabbix агент конфигурациясына мониторинг серверинен кийинки чакыруу үчүн кошуу,
  • Zabbix агент кызматын артта калгандарды окууга укугу бар колдонуучу катары баштап,
  • Zabbix үлгүсү, анда топторду аныктоо, алынган маалыматтарды иштетүү жана алар боюнча эскертүүлөрдү берүү конфигурацияланат.

Скрипт талдоочу

Талдоочуну жазуу үчүн мен Windows Serverтин бардык версияларында бар эң универсалдуу тил катары 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

Discovery скрипт

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 Агент кызматы иштеген колдонуучуну өзгөртүү

аркылуу маалымат алуу үчүн dfsrdiag, утилита репликация тобунун мүчөлөрүн жөнөтүү жана кабыл алуу үчүн административдик укуктарга ээ каттоо эсеби астында иштетилиши керек. Системалык эсептин астында демейки боюнча иштеген Zabbix агент кызматы мындай суроо-талапты аткара албайт. Мен доменде өзүнчө аккаунт түздүм, ага керектүү серверлерде административдик укуктарды бердим жана бул серверлерде анын астында иштөө үчүн кызматты конфигурацияладым.

Башка жол менен кете аласыз: анткени dfsrdiag, чындыгында, ошол эле WMI аркылуу иштейт, анда сиз колдоно аласыз сүрөттөмө, домен эсебине административдик укуктарды бербестен аны пайдалануу укугун кантип берүү керек, бирок бизде көп репликация топтору бар болсо, анда ар бир топко укуктарды берүү кыйынга турат. Бирок, эгерде биз домендик контроллерлерде Домен тутумунун көлөмүнүн репликациясын көзөмөлдөгүбүз келсе, бул бир гана алгылыктуу вариант болушу мүмкүн, анткени мониторинг кызматынын эсебине домен администраторуна укук берүү жакшы идея эмес.

Мониторинг үлгүсү

Мен алган маалыматтардын негизинде, мен шаблон түздүм:

  • Репликация топторунун автоматтык түрдө табылышын саатына бир жолу иштетет,
  • Ар бир топтун артта калган көлөмүн 5 мүнөт сайын бир жолу текшерет,
  • Кайсы бир топтун артта калуу көлөмү 100 мүнөткө 30дөн ашса, эскертүү берүүчү триггерди камтыйт. Триггер аныкталган топторго автоматтык түрдө кошулуучу прототип катары сүрөттөлөт,
  • Ар бир репликация тобу үчүн артта калуу көлөмүнүн графиктерин түзөт.

Zabbix 2.2 үчүн шаблонду жүктөп алсаңыз болот бул жерде.

жыйынтык

Шаблонду Zabbixке импорттоодон жана керектүү укуктарга ээ каттоо эсебин түзгөндөн кийин, биз DFSR үчүн көзөмөлдөгүбүз келген файл серверлерине скрипттерди көчүрүп, алардагы агенттин конфигурациясына эки сап кошуп, Zabbix агент кызматын кайра иштетишибиз керек. , аны каалаган каттоо эсеби катары иштетүү үчүн коюу. DFSR мониторинги үчүн башка кол менен орнотуулар талап кылынбайт.

Source: www.habr.com

Комментарий кошуу