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.
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ää
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
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