In some cases, there is no failed workflow, but there is a bug in the logic of the workflow that may prevent that workflow from discovering something or even prevent it from monitoring. The WFAnalyzer is key to understanding the data and how it is being processed by each module in the workflow. The below will walk through troubleshooting a monitor

To troubleshoot a monitor
  1. On the RMS, click Start, point to Programs (or All Programs), point to System Center Operations Manager 2007 R2, point to Authoring Tools, and click Workflow Analyzer.

  2. Locate the workflow that you want to trace.

  3. Right-click the workflow and click Trace.

    You will be presented with a list of instances of the class that the monitor is running against, as well as their status. For example, if there are multiple databases discovered, you will see a workflow for each instance.

  4. Click the workflow instance that you want to trace and click Start.

  5. In the TraceWorkflow window, look for DiscoveryFilter module traces.

    Module column: ExpressionEvaluatorCondition

    Method column: FilterEvaluationTrace

  6. Cross-reference this with the MP to check the RegularDetections section of the MonitorType for that UnitMonitor. Note the criteria for the critical state.

  7. Look for the criteria in the trace and see how that criteria was evaluated against the live data on the agent.

  8. Depending on the number of states that the monitor can have, you will see at least two of the following:

    • Data Item given to the RegularDetection workflow:

      Received DataItem <DataItem type="System.PropertyBagData" time="2009-09-24T09:53:29.6247210-07:00"

      sourceHealthServiceId="BF70F9EF-FB93-E9F5-DE1A-0139E12012E2"><Property Name="__CLASS"

      VariantType="8">SqlServiceAdvancedProperty</Property><Property Name="__DERIVATION"

      VariantType="8"></Property><Property Name="__DYNASTY"

      VariantType="8">SqlServiceAdvancedProperty</Property><Property Name="__GENUS"

      VariantType="3">2</Property><Property Name="__NAMESPACE"

      VariantType="8">root\Microsoft\SQLServer\ComputerManagement</Property><Property Name="__PATH"

      VariantType="8">\\LEARNOPSMGR\root\Microsoft\SQLServer\ComputerManagement:SqlServiceAdvancedProperty.PropertyIndex=2,PropertyName="SPLEVEL",ServiceName="MSSQLSERVER",SqlServiceType=1</Property><Property Name="__PROPERTY_COUNT" VariantType="3">8</Property><Property Name="__RELPATH"

      VariantType="8">SqlServiceAdvancedProperty.PropertyIndex=2,PropertyName="SPLEVEL",ServiceName="MSSQLSERVER",SqlServiceType=1</Property><Property Name="__SERVER" VariantType="8">LEARNOPSMGR</Property><Property Name="IsReadOnly"

      VariantType="11" Type="Boolean">true</Property><Property Name="PropertyIndex"

      VariantType="19">2</Property><Property Name="PropertyName"

      VariantType="8">SPLEVEL</Property><Property Name="PropertyNumValue"

      VariantType="19">3</Property><Property Name="PropertyValueType"

      VariantType="19">2</Property><Property Name="ServiceName"

      VariantType="8">MSSQLSERVER</Property><Property Name="SqlServiceType"

      VariantType="19">1</Property></DataItem>

    • Expression Trace of that given RegularDetection workflow:

      Filter Instance (0000000007589040):

      Evaluating Simple Expression:

      <ValueExpression>

      <XPathQuery Type='Integer'>Property[@Name='PropertyNumValue']</XPathQuery>

      </ValueExpression>

      <Operator>GREATER_EQUAL</Operator>

      <ValueExpression>

      <Value Type='Integer'>1</Value>

      </ValueExpression>

      Resolves to:

      3

      GREATER_EQUAL

      1

      Using Compare Type Integer

      RESULT = MATCH

    • An example trace where the expression does not match looks like:

      Filter Instance (00000000077D77F0):

      Evaluating Simple Expression:

      <ValueExpression>

      <XPathQuery Type='Integer'>Property[@Name='PropertyNumValue']</XPathQuery>

      </ValueExpression>

      <Operator>LESS</Operator>

      <ValueExpression>

      <Value Type='Integer'>1</Value>

      </ValueExpression>

      Resolves to:

      3

      LESS

      1

      Using Compare Type Integer

      RESULT = NOT A MATCH

See Also