Advisor Knowledge Discovery

Microsoft.SystemCenter.Advisor.AgentHealth.KnowledgeDiscoveryMonitor (UnitMonitor)

Knowledge Base article:

Summary

Advisor knowledge discovery failed to run on the specific agent.

Causes

The management packs are corrupted or incorrect.

Resolutions

If it is the first time that the agent has been opted in, this is normal and please wait for a few minutes. Otherwise, delete the Health Service State folder under %Program Files%\System Center Operations Manager\ on the specific agent and restart the health service to force download the latest management packs.

Element properties:

TargetMicrosoft.SystemCenter.Advisor.Internal.AdvisorConnector
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityError
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.TimedScript.ThreeStateMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Advisor knowledge discovery failed on the server
Advisor management packs are incorrect.
RunAsSystem.PrivilegedMonitoringAccount

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.Advisor.AgentHealth.KnowledgeDiscoveryMonitor" Accessibility="Public" Enabled="true" Target="Microsoft.SystemCenter.Advisor.Internal.AdvisorConnector" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Windows!Microsoft.Windows.TimedScript.ThreeStateMonitorType" RunAs="System!System.PrivilegedMonitoringAccount" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.Advisor.AgentHealth.KnowledgeDiscoveryMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
<OperationalState ID="Success" MonitorTypeStateID="Success" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>60</IntervalSeconds>
<SyncTime/>
<ScriptName>MonitorKnowledgeDiscovery.vbs</ScriptName>
<Arguments/>
<ScriptBody><Script>
function readFromRegistry(strRegistryKey, strDefault)
Dim WSHShell, value

On Error Resume Next
Set WSHShell = CreateObject("WScript.Shell")
value = WSHShell.RegRead(strRegistryKey)

if err.number &lt;&gt; 0 then
readFromRegistry=strDefault
else
readFromRegistry=value
end if

set WSHShell = nothing
end function

Dim oAPI, oBag, strStatePath, strMonitorState
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()

strStatePath = readFromRegistry("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\System Center Operations Manager\12\Advisor\DataRoot", Empty)
strMonitorState = "Warning"

if strStatePath &lt;&gt; Empty then
Dim oFSO, strModelPath, strKnowledgePath, oKnowledgeFolder
Set oFSO = CreateObject("Scripting.FileSystemObject")
strModelPath = strStatePath &amp; "\AdvisorMonitorV2\Configuration\model.xml"
strKnowledgePath = strStatePath &amp; "\AdvisorMonitorV2\Management Packs\Knowledge12"
if oFSO.FileExists(strModelPath) then
strMonitorState = "Success"
elseif oFSO.FolderExists(strKnowledgePath) then
Set oKnowledgeFolder = oFSO.GetFolder(strKnowledgePath)
if oKnowledgeFolder.Files.Count &lt;&gt; 0 then
strMonitorState = "Error"
end if
end if
else
strMonitorState = "Success"
end if

Call oBag.AddValue("Status", strMonitorState)
Call oAPI.Return(oBag)
</Script></ScriptBody>
<TimeoutSeconds>60</TimeoutSeconds>
<ErrorExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='Status']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Error</Value>
</ValueExpression>
</SimpleExpression>
</ErrorExpression>
<WarningExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='Status']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Warning</Value>
</ValueExpression>
</SimpleExpression>
</WarningExpression>
<SuccessExpression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Property[@Name='Status']</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Success</Value>
</ValueExpression>
</SimpleExpression>
</SuccessExpression>
</Configuration>
</UnitMonitor>