Zabbix-те DFS репликациясының қарапайым мониторингі

Кіріспе

Деректер орталықтары мен салалық серверлер арасында деректерді репликациялау үшін DFSR деректерге қол жеткізудің жалғыз нүктесі ретінде DFS пайдаланатын жеткілікті үлкен және бөлінген инфрақұрылыммен осы репликацияның күйін бақылау мәселесі туындайды.
Кездейсоқ, біз DFSR қолдана бастағаннан кейін дерлік біз әртүрлі құралдардың бар хайуанаттар бағын ауыстыру және инфрақұрылымдық мониторингті неғұрлым ақпаратты, толық және логикалық пішінге келтіру мақсатында Zabbix-ті іске асыра бастадық. Біз DFS репликациясын бақылау үшін Zabbix пайдалану туралы айтатын боламыз.

Ең алдымен, біз оның күйін бақылау үшін DFS репликациясы туралы қандай деректерді алу керектігін шешуіміз керек. Ең маңызды көрсеткіш – артта қалу. Онда репликация тобының басқа мүшелерімен үндестірілмеген файлдар бар. Оның өлшемін қызметтік бағдарлама арқылы көруге болады dfsrdiag, DFSR рөлімен орнатылған. Қалыпты репликация күйінде артта қалу өлшемі нөлге жақындауы керек. Сәйкесінше, артта қалған файлдардың үлкен саны репликацияға қатысты мәселелерді көрсетеді.

Енді мәселенің практикалық жағы туралы.

Zabbix Agent арқылы артта қалу көлемін бақылау үшін бізге қажет:

  • Шығаруды талдайтын сценарий dfsrdiag Zabbix-ке соңғы артта қалу өлшемінің мәндерін беру үшін,
  • Серверде қанша репликация тобы бар екенін, олар қандай қалталарды көшіретінін және оларға қандай басқа серверлер кіретінін анықтайтын сценарий (біз мұның бәрін Zabbix-ке әр сервер үшін қолмен енгізгіміз келмейді, солай ма?),
  • Бұл сценарийлерді UserParameter ретінде бақылау серверінен кейінгі қоңыраулар үшін Zabbix агент конфигурациясына қосу,
  • Zabbix агент қызметін артта қалған тізімді оқуға құқығы бар пайдаланушы ретінде іске қосу,
  • Zabbix үлгісі, онда топтарды анықтау, алынған деректерді өңдеу және олар бойынша ескертулер беру конфигурацияланатын болады.

Сценарий талдаушысы

Талдаушы жазу үшін мен Windows серверінің барлық нұсқаларында бар ең әмбебап тіл ретінде 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 түсінетін форматта репликация топтарының параметрлері туралы ақпаратты береді.

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

пікір қалдыру