DFS 복제 백로그 검색

Microsoft.Windows.FileServer.DFSR.BacklogDiscovery (Discovery)

사용하도록 설정된 경우 이 규칙은 DFS 복제(복제 백로그)를 사용하여 복제 대기 중인 파일 수를 검색합니다.

Knowledge Base article:

요약

사용하도록 설정된 경우 이 규칙은 DFS 복제(복제 백로그)를 사용하여 복제 대기 중인 파일 수를 검색합니다. 이 검색 규칙은 운영 콘솔의 복제 백로그 보기를 채웁니다.

구성

대체로 Operations Manager가 검색 규칙을 실행할 때마다 백로그 개수가 자주 변경될 수 있으므로 이 검색 규칙은 기본적으로 사용하지 않도록 설정되어 있습니다. 복제 백로그를 모니터링하려면 이 검색 규칙을 사용하도록 설정하고, 백로그 개수에 대한 최신 정보를 제공하는 덜 빈번한 값으로 빈도를 구성합니다. 서버 로드와 네트워크 트래픽을 최소화하려면 빈도를 1시간 이상으로 설정하는 것이 좋습니다.

추가 정보

DFS 복제 또는 해당 명령줄 도구가 설치되어 있는 서버에서 Dfsrdiag backlog 명령을 사용하여 복제 백로그를 즉시 표시할 수 있습니다.

Element properties:

TargetMicrosoft.Windows.FileServer.DFSR.Service
EnabledFalse
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Microsoft.Windows.FileServer.DFSR.MonitoringAccount

Source Code:

<Discovery ID="Microsoft.Windows.FileServer.DFSR.BacklogDiscovery" Enabled="false" Target="Microsoft.Windows.FileServer.DFSR.Service" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection">
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReplicationGroupName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReplicatedFolderName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="SendingMemberName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReceivingMemberName"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="Enabled"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="BacklogCount"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReplicationGroupGUID"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReplicatedFolderGUID"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ConnectionGUID"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="SendingMemberGUID"/>
<Property TypeID="Microsoft.Windows.FileServer.DFSR.ReplicationConnection" PropertyID="ReceivingMemberGUID"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" RunAs="Microsoft.Windows.FileServer.DFSR.MonitoringAccount" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>BacklogDiscovery.vbs</ScriptName>
<Arguments>0 $MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Arguments>
<ScriptBody><Script>
Option Explicit

On Error Resume Next

Dim SourceType, SourceID, ManagedEntityId, oArgs, oAPI, sDfsrServerName, oReplicationConnections, oDiscData

SetLocale("en-us")

Set oAPI = CreateObject("MOM.ScriptAPI")
Set oArgs = WScript.Arguments

If oArgs.Count &lt; 4 Then
call oAPI.LogScriptEvent("BacklogDiscovery.vbs", 100, 1, "Expected 4 arguments. There were only " &amp; oArgs.Count &amp; " arguments. Exiting script.")
Wscript.Quit -1
End If

SourceType = oArgs(0)
SourceId = oArgs(1)
ManagedEntityId = oArgs(2)
sDfsrServerName = oArgs(3)

set oDiscData = oAPI.CreateDiscoveryData(SourceType, SourceId, ManagedEntityId)

Dim objWMIService, ListOfConnections, objDfsrRfInfo, Connection, objReceivingWmiService, BacklogCount, ListOfReplicatedFolders, MemberInfoList, MemberInformation, MemberInfo

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; sDfsrServerName &amp; "\root\microsoftdfs")

If Err.Number &lt;&gt; 0 then
strErr = "Unable to connect to local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

Set MemberInfoList = objWMIService.ExecQuery("select MemberGuid from DfsrLocalMemberConfig where MemberName='" &amp; Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1) &amp; "'")
If Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrLocalMemberConfig from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

For Each MemberInfo in MemberInfoList
Set ListOfConnections = objWMIService.ExecQuery("Select PartnerDns, PartnerGuid, PartnerName, ConnectionGuid, MemberGuid, ReplicationGroupGuid, Enabled from DfsrConnectionConfig Where Inbound = false and MemberGuid='" &amp; MemberInfo.MemberGuid &amp; "'")
If Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrConnectionConfig from local WMI provider. Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Wscript.Quit -1
End If

For Each Connection in ListOfConnections

Set objReceivingWmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; Connection.PartnerDns &amp; "\root\microsoftdfs")
If Err.Number &lt;&gt; 0 then
strErr = "Unable to connect to remote WMI provider. Server: " &amp; Connection.PartnerDns &amp; ". Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot = false
Else
Set ListOfReplicatedFolders = objReceivingWmiService.ExecQuery ("Select ReplicationGroupName, ReplicatedFolderGuid, ReplicatedFolderName from DfsrReplicatedFolderInfo Where MemberGuid ='" &amp; Connection.PartnerGuid &amp; "'")
If Err.Number &lt;&gt; 0 then
strErr = "Unable to query DfsrReplicatedFolderInfo from remote WMI provider. Server: " &amp; Connection.PartnerDns &amp; ". Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot = false
Else
For Each objDfsrRfInfo In ListOfReplicatedFolders
BacklogCount = 0

BacklogCount = Backlog(objReceivingWmiService, objWMIService, objDfsrRfInfo)

If Err.Number &lt;&gt; 0 then
strErr = "Unable to get backlog information. ReplicatedFolderGuid: "&amp; objDfsrRfInfo.ReplicatedFolderGuid &amp; " Error: 0x" &amp; Hex(Err.Number) &amp; " " &amp; Err.Description
WScript.Echo strErr
Err.Clear
oDiscData.IsSnapshot = false
Else
set oReplicationConnections = oDiscData.CreateClassInstance("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']$")

call oReplicationConnections.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sDfsrServerName)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ConnectionGUID$", Connection.ConnectionGuid)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/SendingMemberGUID$", Connection.MemberGuid)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/SendingMemberName$", Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1))
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReceivingMemberGUID$", Connection.PartnerGuid)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReceivingMemberName$", Connection.PartnerName)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReplicationGroupGUID$", Connection.ReplicationGroupGuid)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReplicationGroupName$", objDfsrRfInfo.ReplicationGroupName)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReplicatedFolderGUID$", objDfsrRfInfo.ReplicatedFolderGuid)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/ReplicatedFolderName$", objDfsrRfInfo.ReplicatedFolderName)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/Enabled$", Connection.Enabled)
call oReplicationConnections.AddProperty("$MPElement[Name='Microsoft.Windows.FileServer.DFSR.ReplicationConnection']/BacklogCount$", BacklogCount)
call oReplicationConnections.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "'" &amp; Left(sDfsrServerName, InStr(sDfsrServerName, ".")-1) &amp; " -&gt; " &amp; Connection.PartnerName &amp; "'")

call oDiscData.AddInstance(oReplicationConnections)
End If
Next
End If
End If
Next
Next

Call oAPI.Return(oDiscData)

Function Backlog(objReceivingWmiConn, objSendingWmiConn, objReceivingDfsrRfInfo)

Backlog = 0

Dim strVv, strError
Dim strObjPath
Dim objSendingDfsrRfInfo
Dim uintBacklogCount
Dim uintRecordIdx
Dim uintErr


uintErr = objReceivingDfsrRfInfo.GetVersionVector(strVv)

If uintErr &lt;&gt; 0 Then
Backlog = 0
Exit Function
End If

strObjPath = objReceivingDfsrRfInfo.Path_.RelPath

On Error Resume Next
Set objSendingDfsrRfInfo = objSendingWmiConn.Get(strObjPath)

If ( Err &lt;&gt; 0 ) Then
Backlog = 0
Exit Function
End If

uintErr = objSendingDfsrRfInfo.GetOutboundBacklogFileCount(strVv, uintBacklogCount, uintRecordIdx)

If uintErr &lt;&gt; 0 Then
backlog = 0
Exit Function
End If

Backlog = uintBacklogCount

End Function
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>