Giám sát đơn giản việc sao chép DFS trong Zabbix

Giới thiệu

Với cơ sở hạ tầng phân tán và khá lớn sử dụng DFS làm điểm truy cập dữ liệu và DFSR duy nhất để sao chép dữ liệu giữa các trung tâm dữ liệu và máy chủ chi nhánh, câu hỏi đặt ra là giám sát trạng thái của bản sao này.
Thật trùng hợp, gần như ngay lập tức sau khi bắt đầu sử dụng DFSR, chúng tôi bắt đầu triển khai Zabbix với mục tiêu thay thế hàng loạt công cụ hiện có và đưa việc giám sát cơ sở hạ tầng sang một hình thức mang tính thông tin, đầy đủ và hợp lý hơn. Chúng ta sẽ nói về việc sử dụng Zabbix để giám sát việc sao chép DFS.

Trước hết, chúng ta cần quyết định cần thu thập dữ liệu nào về bản sao DFS để theo dõi trạng thái của nó. Chỉ số phù hợp nhất là tồn đọng. Nó chứa các tệp chưa được đồng bộ hóa với các thành viên khác trong nhóm sao chép. Bạn có thể xem kích thước của nó bằng tiện ích dfsrdiag, được cài đặt với vai trò DFSR. Ở trạng thái sao chép bình thường, kích thước tồn đọng sẽ gần bằng XNUMX. Theo đó, số lượng lớn tệp tồn đọng cho thấy có vấn đề với việc sao chép.

Bây giờ về khía cạnh thực tế của vấn đề.

Để theo dõi quy mô tồn đọng thông qua Zabbix Agent, chúng tôi sẽ cần:

  • Tập lệnh sẽ phân tích đầu ra dfsrdiag để cung cấp các giá trị kích thước tồn đọng cuối cùng cho Zabbix,
  • Một tập lệnh sẽ xác định có bao nhiêu nhóm sao chép trên máy chủ, chúng sao chép những thư mục nào và những máy chủ nào khác được bao gồm trong đó (chúng ta không muốn nhập tất cả những thứ này vào Zabbix bằng tay cho mỗi máy chủ, phải không?),
  • Thêm các tập lệnh này dưới dạng UserParameter vào cấu hình tác nhân Zabbix cho cuộc gọi tiếp theo từ máy chủ giám sát,
  • Bắt đầu dịch vụ đại lý Zabbix với tư cách là người dùng có quyền đọc hồ sơ tồn đọng,
  • Một mẫu cho Zabbix, trong đó việc phát hiện các nhóm, xử lý dữ liệu nhận được và đưa ra cảnh báo về chúng sẽ được định cấu hình.

Trình phân tích cú pháp tập lệnh

Để viết trình phân tích cú pháp, tôi đã chọn VBS làm ngôn ngữ phổ biến nhất có trong tất cả các phiên bản Windows Server. Logic của tập lệnh rất đơn giản: nó nhận tên của nhóm sao chép, thư mục được sao chép cũng như tên của máy chủ gửi và nhận thông qua dòng lệnh. Các tham số này sau đó được chuyển tới dfsrdiagvà tùy thuộc vào đầu ra của nó, nó tạo ra:
Số lượng tệp - nếu nhận được thông báo về sự hiện diện của tệp trong hồ sơ tồn đọng,
0 — nếu nhận được thông báo về việc thiếu tệp trong hồ sơ tồn đọng (“Không tồn đọng”),
-1 - nếu nhận được thông báo lỗi dfsrdiag khi thực hiện một yêu cầu ("[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 intBackLog

Kịch bản khám phá

Để Zabbix xác định tất cả các nhóm sao chép có trên máy chủ và tìm ra tất cả các tham số cần thiết cho yêu cầu (tên thư mục, tên của các máy chủ lân cận), trước tiên, chúng tôi cần lấy thông tin này và thứ hai là trình bày nó ở định dạng dễ hiểu đối với Zabbix. Định dạng mà công cụ khám phá hiểu được trông giống như sau:

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

...

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

Cách dễ nhất để có được thông tin mà chúng ta quan tâm là thông qua WMI, lấy nó ra từ các phần tương ứng của DfsrReplicationGroupConfig. Kết quả là, một tập lệnh đã ra đời tạo yêu cầu tới WMI và xuất ra danh sách các nhóm, thư mục và máy chủ của họ ở định dạng được yêu cầu.

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

Tôi đồng ý, tập lệnh có thể không tỏa sáng bằng mã sang trọng và một số thứ trong đó chắc chắn có thể được đơn giản hóa, nhưng nó thực hiện chức năng chính của nó - cung cấp thông tin về các tham số của các nhóm sao chép theo định dạng mà Zabbix có thể hiểu được.

Thêm tập lệnh vào cấu hình tác nhân Zabbix

Mọi thứ ở đây cực kỳ đơn giản. Thêm các dòng sau vào cuối tệp cấu hình tác nhân:

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"

Tất nhiên, chúng tôi điều chỉnh đường dẫn đến những nơi chúng tôi có tập lệnh. Tôi đặt chúng vào cùng thư mục nơi tác nhân được cài đặt.

Sau khi thực hiện thay đổi, hãy khởi động lại dịch vụ đại lý Zabbix.

Thay đổi người dùng mà dịch vụ Zabbix Agent chạy

Để nhận được thông tin qua dfsrdiag, tiện ích phải được chạy trong một tài khoản có quyền quản trị đối với cả việc gửi và nhận các thành viên của nhóm sao chép. Dịch vụ đại lý Zabbix, chạy theo mặc định trong tài khoản hệ thống, sẽ không thể thực hiện yêu cầu như vậy. Tôi đã tạo một tài khoản riêng trong miền, cấp cho nó quyền quản trị trên các máy chủ cần thiết và định cấu hình dịch vụ để chạy theo tài khoản đó trên các máy chủ này.

Bạn có thể đi theo cách khác: bởi vì dfsrdiag, trên thực tế, hoạt động thông qua cùng một WMI, khi đó bạn có thể sử dụng sự miêu tả, làm sao để cấp quyền sử dụng cho tài khoản miền mà không cần cấp quyền quản trị, nhưng nếu chúng ta có nhiều nhóm nhân rộng thì việc cấp quyền cho từng nhóm sẽ khó khăn. Tuy nhiên, trong trường hợp chúng tôi muốn giám sát việc sao chép Khối hệ thống miền trên bộ điều khiển miền, đây có thể là lựa chọn duy nhất có thể chấp nhận được, vì việc cấp quyền quản trị viên miền cho tài khoản dịch vụ giám sát không phải là một ý tưởng hay.

Mẫu giám sát

Dựa trên dữ liệu tôi nhận được, tôi đã tạo một mẫu:

  • Chạy tự động khám phá các nhóm sao chép mỗi giờ một lần,
  • Kiểm tra kích thước tồn đọng của mỗi nhóm 5 phút một lần,
  • Chứa trình kích hoạt đưa ra cảnh báo khi kích thước tồn đọng của bất kỳ nhóm nào lớn hơn 100 trong 30 phút. Trình kích hoạt được mô tả dưới dạng nguyên mẫu được tự động thêm vào các nhóm được phát hiện,
  • Xây dựng biểu đồ kích thước tồn đọng cho từng nhóm sao chép.

Bạn có thể tải xuống mẫu cho Zabbix 2.2 đây.

Tổng

Sau khi nhập mẫu vào Zabbix và tạo một tài khoản với các quyền cần thiết, chúng tôi sẽ chỉ cần sao chép tập lệnh vào máy chủ tệp mà chúng tôi muốn theo dõi DFSR, thêm hai dòng vào cấu hình tác nhân trên chúng và khởi động lại dịch vụ tác nhân Zabbix , cài đặt nó để chạy như tài khoản mong muốn. Không cần cài đặt thủ công nào khác để theo dõi DFSR.

Nguồn: www.habr.com

Thêm một lời nhận xét