Collect .NET Statistic/\% of Performance violations/sec

Microsoft.SystemCenter.Apm.Transaction.PerformanceRateMonitor (UnitMonitor)

Collect .NET Statistic/\% of Performance violations/sec performance counter

Knowledge Base article:

Summary

The instance state becomes unhealthy if the rate of performance events per defined time period exceeds the monitor threshold.

Causes

Transaction performance alerts are generated when the rate of performance events exceeds the configured monitor threshold.

Excessively long database calls might be caused by a problem with the database server or with the structure and complexity of the database query. Long file I/O times might be due to problems with the file server. Web Services performance issues might occur because the Web Service or the server it resides on is down or there is a problem in the Web Service code. Long internal execution times for applications might result from complex or inefficient code.

Resolutions

Typical application performance degradation could be caused by a long database call, a long web service call, a slow .NET Remoting call, a slow COM+ call, or inefficient application code.

Element properties:

TargetMicrosoft.SystemCenter.Apm.Transaction
Parent MonitorSystem.Health.PerformanceState
CategoryCustom
EnabledFalse
Instance Name.NET Statistic
Counter Name\% of Performance violations/sec
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeSystem.Performance.ConsecutiveSamplesThreshold
RemotableFalse
AccessibilityPublic
Alert Message
.NET Statistic/\% of Performance violations/sec exceeded the threshold
The .NET Statistic/\% of Performance violations/sec performance counter has exceeded the configured threshold of {0}\%. The performance counter value was {1}\%.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SystemCenter.Apm.Transaction.PerformanceRateMonitor" Accessibility="Public" Enabled="false" Target="Microsoft.SystemCenter.Apm.Transaction" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="false" Priority="Normal" TypeID="Performance!System.Performance.ConsecutiveSamplesThreshold" ConfirmDelivery="false">
<Category>Custom</Category>
<AlertSettings AlertMessage="Microsoft.SystemCenter.Apm.Transaction.PerformanceRateMonitor.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="Microsoft.SystemCenter.Apm.TransactionBase"]/PerformanceRateMonitorThreshold$</AlertParameter1>
<AlertParameter2>$Data/Context/SampleValue$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Success" MonitorTypeStateID="ConditionFalse" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="ConditionTrue" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>% of Performance violations/sec</CounterName>
<ObjectName>.NET Statistic</ObjectName>
<InstanceName>$Target/Property[Type="Microsoft.SystemCenter.Apm.Transaction"]/CounterInstance$</InstanceName>
<AllInstances>false</AllInstances>
<Frequency>$Target/Property[Type="Microsoft.SystemCenter.Apm.TransactionBase"]/PerformanceRateMonitorInterval$</Frequency>
<Threshold>$Target/Property[Type="Microsoft.SystemCenter.Apm.TransactionBase"]/PerformanceRateMonitorThreshold$</Threshold>
<Direction>greater</Direction>
<NumSamples>3</NumSamples>
</Configuration>
</UnitMonitor>