Vienkārša DFS replikācijas uzraudzība programmā Zabbix

Ievads

Ar diezgan lielu un izkliedētu infrastruktūru, kas izmanto DFS kā vienotu piekļuves punktu datiem un DFSR datu replikācijai starp datu centriem un filiāles serveriem, rodas jautājums par šīs replikācijas statusa uzraudzību.
Nejaušība ir tāda, ka gandrīz uzreiz pēc DFSR lietošanas sākšanas mēs sākām ieviest Zabbix ar mērķi aizstāt esošo dažādu rīku zoodārzu un padarīt infrastruktūras uzraudzību informatīvākā, pilnīgākā un loģiskākā formā. Mēs runāsim par Zabbix izmantošanu, lai uzraudzītu DFS replikāciju.

Pirmkārt, mums ir jāizlemj, kādi dati par DFS replikāciju ir jāiegūst, lai uzraudzītu tā statusu. Visatbilstošākais rādītājs ir neizpildītie rādītāji. Tajā ir faili, kas nav sinhronizēti ar citiem replikācijas grupas dalībniekiem. Varat skatīt tā lielumu, izmantojot utilītu dfsrdiag, kas instalēta ar DFSR lomu. Parastā replikācijas stāvoklī atlikumu apjomam vajadzētu tuvoties nullei. Attiecīgi liels failu skaits neizpildītajā programmā norāda uz problēmām ar replikāciju.

Tagad par jautājuma praktisko pusi.

Lai, izmantojot Zabbix Agent, pārraudzītu neizpildītā apjoma lielumu, mums būs nepieciešams:

  • Skripts, kas parsēs izvadi dfsrdiag nodrošināt Zabbix galīgās neizpildītās summas vērtības,
  • Skripts, kas noteiks, cik replikācijas grupu ir serverī, kādas mapes tās replicē un kādi citi serveri tajās ir iekļauti (mēs nevēlamies to visu ievadīt Zabbix ar roku katram serverim, vai ne?)
  • Šo skriptu pievienošana kā UserParameter Zabbix aģenta konfigurācijai turpmākai izsaukšanai no uzraudzības servera,
  • Palaižot Zabbix aģenta pakalpojumu kā lietotājam, kuram ir tiesības lasīt neizpildīto informāciju,
  • Zabbix veidne, kurā tiks konfigurēta grupu noteikšana, saņemto datu apstrāde un brīdinājumu izsniegšana par tām.

Skriptu parsētājs

Lai rakstītu parsētāju, es izvēlējos VBS kā universālāko valodu visās Windows Server versijās. Skripta loģika ir vienkārša: tas saņem replikācijas grupas nosaukumu, replicēto mapi un sūtīšanas un saņemšanas serveru nosaukumus, izmantojot komandrindu. Pēc tam šie parametri tiek nodoti dfsrdiag, un atkarībā no izlaides tas ražo:
Failu skaits - ja tiek saņemts ziņojums par failu esamību atpalicībā,
0 — ja tiek saņemts ziņojums par failu neesamību uzkrājumos (“Nav atpalicības”),
-1 - ja tiek saņemts kļūdas ziņojums dfsrdiag izpildot pieprasījumu ("[KĻŪDA]").

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

Atklāšanas skripts

Lai Zabbix varētu noteikt visas serverī esošās replikācijas grupas un noskaidrot visus pieprasījumam nepieciešamos parametrus (mapes nosaukumu, blakus esošo serveru nosaukumus), mums, pirmkārt, ir jāiegūst šī informācija un, otrkārt, tā jāuzrāda. Zabbix saprotamā formātā. Formāts, ko saprot atklāšanas rīks, izskatās šādi:

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

...

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

Vienkāršākais veids, kā iegūt mūs interesējošo informāciju, ir WMI, izvelkot to no attiecīgajām DfsrReplicationGroupConfig sadaļām. Rezultātā radās skripts, kas ģenerē pieprasījumu WMI un izvada grupu, to mapju un serveru sarakstu vajadzīgajā formātā.

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

Piekrītu, skripts var nespīdēt ar koda eleganci un dažas lietas tajā noteikti varētu vienkāršot, taču tas pilda savu galveno funkciju - sniedz informāciju par replikācijas grupu parametriem Zabbix saprotamā formātā.

Skriptu pievienošana Zabbix aģenta konfigurācijai

Šeit viss ir ārkārtīgi vienkārši. Aģenta konfigurācijas faila beigās pievienojiet šādas rindiņas:

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"

Protams, mēs pielāgojam ceļus tiem, kur mums ir skripti. Es ievietoju tos tajā pašā mapē, kurā ir instalēts aģents.

Pēc izmaiņu veikšanas restartējiet Zabbix aģenta pakalpojumu.

Lietotāja maiņa, ar kuru darbojas Zabbix Agent pakalpojums

Lai saņemtu informāciju caur dfsrdiag, utilīta ir jāpalaiž kontā, kuram ir administratīvās tiesības gan replikācijas grupas sūtītājiem, gan saņēmējiem. Zabbix aģenta pakalpojums, kas pēc noklusējuma darbojas sistēmas kontā, nevarēs izpildīt šādu pieprasījumu. Es izveidoju atsevišķu kontu domēnā, piešķīru tam administratīvās tiesības nepieciešamajos serveros un konfigurēju pakalpojumu, lai tas darbotos šajos serveros.

Jūs varat iet citu ceļu: tāpēc, ka dfsrdiag, patiesībā, darbojas caur to pašu WMI, tad varat izmantot apraksts, kā piešķirt domēna kontam lietošanas tiesības, neizsniedzot administratīvās tiesības, bet, ja mums ir daudz replikācijas grupu, tad tiesību izsniegšana katrai grupai būs sarežģīta. Tomēr, ja vēlamies pārraudzīt domēna sistēmas apjoma replikāciju domēna kontrolleros, šī var būt vienīgā pieņemamā iespēja, jo domēna administratora tiesību piešķiršana uzraudzības pakalpojuma kontam nav laba ideja.

Uzraudzības veidne

Pamatojoties uz saņemtajiem datiem, es izveidoju veidni, kas:

  • Reizi stundā veic automātisku replikācijas grupu atrašanu,
  • Reizi 5 minūtēs pārbauda katras grupas neizpildīto apjomu,
  • Ietver aktivizētāju, kas izdod brīdinājumu, ja jebkuras grupas neizpildītās summas lielums ir lielāks par 100 30 minūtēm. Trigeris ir aprakstīts kā prototips, kas tiek automātiski pievienots atklātajām grupām,
  • Katrai replikācijas grupai izveido neizpildīto uzkrājumu lieluma diagrammas.

Varat lejupielādēt veidni Zabbix 2.2 šeit.

Kopsavilkums

Pēc veidnes importēšanas Zabbix un konta ar nepieciešamajām tiesībām izveidošanas mums būs tikai jākopē skripti uz failu serveriem, kurus vēlamies pārraudzīt DFSR, jāpievieno divas rindas aģenta konfigurācijai un jārestartē Zabbix aģenta pakalpojums. , iestatot to darboties kā vēlamo kontu. DFSR uzraudzībai nav nepieciešami citi manuāli iestatījumi.

Avots: www.habr.com