Απλή παρακολούθηση της αναπαραγωγής DFS στο Zabbix

Εισαγωγή

Με μια αρκετά μεγάλη και κατανεμημένη υποδομή που χρησιμοποιεί το 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

Προσθέστε ένα σχόλιο