Datto RMM Alert Management
Overview
Alerts are the primary notification mechanism in Datto RMM. They're generated by monitors when conditions are met - disk space low, service stopped, CPU high, etc. Each alert contains context-specific data based on the monitor type. This skill covers alert handling, the 25+ context types, and resolution workflows.
Anti-triggers
- A SOC-confirmed threat rather than a monitor firing —
ransomware_ctx and antivirus_ctx alerts are monitor output, not
analyst verdicts; use rocketcyber-incidents.
- Backup failures — appliance and SaaS backup raise alerts on their
own surfaces; use
datto-bcdr-api-patterns or
unitrends-api-patterns.
- VSA alarms — Kaseya's other RMM raises its own alarm objects; use
kaseya-vsa-api-patterns.
- An alert raised by a different RMM — every RMM here emits objects
called alerts with their own severity words; only the enrolled agent
disambiguates. Use
atera-alerts, ninjaone-alerts,
superops-alerts, or connectwise-automate-alerts.
- A signal that pages a human — incident platforms also call their
inbound events alerts, but those route to a responder rather than
resolving on the device; use
pagerduty-alerts or rootly-alerts.
Key Concepts
Alert Structure
Every alert has:
- alertUid - Unique identifier for the alert
- alertType - Category of alert (Device Offline, Monitor, etc.)
- priority - Severity level (Critical, High, Moderate, Low, Information)
- alertContext - Type-specific data with
@class discriminator
- timestamp - When the alert was raised (Unix milliseconds)
Alert Priorities
| Priority |
Value |
Description |
Typical Response |
| Critical |
Critical |
Severe impact, immediate action |
15 minutes |
| High |
High |
Significant issue |
1 hour |
| Moderate |
Moderate |
Notable but manageable |
4 hours |
| Low |
Low |
Minor issue |
8 hours |
| Information |
Information |
Informational only |
Best effort |
Alert States
| State |
Description |
open |
Active, requires attention |
resolved |
Closed, issue addressed |
Field Reference
Alert Object
interface Alert {
// Identifiers
alertUid: string; // Unique alert ID
alertSourceInfo: AlertSource; // Source of the alert
// Device Info
deviceUid: string; // Device that generated alert
hostname: string; // Device hostname
// Classification
alertType: string; // "Monitor", "Device Offline", etc.
priority: AlertPriority; // Critical, High, Moderate, Low, Information
alertMessage: string; // Human-readable message
// Context (varies by @class)
alertContext: AlertContext; // Type-specific data
// Timestamps (Unix milliseconds)
timestamp: number; // When alert was raised
resolvedAt?: number; // When resolved (if resolved)
// Resolution
resolved: boolean;
resolvedBy?: string; // Who resolved it
resolution?: string; // Resolution notes
}
type AlertPriority = 'Critical' | 'High' | 'Moderate' | 'Low' | 'Information';
Alert Context Types
Datto RMM has 25+ alert context types, identified by the @class field in alertContext. Each type carries fields specific to that monitor.
@class |
Monitor |
Key Fields |
antivirus_ctx |
Antivirus status/detection |
avProduct, avStatus, threatName, threatPath |
comp_script_ctx |
Component script execution |
componentName, exitCode, stdout, stderr |
custom_snmp_ctx |
SNMP monitoring |
oid, value, threshold, comparison |
disk_health_ctx |
ESXi disk health |
diskName, status, smartStatus, temperature |
eventlog_ctx |
Windows Event Log |
logName, source, eventId, eventType, message |
fan_ctx |
ESXi fan status |
fanName, status, rpm |
fs_object_ctx |
File/folder size |
path, size, threshold, isDirectory |
online_offline_status_ctx |
Device online/offline |
status, lastSeen, offlineDuration |
patch_ctx |
Windows patch status |
patchCount, criticalCount, rebootRequired |
perf_disk_usage_ctx |
Disk usage/space |
drive, usagePercent, freeSpace, usedSpace |
perf_mon_ctx |
Windows Performance Counter |
counter, instance, value, threshold |
perf_resource_usage_ctx |
CPU/Memory usage |
resource, usagePercent, duration, processName |
ping_ctx |
Network ping |
host, latency, packetLoss, status |
process_resource_usage_ctx |
Process resource usage |
processName, pid, cpuUsage, memoryUsage |
process_status_ctx |
Process running/stopped |
processName, status, expectedStatus |
psu_ctx |
ESXi power supply |
psuName, status, wattage |
ransomware_ctx |
Ransomware detection |
detectionType, path, action, fileCount |
sec_management_ctx |
Webroot/security management |
product, status, threatCount, licenseExpiry |
srvc_resource_usage_ctx |
Windows Service resource usage |
serviceName, cpuUsage, memoryUsage |
srvc_status_ctx |
Windows Service status |
serviceName, status, expectedStatus, startType |
sw_action_ctx |
Software install/remove |
action, softwareName, version, publisher |
temperature_ctx |
ESXi temperature |
sensorName, temperature, threshold, status |
wmi_ctx |
WMI query monitoring |
query, namespace, property, value |
See references/alert-contexts.md for the complete field definitions and example alerts for each context type.
API Patterns
Get All Open Alerts
GET /api/v2/alerts/open
Authorization: Bearer {token}
Get Open Alerts for Site
GET /api/v2/site/{siteUid}/alerts/open
Authorization: Bearer {token}
Get Open Alerts for Device
GET /api/v2/device/{deviceUid}/alerts/open
Authorization: Bearer {token}
Get Resolved Alerts
GET /api/v2/alerts/resolved?max=250
Authorization: Bearer {token}
Get Alerts Since Timestamp
GET /api/v2/alerts/open?since=1707991200000
Authorization: Bearer {token}
Resolve an Alert
POST /api/v2/alert/{alertUid}/resolve
Authorization: Bearer {token}
Content-Type: application/json
{
"resolution": "Cleared disk space by removing temp files"
}
Note: Muting alerts (PUT to /alert/{alertUid}/mute) is deprecated. Use resolve instead.
Workflows
Alert Triage by Priority
async function triageAlerts(client) {
const alerts = await client.request('/api/v2/alerts/open');
const triaged = {
critical: [],
high: [],
moderate: [],
low: [],
information: []
};
alerts.alerts.forEach(alert => {
const bucket = alert.priority.toLowerCase();
if (triaged[bucket]) {
triaged[bucket].push(alert);
}
});
return triaged;
}
Context-Aware Alert Handling
function getAlertRecommendation(alert) {
const ctx = alert.alertContext;
switch (ctx['@class']) {
case 'perf_disk_usage_ctx':
return {
severity: ctx.usagePercent >= 95 ? 'critical' : 'warning',
action: 'Clear disk space or expand volume',
steps: [
'Run Disk Cleanup utility',
'Clear temp files',
'Check for large log files',
'Consider expanding disk'
]
};
case 'srvc_status_ctx':
return {
severity: 'high',
action: `Start the ${ctx.displayName} service`,
steps: [
`Run: net start "${ctx.serviceName}"`,
'Check Event Log for failure reason',
'Verify service account credentials',
'Check dependencies'
]
};
case 'ransomware_ctx':
return {
severity: 'critical',
action: 'IMMEDIATE: Isolate device and investigate',
steps: [
'Disconnect from network immediately',
'Do NOT restart the device',
'Contact security team',
'Preserve evidence',
'Check for lateral movement'
]
};
case 'online_offline_status_ctx':
return {
severity: ctx.offlineDuration > 60 ? 'high' : 'moderate',
action: 'Verify device connectivity',
steps: [
'Ping device from network',
'Check physical connectivity',
'Verify no scheduled maintenance',
'Contact on-site user if available'
]
};
default:
return {
severity: 'moderate',
action: 'Review alert details',
steps: ['Investigate alert context', 'Check device status']
};
}
}
See references/examples.md for batch alert resolution and alert summary report examples.
Error Handling
Common Alert API Errors
| Error |
Status |
Cause |
Resolution |
| Alert not found |
404 |
Invalid alertUid |
Verify alert exists |
| Already resolved |
400 |
Alert already closed |
Check alert state first |
| Permission denied |
403 |
API restrictions |
Check API permissions |
Error Handling Pattern
async function safeResolveAlert(client, alertUid, resolution) {
try {
await client.request(`/api/v2/alert/${alertUid}/resolve`, {
method: 'POST',
body: JSON.stringify({ resolution })
});
return { success: true };
} catch (error) {
if (error.status === 404) {
return { success: false, reason: 'Alert not found - may already be resolved' };
}
if (error.status === 400) {
return { success: false, reason: 'Alert already resolved' };
}
throw error;
}
}
Best Practices
- Prioritize by severity - Handle Critical and High alerts first
- Use context data - Each @class has specific actionable fields
- Document resolutions - Include what was done and outcome
- Set up escalation - Auto-escalate stale high-priority alerts
- Monitor patterns - Repeated alerts may indicate larger issues
- Use site filtering - Scope alerts to relevant sites when possible
- Handle ransomware specially - Immediate isolation protocol
- Track resolution time - Measure alert-to-resolution duration
- Correlate alerts - Multiple alerts may share root cause
- Review resolved alerts - Learn from past incidents
Alert Priority Matrix
| Context Type |
Typical Priority |
Notes |
ransomware_ctx |
Critical |
Always immediate action |
online_offline_status_ctx (server) |
High |
Business impact |
perf_disk_usage_ctx (>95%) |
High |
Data loss risk |
srvc_status_ctx (critical service) |
High |
Service impact |
antivirus_ctx (threat detected) |
High |
Security risk |
perf_resource_usage_ctx |
Moderate |
Performance impact |
patch_ctx (critical patches) |
Moderate |
Security debt |
eventlog_ctx |
Varies |
Based on event severity |
sw_action_ctx |
Low |
Informational |
Related Skills
1---2name: datto-rmm-alerts3description: Datto RMM alert structure, priorities, and the 25+ alert context types (antivirus_ctx, eventlog_ctx, perf_disk_usage_ctx, ransomware_ctx, and more), each with its own type-specific fields. Covers alert resolution workflows and context-specific triage guidance.4---56# Datto RMM Alert Management78## Overview910Alerts are the primary notification mechanism in Datto RMM. They're generated by monitors when conditions are met - disk space low, service stopped, CPU high, etc. Each alert contains context-specific data based on the monitor type. This skill covers alert handling, the 25+ context types, and resolution workflows.1112## Anti-triggers1314- **A SOC-confirmed threat rather than a monitor firing** —15 `ransomware_ctx` and `antivirus_ctx` alerts are monitor output, not16 analyst verdicts; use `rocketcyber-incidents`.17- **Backup failures** — appliance and SaaS backup raise alerts on their18 own surfaces; use `datto-bcdr-api-patterns` or19 `unitrends-api-patterns`.20- **VSA alarms** — Kaseya's other RMM raises its own alarm objects; use21 `kaseya-vsa-api-patterns`.22- **An alert raised by a different RMM** — every RMM here emits objects23 called alerts with their own severity words; only the enrolled agent24 disambiguates. Use `atera-alerts`, `ninjaone-alerts`,25 `superops-alerts`, or `connectwise-automate-alerts`.26- **A signal that pages a human** — incident platforms also call their27 inbound events alerts, but those route to a responder rather than28 resolving on the device; use `pagerduty-alerts` or `rootly-alerts`.2930## Key Concepts3132### Alert Structure3334Every alert has:35- **alertUid** - Unique identifier for the alert36- **alertType** - Category of alert (Device Offline, Monitor, etc.)37- **priority** - Severity level (Critical, High, Moderate, Low, Information)38- **alertContext** - Type-specific data with `@class` discriminator39- **timestamp** - When the alert was raised (Unix milliseconds)4041### Alert Priorities4243| Priority | Value | Description | Typical Response |44|----------|-------|-------------|------------------|45| Critical | `Critical` | Severe impact, immediate action | 15 minutes |46| High | `High` | Significant issue | 1 hour |47| Moderate | `Moderate` | Notable but manageable | 4 hours |48| Low | `Low` | Minor issue | 8 hours |49| Information | `Information` | Informational only | Best effort |5051### Alert States5253| State | Description |54|-------|-------------|55| `open` | Active, requires attention |56| `resolved` | Closed, issue addressed |5758## Field Reference5960### Alert Object6162```typescript63interface Alert {64 // Identifiers65 alertUid: string; // Unique alert ID66 alertSourceInfo: AlertSource; // Source of the alert6768 // Device Info69 deviceUid: string; // Device that generated alert70 hostname: string; // Device hostname7172 // Classification73 alertType: string; // "Monitor", "Device Offline", etc.74 priority: AlertPriority; // Critical, High, Moderate, Low, Information75 alertMessage: string; // Human-readable message7677 // Context (varies by @class)78 alertContext: AlertContext; // Type-specific data7980 // Timestamps (Unix milliseconds)81 timestamp: number; // When alert was raised82 resolvedAt?: number; // When resolved (if resolved)8384 // Resolution85 resolved: boolean;86 resolvedBy?: string; // Who resolved it87 resolution?: string; // Resolution notes88}8990type AlertPriority = 'Critical' | 'High' | 'Moderate' | 'Low' | 'Information';91```9293## Alert Context Types9495Datto RMM has 25+ alert context types, identified by the `@class` field in `alertContext`. Each type carries fields specific to that monitor.9697| `@class` | Monitor | Key Fields |98|----------|---------|------------|99| `antivirus_ctx` | Antivirus status/detection | avProduct, avStatus, threatName, threatPath |100| `comp_script_ctx` | Component script execution | componentName, exitCode, stdout, stderr |101| `custom_snmp_ctx` | SNMP monitoring | oid, value, threshold, comparison |102| `disk_health_ctx` | ESXi disk health | diskName, status, smartStatus, temperature |103| `eventlog_ctx` | Windows Event Log | logName, source, eventId, eventType, message |104| `fan_ctx` | ESXi fan status | fanName, status, rpm |105| `fs_object_ctx` | File/folder size | path, size, threshold, isDirectory |106| `online_offline_status_ctx` | Device online/offline | status, lastSeen, offlineDuration |107| `patch_ctx` | Windows patch status | patchCount, criticalCount, rebootRequired |108| `perf_disk_usage_ctx` | Disk usage/space | drive, usagePercent, freeSpace, usedSpace |109| `perf_mon_ctx` | Windows Performance Counter | counter, instance, value, threshold |110| `perf_resource_usage_ctx` | CPU/Memory usage | resource, usagePercent, duration, processName |111| `ping_ctx` | Network ping | host, latency, packetLoss, status |112| `process_resource_usage_ctx` | Process resource usage | processName, pid, cpuUsage, memoryUsage |113| `process_status_ctx` | Process running/stopped | processName, status, expectedStatus |114| `psu_ctx` | ESXi power supply | psuName, status, wattage |115| `ransomware_ctx` | Ransomware detection | detectionType, path, action, fileCount |116| `sec_management_ctx` | Webroot/security management | product, status, threatCount, licenseExpiry |117| `srvc_resource_usage_ctx` | Windows Service resource usage | serviceName, cpuUsage, memoryUsage |118| `srvc_status_ctx` | Windows Service status | serviceName, status, expectedStatus, startType |119| `sw_action_ctx` | Software install/remove | action, softwareName, version, publisher |120| `temperature_ctx` | ESXi temperature | sensorName, temperature, threshold, status |121| `wmi_ctx` | WMI query monitoring | query, namespace, property, value |122123See [references/alert-contexts.md](references/alert-contexts.md) for the complete field definitions and example alerts for each context type.124125## API Patterns126127### Get All Open Alerts128129```http130GET /api/v2/alerts/open131Authorization: Bearer {token}132```133134### Get Open Alerts for Site135136```http137GET /api/v2/site/{siteUid}/alerts/open138Authorization: Bearer {token}139```140141### Get Open Alerts for Device142143```http144GET /api/v2/device/{deviceUid}/alerts/open145Authorization: Bearer {token}146```147148### Get Resolved Alerts149150```http151GET /api/v2/alerts/resolved?max=250152Authorization: Bearer {token}153```154155### Get Alerts Since Timestamp156157```http158GET /api/v2/alerts/open?since=1707991200000159Authorization: Bearer {token}160```161162### Resolve an Alert163164```http165POST /api/v2/alert/{alertUid}/resolve166Authorization: Bearer {token}167Content-Type: application/json168169{170 "resolution": "Cleared disk space by removing temp files"171}172```173174**Note:** Muting alerts (PUT to /alert/{alertUid}/mute) is deprecated. Use resolve instead.175176## Workflows177178### Alert Triage by Priority179180```javascript181async function triageAlerts(client) {182 const alerts = await client.request('/api/v2/alerts/open');183184 const triaged = {185 critical: [],186 high: [],187 moderate: [],188 low: [],189 information: []190 };191192 alerts.alerts.forEach(alert => {193 const bucket = alert.priority.toLowerCase();194 if (triaged[bucket]) {195 triaged[bucket].push(alert);196 }197 });198199 return triaged;200}201```202203### Context-Aware Alert Handling204205```javascript206function getAlertRecommendation(alert) {207 const ctx = alert.alertContext;208209 switch (ctx['@class']) {210 case 'perf_disk_usage_ctx':211 return {212 severity: ctx.usagePercent >= 95 ? 'critical' : 'warning',213 action: 'Clear disk space or expand volume',214 steps: [215 'Run Disk Cleanup utility',216 'Clear temp files',217 'Check for large log files',218 'Consider expanding disk'219 ]220 };221222 case 'srvc_status_ctx':223 return {224 severity: 'high',225 action: `Start the ${ctx.displayName} service`,226 steps: [227 `Run: net start "${ctx.serviceName}"`,228 'Check Event Log for failure reason',229 'Verify service account credentials',230 'Check dependencies'231 ]232 };233234 case 'ransomware_ctx':235 return {236 severity: 'critical',237 action: 'IMMEDIATE: Isolate device and investigate',238 steps: [239 'Disconnect from network immediately',240 'Do NOT restart the device',241 'Contact security team',242 'Preserve evidence',243 'Check for lateral movement'244 ]245 };246247 case 'online_offline_status_ctx':248 return {249 severity: ctx.offlineDuration > 60 ? 'high' : 'moderate',250 action: 'Verify device connectivity',251 steps: [252 'Ping device from network',253 'Check physical connectivity',254 'Verify no scheduled maintenance',255 'Contact on-site user if available'256 ]257 };258259 default:260 return {261 severity: 'moderate',262 action: 'Review alert details',263 steps: ['Investigate alert context', 'Check device status']264 };265 }266}267```268269See [references/examples.md](references/examples.md) for batch alert resolution and alert summary report examples.270271## Error Handling272273### Common Alert API Errors274275| Error | Status | Cause | Resolution |276|-------|--------|-------|------------|277| Alert not found | 404 | Invalid alertUid | Verify alert exists |278| Already resolved | 400 | Alert already closed | Check alert state first |279| Permission denied | 403 | API restrictions | Check API permissions |280281### Error Handling Pattern282283```javascript284async function safeResolveAlert(client, alertUid, resolution) {285 try {286 await client.request(`/api/v2/alert/${alertUid}/resolve`, {287 method: 'POST',288 body: JSON.stringify({ resolution })289 });290 return { success: true };291 } catch (error) {292 if (error.status === 404) {293 return { success: false, reason: 'Alert not found - may already be resolved' };294 }295 if (error.status === 400) {296 return { success: false, reason: 'Alert already resolved' };297 }298 throw error;299 }300}301```302303## Best Practices3043051. **Prioritize by severity** - Handle Critical and High alerts first3062. **Use context data** - Each @class has specific actionable fields3073. **Document resolutions** - Include what was done and outcome3084. **Set up escalation** - Auto-escalate stale high-priority alerts3095. **Monitor patterns** - Repeated alerts may indicate larger issues3106. **Use site filtering** - Scope alerts to relevant sites when possible3117. **Handle ransomware specially** - Immediate isolation protocol3128. **Track resolution time** - Measure alert-to-resolution duration3139. **Correlate alerts** - Multiple alerts may share root cause31410. **Review resolved alerts** - Learn from past incidents315316## Alert Priority Matrix317318| Context Type | Typical Priority | Notes |319|--------------|-----------------|-------|320| `ransomware_ctx` | Critical | Always immediate action |321| `online_offline_status_ctx` (server) | High | Business impact |322| `perf_disk_usage_ctx` (>95%) | High | Data loss risk |323| `srvc_status_ctx` (critical service) | High | Service impact |324| `antivirus_ctx` (threat detected) | High | Security risk |325| `perf_resource_usage_ctx` | Moderate | Performance impact |326| `patch_ctx` (critical patches) | Moderate | Security debt |327| `eventlog_ctx` | Varies | Based on event severity |328| `sw_action_ctx` | Low | Informational |329330## Related Skills331332- [Datto RMM Devices](../devices/SKILL.md) - Device management333- [Datto RMM Sites](../sites/SKILL.md) - Site-level alert views334- [Datto RMM Jobs](../jobs/SKILL.md) - Remediation jobs335- [Datto RMM API Patterns](../api-patterns/SKILL.md) - Authentication and pagination