Yksinkertainen DFS-replikoinnin valvonta Zabbixissa

Esittely

Melko suuressa ja hajautetussa infrastruktuurissa, joka käyttää DFS:ää yhtenä yhteyspisteenä dataan ja DFSR:ää tietojen replikointiin palvelinkeskusten ja haarapalvelimien välillä, herää kysymys tämän replikaation tilan seurannasta.
Sattumalta melkein heti DFSR:n käytön aloittamisen jälkeen aloimme ottaa Zabbixin käyttöön tavoitteena korvata olemassa oleva eläintarha erilaisilla työkaluilla ja tuoda infrastruktuurin seuranta informatiivisempaan, täydellisempään ja loogisempaan muotoon. Puhumme Zabbixin käyttämisestä DFS-replikaation seuraamiseen.

Ensinnäkin meidän on päätettävä, mitä tietoja DFS-replikaatiosta on hankittava sen tilan seuraamiseksi. Merkittävin indikaattori on ruuhka. Se sisältää tiedostoja, joita ei ole synkronoitu replikointiryhmän muiden jäsenten kanssa. Voit tarkastella sen kokoa apuohjelman avulla dfsrdiag, asennettu DFSR-roolilla. Normaalissa replikointitilassa ruuhkan koon tulisi lähestyä nollaa. Näin ollen suuri määrä tiedostoja ruuhkassa viittaa replikointiongelmiin.

Nyt asian käytännön puolelta.

Jotta voimme valvoa tilauskannan kokoa Zabbix Agentin kautta, tarvitsemme:

  • Komentosarja, joka jäsentää tulosteen dfsrdiag toimittaa lopulliset tilausmäärät Zabbixille,
  • Komentosarja, joka määrittää kuinka monta replikointiryhmää palvelimella on, mitä kansioita ne replikoivat ja mitä muita palvelimia niihin sisältyy (emme halua kirjoittaa kaikkea tätä Zabbixiin käsin jokaiselle palvelimelle, eikö niin?),
  • Lisäämällä nämä komentosarjat UserParameteriksi Zabbix-agentin kokoonpanoon myöhempää kutsumista varten valvontapalvelimelta,
  • Zabbix-agenttipalvelun käynnistäminen käyttäjänä, jolla on oikeus lukea ruuhkaa,
  • Zabbixin malli, jossa ryhmien havaitseminen, vastaanotettujen tietojen käsittely ja niistä hälyttäminen määritetään.

Komentosarjan jäsentäjä

Jäsentimen kirjoittamiseksi valitsin VBS:n yleisimmäksi kieleksi kaikissa Windows Server -versioissa. Komentosarjan logiikka on yksinkertainen: se vastaanottaa komentorivin kautta replikointiryhmän nimen, replikoidun kansion sekä lähettävien ja vastaanottavien palvelimien nimet. Nämä parametrit välitetään sitten dfsrdiag, ja tuotantostaan ​​riippuen se tuottaa:
Tiedostojen määrä - jos vastaanotetaan viesti tiedostojen esiintymisestä ruuhkassa,
0 — jos vastaanotetaan viesti tiedostojen puuttumisesta ruuhkasta ("Ei ruuhkaa"),
-1 - jos vastaanotetaan virheilmoitus dfsrdiag pyyntöä suoritettaessa ("[VIRHE]").

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 käsikirjoitus

Jotta Zabbix voi määrittää kaikki palvelimella olevat replikointiryhmät ja saada selville kaikki pyynnön edellyttämät parametrit (kansion nimi, naapuripalvelinten nimet), meidän on ensinnäkin hankittava nämä tiedot ja toiseksi esitettävä ne Zabbixin ymmärtämässä muodossa. Hakutyökalun ymmärtämä muoto näyttää tältä:

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

...

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

Helpoin tapa saada kiinnostava tieto on WMI:n kautta vetämällä ne DfsrReplicationGroupConfig-ohjelman vastaavista osioista. Tuloksena syntyi komentosarja, joka luo pyynnön WMI:lle ja tulostaa luettelon ryhmistä, niiden kansioista ja palvelimista vaaditussa muodossa.

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

Olen samaa mieltä, skripti ei ehkä loista koodin tyylikkyydestä ja joitain asioita siinä voitaisiin varmasti yksinkertaistaa, mutta se suorittaa päätehtävänsä - antaa tietoa replikointiryhmien parametreista Zabbixin ymmärtämässä muodossa.

Komentosarjojen lisääminen Zabbix-agenttikokoonpanoon

Kaikki täällä on erittäin yksinkertaista. Lisää seuraavat rivit agentin määritystiedoston loppuun:

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"

Tietenkin sovitamme polut niihin, joissa meillä on skriptejä. Laitoin ne samaan kansioon, johon agentti on asennettu.

Kun olet tehnyt muutokset, käynnistä Zabbix-agenttipalvelu uudelleen.

Käyttäjän vaihtaminen, jonka alla Zabbix Agent -palvelu toimii

Saadakseen tietoa kautta dfsrdiag, apuohjelmaa on ajettava tilillä, jolla on järjestelmänvalvojan oikeudet sekä replikointiryhmän lähettäviin että vastaanottaviin jäseniin. Zabbix-agenttipalvelu, joka toimii oletuksena järjestelmätilin alla, ei pysty suorittamaan tällaista pyyntöä. Loin verkkotunnukseen erillisen tilin, annoin sille järjestelmänvalvojan oikeudet tarvittaville palvelimille ja määritin palvelun toimimaan sen alla näillä palvelimilla.

Voit mennä toisella tavalla: koska dfsrdiag, itse asiassa toimii saman WMI:n kautta, niin voit käyttää kuvaus, kuinka antaa verkkotunnuksen tilille käyttöoikeudet ilman järjestelmänvalvojan oikeuksia, mutta jos meillä on useita replikointiryhmiä, oikeuksien myöntäminen jokaiselle ryhmälle on vaikeaa. Jos haluamme kuitenkin valvoa Domain System Volume -replikaatiota toimialueen ohjauskoneissa, tämä saattaa olla ainoa hyväksyttävä vaihtoehto, koska toimialueen järjestelmänvalvojan oikeuksien antaminen valvontapalvelutilille ei ole hyvä idea.

Valvontamalli

Saamieni tietojen perusteella loin mallin, joka:

  • Suorittaa automaattisen replikointiryhmien etsinnän kerran tunnissa,
  • Tarkistaa kunkin ryhmän ruuhkan koon 5 minuutin välein,
  • Sisältää triggerin, joka antaa hälytyksen, kun minkä tahansa ryhmän ruuhkan koko on yli 100 30 minuutin ajan. Laukaisua kuvataan prototyyppinä, joka lisätään automaattisesti havaittuihin ryhmiin,
  • Muodostaa ruuhkan kokokaavioita kullekin toisinnusryhmälle.

Voit ladata mallin Zabbix 2.2:lle täällä.

Koko

Kun olet tuonut mallin Zabbixiin ja luonut tilin tarvittavilla oikeuksilla, meidän tarvitsee vain kopioida komentosarjat tiedostopalvelimille, joita haluamme valvoa DFSR:n varalta, lisätä niihin kaksi riviä agenttimäärityksiin ja käynnistää Zabbix-agenttipalvelu uudelleen. , asettamalla sen toimimaan haluttuna tilinä. Muita manuaalisia asetuksia ei tarvita DFSR-valvontaan.

Lähde: will.com

Lisää kommentti