Εισαγωγή
Με μια αρκετά μεγάλη και κατανεμημένη υποδομή που χρησιμοποιεί το DFS ως ενιαίο σημείο πρόσβασης στα δεδομένα και το DFSR για αναπαραγωγή δεδομένων μεταξύ κέντρων δεδομένων και διακομιστών υποκαταστημάτων, τίθεται το ερώτημα της παρακολούθησης της κατάστασης αυτής της αναπαραγωγής.
Συμπτωματικά, σχεδόν αμέσως μετά την έναρξη χρήσης του DFSR, ξεκινήσαμε την εφαρμογή του Zabbix με στόχο να αντικαταστήσουμε τον υπάρχοντα ζωολογικό κήπο με διάφορα εργαλεία και να φέρουμε την παρακολούθηση της υποδομής σε μια πιο ενημερωτική, πλήρη και λογική μορφή. Θα μιλήσουμε για τη χρήση του Zabbix για την παρακολούθηση της αναπαραγωγής του DFS.
Πρώτα απ 'όλα, πρέπει να αποφασίσουμε ποια δεδομένα σχετικά με την αναπαραγωγή του DFS πρέπει να ληφθούν για την παρακολούθηση της κατάστασής του. Ο πιο σχετικός δείκτης είναι η εκκρεμότητα. Περιέχει αρχεία που δεν έχουν συγχρονιστεί με άλλα μέλη της ομάδας αναπαραγωγής. Μπορείτε να δείτε το μέγεθός του χρησιμοποιώντας το βοηθητικό πρόγραμμα dfsrdiag, εγκατεστημένο με το ρόλο DFSR. Σε μια κανονική κατάσταση αναπαραγωγής, το μέγεθος του ανεκτέλετου θα πρέπει να πλησιάζει το μηδέν. Αντίστοιχα, μεγάλος αριθμός αρχείων στο backlog υποδηλώνει προβλήματα με την αναπαραγωγή.
Τώρα για την πρακτική πλευρά του θέματος.
Για να παρακολουθήσουμε το μέγεθος του ανεκτέλετου μέσω του Zabbix Agent, θα χρειαστούμε:
- Σενάριο που θα αναλύει την έξοδο dfsrdiag για την παροχή τελικών τιμών ανεκτέλεστου μεγέθους στο Zabbix,
- Ένα σενάριο που θα καθορίσει πόσες ομάδες αναπαραγωγής υπάρχουν στον διακομιστή, ποιους φακέλους αναπαράγουν και ποιους άλλους διακομιστές περιλαμβάνονται σε αυτούς (δεν θέλουμε να τα εισάγουμε όλα αυτά στο Zabbix με το χέρι για κάθε διακομιστή, σωστά;),
- Προσθέτοντας αυτά τα σενάρια ως UserParameter στη διαμόρφωση του πράκτορα Zabbix για επακόλουθη κλήση από τον διακομιστή παρακολούθησης,
- Ξεκινώντας την υπηρεσία πράκτορα Zabbix ως χρήστης που έχει δικαιώματα ανάγνωσης του ανεκτέλετου,
- Ένα πρότυπο για το Zabbix, στο οποίο θα διαμορφωθεί ο εντοπισμός ομάδων, η επεξεργασία των δεδομένων που λαμβάνονται και η έκδοση ειδοποιήσεων σε αυτές.
Αναλυτής σεναρίων
Για να γράψω τον αναλυτή, επέλεξα τη VBS ως την πιο καθολική γλώσσα που υπάρχει σε όλες τις εκδόσεις του Windows Server. Η λογική του σεναρίου είναι απλή: λαμβάνει το όνομα της ομάδας αναπαραγωγής, τον αναπαραγόμενο φάκελο και τα ονόματα των διακομιστών αποστολής και λήψης μέσω της γραμμής εντολών. Αυτές οι παράμετροι μεταβιβάζονται στη συνέχεια σε dfsrdiagκαι ανάλογα με την παραγωγή του παράγει:
Αριθμός αρχείων - εάν ληφθεί ένα μήνυμα σχετικά με την παρουσία αρχείων στο ανεκτέλεστο αρχείο,
0 — εάν ληφθεί ένα μήνυμα σχετικά με την απουσία αρχείων στο backlog ("No Backlog"),
-1 - εάν ληφθεί μήνυμα σφάλματος dfsrdiag κατά την εκτέλεση μιας αίτησης ("[ΣΦΑΛΜΑ]").
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
Όλα εδώ είναι εξαιρετικά απλά. Προσθέστε τις ακόλουθες γραμμές στο τέλος του αρχείου διαμόρφωσης agent:
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"
Φυσικά, προσαρμόζουμε τις διαδρομές σε αυτές όπου έχουμε σενάρια. Τα έβαλα στον ίδιο φάκελο όπου είναι εγκατεστημένο το agent.
Αφού κάνετε αλλαγές, επανεκκινήστε την υπηρεσία αντιπροσώπου Zabbix.
Αλλαγή του χρήστη κάτω από τον οποίο εκτελείται η υπηρεσία Zabbix Agent
Για να λαμβάνετε πληροφορίες μέσω dfsrdiag, το βοηθητικό πρόγραμμα πρέπει να εκτελείται σε λογαριασμό που έχει δικαιώματα διαχείρισης τόσο για την αποστολή όσο και για τη λήψη μελών της ομάδας αναπαραγωγής. Η υπηρεσία αντιπροσώπου Zabbix, που εκτελείται από προεπιλογή στον λογαριασμό συστήματος, δεν θα μπορεί να εκτελέσει ένα τέτοιο αίτημα. Δημιούργησα έναν ξεχωριστό λογαριασμό στον τομέα, του έδωσα δικαιώματα διαχείρισης στους απαραίτητους διακομιστές και διαμόρφωσα την υπηρεσία ώστε να εκτελείται κάτω από αυτόν σε αυτούς τους διακομιστές.
Μπορείτε να πάτε με άλλο τρόπο: γιατί dfsrdiag, στην πραγματικότητα, λειτουργεί μέσω του ίδιου WMI, τότε μπορείτε να χρησιμοποιήσετε
Πρότυπο παρακολούθησης
Με βάση τα δεδομένα που έλαβα, δημιούργησα ένα πρότυπο που:
- Εκτελεί αυτόματη ανακάλυψη ομάδων αναπαραγωγής μία φορά την ώρα,
- Ελέγχει το μέγεθος του ανεκτέλετου για κάθε ομάδα μία φορά κάθε 5 λεπτά,
- Περιέχει ένα έναυσμα που εκδίδει μια ειδοποίηση όταν το μέγεθος του ανεκτέλετου για οποιαδήποτε ομάδα είναι μεγαλύτερο από 100 για 30 λεπτά. Το έναυσμα περιγράφεται ως πρωτότυπο που προστίθεται αυτόματα σε ομάδες που ανιχνεύονται,
- Δημιουργεί γραφήματα μεγέθους ανεκτέλεστου για κάθε ομάδα αναπαραγωγής.
Μπορείτε να κατεβάσετε το πρότυπο για το Zabbix 2.2
Σύνολο
Μετά την εισαγωγή του προτύπου στο Zabbix και τη δημιουργία ενός λογαριασμού με τα απαραίτητα δικαιώματα, θα χρειαστεί μόνο να αντιγράψουμε τα σενάρια στους διακομιστές αρχείων που θέλουμε να παρακολουθήσουμε για DFSR, να προσθέσουμε δύο γραμμές στη διαμόρφωση του πράκτορα σε αυτούς και να επανεκκινήσουμε την υπηρεσία αντιπροσώπου Zabbix , ρυθμίζοντας τον να εκτελείται ως ο επιθυμητός λογαριασμός. Δεν απαιτούνται άλλες μη αυτόματες ρυθμίσεις για την παρακολούθηση DFSR.
Πηγή: www.habr.com