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.