Operating System Upgrade Monitor

Microsoft.Windows.10.SDNMonitoring.OsUpgradeMonitor (UnitMonitor)

Operating System upgrade monitor

Knowledge Base article:

Summary

A Windows Update patch for Network Controller has not been installed on some of the Network Controller nodes. Unless all the nodes have the patch, the patch will not be applied.

Causes

Network Controller maintains two versions of binaries, installed version and running version. When a patch is installed, the installed version of binary is updated. But the running version of binary is updated only when the patch is installed on all the nodes. Till the running version is updated, Network Controller will run on the old code.

Resolutions

Ensure that all the Network Controller nodes have applied the same set of Windows Update patches.

© 2016 Microsoft Corporation, all rights reserved

Element properties:

TargetSDNMonitoringMP.SDNMonitoring.NetworkControllerClusterNode
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.2SingleEventLog2StateMonitorType
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.10.SDNMonitoring.OsUpgradeMonitor" Accessibility="Public" Enabled="true" Target="SDNMonitoringMP.SDNMonitoring.NetworkControllerClusterNode" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.2SingleEventLog2StateMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<OperationalStates>
<OperationalState ID="FirstEventRaised" MonitorTypeStateID="FirstEventRaised" HealthState="Error"/>
<OperationalState ID="SecondEventRaised" MonitorTypeStateID="SecondEventRaised" HealthState="Success"/>
</OperationalStates>
<Configuration>
<!-- Computer name for the first event. We will use a variable to get the target computer name. -->
<FirstComputerName>$Target/Property[Type="SDNMonitoringMP.SDNMonitoring.NetworkControllerClusterNode"]/Id$</FirstComputerName>
<!-- Name of the log containing the first event. -->
<FirstLogName>Microsoft-Windows-NetworkController-Update/Admin</FirstLogName>
<!-- Expression for the first event -->
<FirstExpression>
<And>
<!-- Expression for the first event number -->
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">282</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<!-- Expression for the first event source -->
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-NetworkController-Update</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Params/Param[1]</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">$Target/Property[Type="SDNMonitoringMP.SDNMonitoring.NetworkControllerClusterNode"]/Id$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</FirstExpression>
<!-- Computer name for the second event. We will use a variable to get the target computer name. -->
<SecondComputerName>$Target/Property[Type="SDNMonitoringMP.SDNMonitoring.NetworkControllerClusterNode"]/Id$</SecondComputerName>
<!-- Name of the log containing the first event. -->
<SecondLogName>Microsoft-Windows-NetworkController-Update/Operational</SecondLogName>
<!-- Expression for the second event -->
<SecondExpression>
<And>
<!-- Expression for the second event number -->
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">284</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<!-- Expression for the second event source -->
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-NetworkController-Update</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</SecondExpression>
</Configuration>
</UnitMonitor>