Zabbix에서 DFS 복제를 간단하게 모니터링

소개

데이터에 대한 단일 액세스 지점으로 DFS를 사용하고 데이터 센터와 지점 서버 간의 데이터 복제를 위해 DFSR을 사용하는 상당히 크고 분산된 인프라를 사용하면 이 복제 상태를 모니터링하는 문제가 발생합니다.
공교롭게도 우리는 DFSR을 사용하기 시작한 직후부터 기존의 다양한 도구 모음을 대체하고 인프라 모니터링을 보다 유익하고 완전하며 논리적인 형태로 전환한다는 목표로 Zabbix를 구현하기 시작했습니다. Zabbix를 사용하여 DFS 복제를 모니터링하는 방법에 대해 이야기하겠습니다.

우선, 상태를 모니터링하기 위해 DFS 복제에 대해 어떤 데이터를 가져와야 하는지 결정해야 합니다. 가장 관련성이 높은 지표는 백로그입니다. 여기에는 복제 그룹의 다른 구성원과 동기화되지 않은 파일이 포함되어 있습니다. 유틸리티를 사용하여 크기를 볼 수 있습니다 dfsrdiag, DFSR 역할과 함께 설치됩니다. 정상적인 복제 상태에서는 백로그 크기가 XNUMX에 가까워야 합니다. 따라서 백로그에 파일이 많으면 복제에 문제가 있음을 나타냅니다.

이제 문제의 실제적인 측면에 대해 설명합니다.

Zabbix Agent를 통해 백로그 크기를 모니터링하려면 다음이 필요합니다.

  • 출력을 구문 분석하는 스크립트 dfsrdiag 최종 백로그 크기 값을 Zabbix에 제공하기 위해,
  • 서버에 있는 복제 그룹 수, 복제하는 폴더 및 여기에 포함되는 다른 서버를 결정하는 스크립트(이 모든 것을 각 서버에 대해 Zabbix에 직접 입력하고 싶지 않습니까?)
  • 모니터링 서버에서 후속 호출을 위해 Zabbix 에이전트 구성에 UserParameter로 이러한 스크립트를 추가하면,
  • 백로그 읽기 권한이 있는 사용자로 Zabbix 에이전트 서비스를 시작하고,
  • 그룹 감지, 수신된 데이터 처리 및 그룹에 대한 경고 발행을 구성하는 Zabbix용 템플릿입니다.

스크립트 파서

파서를 작성하기 위해 모든 버전에서 사용 가능한 가장 보편적인 언어인 VBS를 선택했습니다. Windows Server스크립트의 논리는 간단합니다. 명령줄을 통해 복제 그룹 이름, 복제할 폴더, 송신 서버 및 수신 서버 이름을 입력받습니다. 그런 다음 이러한 매개변수를 전달합니다. dfsrdiag, 출력에 따라 다음이 생성됩니다.
파일 수 - 백로그에 파일이 있다는 메시지가 수신되면
0 — 백로그에 파일이 없다는 메시지를 받은 경우("백로그 없음")
-1 - 오류 메시지가 수신된 경우 dfsrdiag 요청을 실행할 때("[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

검색 스크립트

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 에이전트 구성에 스크립트 추가

여기의 모든 것은 매우 간단합니다. 에이전트 구성 파일 끝에 다음 줄을 추가합니다.

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"

물론 스크립트가 있는 경로로 경로를 조정합니다. 에이전트가 설치된 폴더에 넣어두었습니다.

변경 후 Zabbix 에이전트 서비스를 다시 시작하십시오.

Zabbix 에이전트 서비스가 실행되는 사용자 변경

통해 정보를 받아보시려면 dfsrdiag, 유틸리티는 복제 그룹의 구성원 전송 및 수신 모두에 대한 관리 권한이 있는 계정으로 실행되어야 합니다. 기본적으로 시스템 계정으로 실행되는 Zabbix 에이전트 서비스는 이러한 요청을 실행할 수 없습니다. 도메인에 별도의 계정을 만들고, 필요한 서버에 대한 관리 권한을 부여하고, 해당 서버에서 해당 계정으로 실행되도록 서비스를 구성했습니다.

다른 길로 갈 수도 있습니다. 왜냐하면 dfsrdiag, 실제로 동일한 WMI를 통해 작동하므로 다음을 사용할 수 있습니다. 설명, 관리 권한을 부여하지 않고 도메인 계정에 사용 권한을 부여하는 방법이 있지만 복제 그룹이 많으면 각 그룹에 권한을 부여하기가 어려울 것입니다. 그러나 도메인 컨트롤러에서 도메인 시스템 볼륨 복제를 모니터링하려는 경우 모니터링 서비스 계정에 도메인 관리자 권한을 부여하는 것은 좋은 생각이 아니기 때문에 이것이 허용되는 유일한 옵션일 수 있습니다.

모니터링 템플릿

제가 받은 데이터를 바탕으로 다음과 같은 템플릿을 만들었습니다.

  • 시간당 한 번씩 복제 그룹 자동 검색을 실행합니다.
  • 5분 간격으로 그룹별 백로그 크기를 확인하고,
  • 그룹의 백로그 크기가 100분 동안 30을 초과하는 경우 경고를 발행하는 트리거가 포함되어 있습니다. 트리거는 감지된 그룹에 자동으로 추가되는 프로토타입으로 설명되며,
  • 각 복제 그룹에 대한 백로그 크기 그래프를 작성합니다.

Zabbix 2.2용 템플릿을 다운로드할 수 있습니다. 여기에.

합계

템플릿을 Zabbix로 가져오고 필요한 권한이 있는 계정을 만든 후에는 DFSR을 모니터링하려는 파일 서버에 스크립트를 복사하고 에이전트 구성에 두 줄을 추가한 다음 Zabbix 에이전트 서비스를 다시 시작하면 됩니다. , 원하는 계정으로 실행되도록 설정합니다. DFSR 모니터링에는 다른 수동 설정이 필요하지 않습니다.

출처 : habr.com

DDoS 보호, VPS VDS 서버가 있는 사이트를 위한 안정적인 호스팅 구입 🔥 DDoS 공격 방지 기능이 탑재된 안정적인 웹사이트 호스팅, VPS 및 VDS 서버를 구매하세요 | ProHoster