How to Use Reliability Monitor on Windows Server 2012 R2
Reliability Monitor is a built-in diagnostic tool on Windows Server 2012 R2 that provides a chronological view of system stability and failure events, presented as a graphical timeline that correlates software installations, application crashes, hardware failures, and Windows errors with a calculated stability index score. Unlike Event Viewer, which requires familiarity with event IDs and filtering, Reliability Monitor presents a concise, date-organized timeline that makes it immediately apparent when system stability began deteriorating and what events coincided with the change.
For server administrators dealing with intermittent crashes, sudden application failures, or unexplained performance degradation, Reliability Monitor is often the fastest way to establish whether the problem started after a specific software installation, update, or configuration change. This guide covers how to access and interpret Reliability Monitor, correlate reliability events with system changes, and use the underlying Reliability Analysis Component (RAC) data programmatically.
Prerequisites
– Windows Server 2012 R2 with local console or Remote Desktop access
– Reliability Analysis Component (RAC) task must be running (enabled by default)
– Administrative credentials for full event detail
– No additional software installation required
Step 1: Open Reliability Monitor
Access Reliability Monitor through multiple paths:
# From Run dialog
perfmon /rel
# Via Control Panel path
# Control Panel > System and Security > Action Center > View reliability history
# Directly from the command line
Start-Process "perfmon.exe" -ArgumentList "/rel"
Reliability Monitor can also be launched from Action Center (the flag icon in the system tray) by clicking “View reliability history.” The tool opens to a weekly view showing the past week’s stability history.
Step 2: Interpret the Stability Index
The central element of Reliability Monitor is the Stability Index graph, a line chart ranging from 1 (least stable) to 10 (most stable). The stability score is calculated based on the frequency and severity of failure events:
– 10.0: No recorded failures — system has been running without problems
– 7.0–9.9: Minor issues; occasional application crashes or informational events
– 4.0–6.9: Moderate instability; multiple application or system failures observed
– 1.0–3.9: Severe instability; frequent system crashes, BSOD events, or hardware failures
The stability score naturally improves over time even without fixes — if no new failures occur, the score gradually trends upward. A sudden drop in the stability graph is the key indicator to investigate. Clicking on any day in the graph shows the specific events recorded on that date.
Step 3: Read the Event Timeline
Below the stability graph, events are organized into five row categories using colored icons:
– Application failures (red X): Application crashes, hangs, and stopped working events
– Windows failures (red X): BSOD (Stop errors), boot failures, sleep failures
– Miscellaneous failures (red X): Driver crashes, disk errors, RAM errors
– Warnings (yellow triangle): Application or Windows installations that did not complete successfully
– Information (blue circle): Successful software installations, Windows updates applied
The Information row is critical for root cause analysis. If you see a stability score drop immediately after a blue information circle (software install), the installation is likely related to the problem. This correlation — “score dropped on the same day as this update was installed” — is exactly the insight Reliability Monitor is designed to provide.
Step 4: View Detailed Event Information
Click on any day in the Stability Index graph to populate the event list below. Click on any individual event to see its details. For application crashes, the detail view shows:
– Fault module name and version
– Exception code (useful for identifying exception types)
– Process name and version
– Report ID (links to Windows Error Reporting if available)
At the bottom of the Reliability Monitor window, two action links appear:
– View technical details: Opens the full Event Viewer entry for the selected event
– Check for solutions: Submits the crash data to Microsoft and returns KB articles if known solutions exist (requires internet access)
Step 5: Access Reliability Data via PowerShell
The reliability data is stored in the Windows Reliability Analysis Component (RAC) WMI namespace. Query it programmatically for automation and reporting:
# Query the RAC WMI namespace for stability history
$racData = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityStabilityMetrics" |
Sort-Object StartMeasurementDate -Descending |
Select-Object -First 30
foreach ($day in $racData) {
[PSCustomObject]@{
Date = [Management.ManagementDateTimeConverter]::ToDateTime($day.StartMeasurementDate).ToShortDateString()
StabilityIndex = [math]::Round($day.SystemStabilityIndex, 2)
}
}
Retrieve individual reliability records (crash events, installs, etc.):
$records = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityRecords" |
Sort-Object TimeGenerated -Descending |
Select-Object -First 50
$records | ForEach-Object {
[PSCustomObject]@{
Date = [Management.ManagementDateTimeConverter]::ToDateTime($_.TimeGenerated).ToString("yyyy-MM-dd HH:mm")
EventType = $_.SourceName
ProductName = $_.ProductName
Message = $_.Message
RecordType = switch ($_.RecordType) {
1 { "Informational" }
2 { "Warning" }
3 { "Critical" }
default { "Unknown" }
}
}
} | Format-Table -AutoSize
Step 6: Generate a Reliability History Report
Export reliability data to a CSV or HTML report for management review or historical documentation:
# Generate a reliability report for the last 30 days
$reportPath = "C:ReportsReliabilityReport_$(Get-Date -Format 'yyyyMMdd').csv"
$stabilityData = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityStabilityMetrics" |
Sort-Object StartMeasurementDate -Descending |
Select-Object -First 30 |
ForEach-Object {
[PSCustomObject]@{
Date = [Management.ManagementDateTimeConverter]::ToDateTime($_.StartMeasurementDate).ToString("yyyy-MM-dd")
StabilityIndex = [math]::Round($_.SystemStabilityIndex, 2)
}
}
$stabilityData | Export-Csv $reportPath -NoTypeInformation
Write-Host "Reliability report saved to $reportPath"
# Show the current 7-day trend
$stabilityData | Select-Object -First 7 | Format-Table -AutoSize
Step 7: Correlate Reliability Events with Problem Investigation
Use a systematic correlation approach when investigating stability problems:
# Find the date when stability began declining
$metrics = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityStabilityMetrics" |
Sort-Object StartMeasurementDate |
ForEach-Object {
[PSCustomObject]@{
Date = [Management.ManagementDateTimeConverter]::ToDateTime($_.StartMeasurementDate)
Score = [math]::Round($_.SystemStabilityIndex, 2)
}
}
# Find the biggest day-over-day drop in stability score
for ($i = 1; $i -lt $metrics.Count; $i++) {
$drop = $metrics[$i-1].Score - $metrics[$i].Score
if ($drop -gt 1.5) {
Write-Host "Significant stability drop on $($metrics[$i].Date.ToShortDateString()): from $($metrics[$i-1].Score) to $($metrics[$i].Score) (drop: $([math]::Round($drop,2)))"
}
}
# Find all events on that date
$dropDate = $metrics | Sort-Object { [math]::Abs($_.Score - ($metrics | Measure-Object Score -Minimum).Minimum) } | Select-Object -First 1
$records = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityRecords" |
Where-Object {
$d = [Management.ManagementDateTimeConverter]::ToDateTime($_.TimeGenerated)
$d.Date -eq $dropDate.Date.Date
}
$records | Select-Object ProductName, SourceName, Message | Format-List
Step 8: Check the RAC Task Scheduler Entry
Reliability Monitor data is collected by a scheduled task called RAC Agent. Verify it is running correctly:
# Check the RAC scheduled task
Get-ScheduledTask -TaskName "RacTask" -TaskPath "MicrosoftWindowsRacTask" |
Select-Object TaskName, State
# View last run information
Get-ScheduledTaskInfo -TaskName "RacTask" -TaskPath "MicrosoftWindowsRacTask" |
Select-Object LastRunTime, LastTaskResult, NextRunTime
If RAC data is not being collected, ensure the task is enabled and the Diagnostic Policy Service is running:
Get-Service DPS | Select-Object Name, Status, StartType
Enable-ScheduledTask -TaskName "RacTask" -TaskPath "MicrosoftWindowsRacTask"
Step 9: View Problem Reports in Action Center
Reliability Monitor is closely integrated with Windows Error Reporting and Action Center. View the full problem history:
# Open Problem Reports and Solutions from command line
control /name Microsoft.ActionCenter /page pageReliabilityView
# View crash dump files (generated for application and system crashes)
Get-ChildItem "$env:LOCALAPPDATACrashDumps" -Filter "*.dmp" -ErrorAction SilentlyContinue |
Select-Object Name, Length, LastWriteTime | Sort-Object LastWriteTime -Descending
# Check for minidump files (system crashes / BSOD)
Get-ChildItem "C:WindowsMinidump" -Filter "*.dmp" -ErrorAction SilentlyContinue |
Select-Object Name, Length, LastWriteTime | Sort-Object LastWriteTime -Descending
Step 10: Use Reliability Monitor for Change Management Validation
Reliability Monitor is a practical tool for post-change validation after patching, software deployments, or configuration changes. After applying Windows updates or deploying application updates, schedule a review of Reliability Monitor 48–72 hours later:
# Post-change stability check script
$daysToCheck = 3
$changeDate = (Get-Date).AddDays(-$daysToCheck)
$preChange = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityStabilityMetrics" |
Where-Object { [Management.ManagementDateTimeConverter]::ToDateTime($_.StartMeasurementDate) -lt $changeDate } |
Sort-Object StartMeasurementDate -Descending | Select-Object -First 5
$postChange = Get-WmiObject -Namespace "rootcimv2reliability" -Class "Win32_ReliabilityStabilityMetrics" |
Where-Object { [Management.ManagementDateTimeConverter]::ToDateTime($_.StartMeasurementDate) -ge $changeDate } |
Sort-Object StartMeasurementDate
$preAvg = ($preChange | Measure-Object SystemStabilityIndex -Average).Average
$postAvg = ($postChange | Measure-Object SystemStabilityIndex -Average).Average
Write-Host "Pre-change average stability: $([math]::Round($preAvg,2))"
Write-Host "Post-change average stability: $([math]::Round($postAvg,2))"
if ($postAvg -lt ($preAvg - 2)) {
Write-Host "WARNING: Stability has decreased significantly after the change" -ForegroundColor Red
} else {
Write-Host "Stability is acceptable post-change" -ForegroundColor Green
}
Summary
Reliability Monitor on Windows Server 2012 R2 provides a uniquely accessible, timeline-based view of system stability that complements the more detailed but complex Event Viewer. Its stability index score and correlated event timeline make it the fastest way to answer the critical question: “Did this problem start after a specific change?” The underlying RAC WMI data is fully accessible via PowerShell, enabling automated stability reporting, post-change validation checks, and early warning alerts when stability scores begin declining. For organizations without dedicated monitoring infrastructure, Reliability Monitor fills an important gap in the built-in toolset for tracking system health over time.