Domain Controller Health Monitor

Microsoft.Windows.AD.DomainMemberPerspective.Availability.DomainControllerHealth.Monitor (UnitMonitor)

Monitors the availability of Domain Controllers in the domain by attempting to bind to every advertising DC. It also binds to the GC port of any advertising DC. This monitor ignores off-line DCs (not responding to ping) and non-advertising DCs.

Knowledge Base article:

Summary

This monitor verifies that the domain member can bind to the LDAP and GC port of all domain controllers in a domain.

If the DC does not respond to ping or is not advertising it will ignore it and rely on other monitors to determine if that is an issue.

If the DC is advertising it will bind to the LDAP port and if the DC is GC it will bind to the GC port. If a bind fails on any DC the monitor will raise an alert.

Configuration

Causes

Possible causes of failures include the following:

Resolutions

Ensure that the failing Domain Controller(s) are online and functioning correctly.

Element properties:

TargetMicrosoft.Windows.Server.AD.DomainMemberPerspective
Parent MonitorSystem.Health.AvailabilityState
CategoryCustom
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.AD.DomainMemberPerspective.Availability.DomainControllerHealth.Monitortype
RemotableFalse
AccessibilityPublic
Alert Message
The Domain Controller Health monitor has failed.
{0}
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.AD.DomainMemberPerspective.Availability.DomainControllerHealth.Monitor" Accessibility="Public" Enabled="true" Target="AD!Microsoft.Windows.Server.AD.DomainMemberPerspective" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="false" Priority="Normal" TypeID="Microsoft.Windows.AD.DomainMemberPerspective.Availability.DomainControllerHealth.Monitortype" ConfirmDelivery="false">
<Category>Custom</Category>
<AlertSettings AlertMessage="Microsoft.Windows.AD.DomainMemberPerspective.Availability.DomainControllerHealth.Monitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='ErrorString']$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="DomainControllerHealthOK" MonitorTypeStateID="DomainControllerHealthOK" HealthState="Success"/>
<OperationalState ID="DomainControllerHealthError" MonitorTypeStateID="DomainControllerHealthError" HealthState="Error"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>300</IntervalSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<BindIterations>3</BindIterations>
<TargetLocalSite>False</TargetLocalSite>
</Configuration>
</UnitMonitor>