Einführung
Bei einer ausreichend großen und verteilten Infrastruktur, die DFS als einzigen Zugangspunkt zu Daten und DFSR zur Replikation von Daten zwischen Rechenzentren und Filialservern verwendet, stellt sich die Frage nach der Überwachung des Status dieser Replikation.
Es zufällig so kam, dass wir fast sofort nach der Einführung von DFSR mit der Implementierung von Zabbix begannen, um den vorhandenen Zoo verschiedener Tools zu ersetzen und die Überwachung der Infrastruktur informativer, umfassender und logischer zu gestalten. Dabei wird es um den Einsatz von Zabbix zur Überwachung der DFS-Replikation gehen.
Zunächst müssen wir klären, welche Daten zur DFS-Replikation benötigt werden, um ihren Status zu überwachen. Der relevanteste Indikator ist der Backlog. In diesen fließen Dateien ein, die nicht mit anderen Mitgliedern der Replikationsgruppe synchronisiert wurden. Die Größe kann mit dem Tool dfsrdiageingesehen werden, das zusammen mit der DFSR-Rolle installiert wird. Im normalen Zustand der Replikation sollte die Größe des Backlogs gegen null tendieren. Entsprechend deuten große Werte der Dateizahl im Backlog auf Probleme mit der Replikation hin.
Kommen wir nun zur praktischen Seite der Sache.
Um die Backlog-Größe über den Zabbix-Agenten zu überwachen, benötigen wir:
- Ein Skript, das die Ausgabe analysiert, dfsrdiag um die endgültigen Werte der Backlog-Größe in Zabbix bereitzustellen,
- Ein Skript, das bestimmt, wie viele Replikationsgruppen auf dem Server vorhanden sind, welche Ordner sie replizieren und welche anderen Server dazugehören (wir möchten das nicht manuell für jeden Server in Zabbix eingeben, oder?)
- Integration dieser Skripte als UserParameter in die Konfiguration des Zabbix-Agenten, um sie später vom Überwachungsserver aufzurufen,
- Den Zabbix-Agenten unter einem Benutzer auszuführen, der das Recht hat, die Backlog-Daten zu lesen,
- Eine Vorlage für Zabbix, in der die Entdeckung von Gruppen, die Verarbeitung der erhaltenen Daten und die Ausgabe von Alarme eingerichtet sind.
Parser-Skript
Für das Schreiben des Parsers habe ich VBS gewählt, da es eine universelle Sprache ist, die in allen Versionen von Windows Server verfügbar ist. Die Logik des Skripts ist einfach: Es erhält über die Eingabeaufforderung den Namen der Replikationsgruppe, des replizierten Ordners und die Namen der sendenden und empfangenden Server. Diese Parameter werden dann an dfsrdiag, und je nach Ausgabe wird ausgegeben:
Anzahl der Dateien – falls eine Meldung über die Existenz von Dateien im Backlog empfangen wurde,
0 — wenn die Meldung über fehlende Dateien im Backlog („No Backlog“) erhalten wurde,
-1 — wenn eine Fehlermeldung empfangen wurde dfsrdiag bei der Ausführung der Anfrage ("[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 intBackLogErkennungs-Skript
Damit Zabbix selbst alle Replikationsgruppen auf dem Server erkennt und alle erforderlichen Parameter (Ordnernamen, Nachbar-Servernamen) herausfindet, müssen wir diese Informationen erstens abrufen und zweitens in einem für Zabbix verständlichen Format bereitstellen. Das Format, das das Discovery-Tool versteht, sieht so aus:
"data":[
{
"{#GROUP}":"Share1",
"{#FOLDER}":"Folder1",
"{#SENDING}":"Server1",
"{#RECEIVING}":"Server2"}
...
"{#GROUP}":"ShareN",
"{#FOLDER}":"FolderN",
"{#SENDING}":"Server1",
"{#RECEIVING}":"ServerN"}]}Die benötigten Informationen lassen sich am einfachsten über WMI abrufen, indem man sie aus den entsprechenden Abschnitten von DfsrReplicationGroupConfig extrahiert. So entstand ein Skript, das eine Anfrage an WMI stellt und eine Liste der Gruppen, ihrer Ordner und Server im benötigten Format ausgibt.
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
Ich stimme zu, das Skript glänzt möglicherweise nicht mit eleganter Codequalität und es gibt sicher einige Dinge, die man vereinfachen kann, aber es erfüllt seine Hauptfunktion — die Bereitstellung von Informationen über die Parameter von Replikationsgruppen in einem für Zabbix verständlichen Format — erfolgreich.
Einfügen von Skripten in die Zabbix-Agent-Konfiguration
Hier ist alles ganz einfach. Fügen Sie am Ende der Konfigurationsdatei des Agents folgende Zeilen hinzu:
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"
Die Pfade passen wir selbstverständlich an die Stelle an, an der unsere Skripte liegen. Ich habe sie im selben Ordner gespeichert, in dem der Agent installiert ist.
Nach den Änderungen starten wir den Zabbix-Agent-Dienst neu.
Ändern des Benutzers, unter dem der Zabbix-Agent-Dienst läuft
Um Informationen zu erhalten über dfsrdiag, das Tool muss mit einem Konto gestartet werden, das über Administratorrechte sowohl auf den Sending- als auch auf den Receiving-Mitgliedern der Replikationsgruppe verfügt. Der Zabbix-Agent, der standardmäßig mit dem Systemkonto ausgeführt wird, kann diese Anforderung nicht erfüllen. Ich habe ein separates Konto in der Domäne erstellt, ihm Administratorrechte auf den erforderlichen Servern gegeben und die Dienstausführung auf diesen Servern unter diesem Konto konfiguriert.
Es gibt auch einen anderen Ansatz: da dfsrdiag, im Grunde funktioniert es über dasselbe WMI, kann man , um der Domänenanmeldung Rechte zur Nutzung zu geben, ohne Administratorrechte zu vergeben. Wenn wir jedoch viele Replikationsgruppen haben, wird es schwierig sein, für jede Gruppe Rechte zu vergeben. Im Falle, dass wir die Replikation des Domain System Volume auf den Domaincontrollern überwachen möchten, könnte dies die einzige akzeptable Option sein, da es keine gute Idee ist, der Überwachungsbenutzeranmeldung Domänenadministratorenrechte zu geben.
Überwachungsvorlage
Basierend auf den gesammelten Daten habe ich eine Vorlage erstellt, die:
- einmal pro Stunde die automatische Erkennung der Replikationsgruppen ausführt,
- Überprüft alle 5 Minuten die Größe des Backlogs für jede Gruppe.
- Enthält einen Trigger, der einen Alarm ausgibt, wenn die Größe des Backlogs für eine Gruppe über 100 für 30 Minuten steigt. Der Trigger wird als Prototyp beschrieben, der automatisch zu entdeckten Gruppen hinzugefügt wird.
- Erstellt Grafiken zur Größe des Backlogs für jede Replikationsgruppe.
Das Template für Zabbix 2.2 kann heruntergeladen werden. .
Zusammenfassung
Nach dem Import des Templates in Zabbix und der Erstellung eines Kontos mit den erforderlichen Rechten reicht es aus, die Skripte auf die Dateiserver zu kopieren, die wir hinsichtlich DFSR überwachen möchten, zwei Zeilen in der Konfiguration des Agenten hinzuzufügen und den Zabbix-Agenten-Dienst neu zu starten, wobei wir ihn so konfigurieren, dass er mit dem erforderlichen Konto gestartet wird. Weitere manuelle Anpassungen für die Überwachung von DFSR sind nicht erforderlich.
Quelle: habr.com
