|
| 1 | +# Concept Mapping — SCOM ↔ Azure Monitor |
| 2 | + |
| 3 | +> The dual-track Rosetta Stone. Every architectural concept in this project, mapped 1:1 |
| 4 | +> across the two delivery tracks. Locked by [ADR 0006](decisions/0006-azmon-entity-model.md) |
| 5 | +> (entity alignment) and [ADR 0007](decisions/0007-naming-convention.md) (naming). |
| 6 | +
|
| 7 | +## Top-level concepts |
| 8 | + |
| 9 | +| Concept | SCOM | Azure Monitor Health Models | |
| 10 | +|---|---|---| |
| 11 | +| **Container for the whole model** | Distributed Application | Service Group + Health Model linked to it | |
| 12 | +| **Thing to be monitored** | Class instance | Entity (Azure Resource Entity / Logical Entity) | |
| 13 | +| **Class definition / type** | `<ClassType>` in MP XML | Entity type implied by ARM resource type or logical entity definition | |
| 14 | +| **How instances are found** | Discovery (PowerShell / WMI / script) | ARM resource membership in the Service Group + Resource Graph queries | |
| 15 | +| **Hierarchy** | Hosting relationships + reference relationships | Parent/child relationships in the entity graph | |
| 16 | +| **Health-bearing condition** | Monitor (Unit / Aggregate / Dependency) | Signal + threshold on an entity | |
| 17 | +| **Numeric data collection** | Performance Collection Rule | Metric / KQL query on a DCR-collected log | |
| 18 | +| **Event collection** | Event Collection Rule | KQL query on `Event` table populated by AMA | |
| 19 | +| **Alerting** | Alert generated by a Monitor or Rule | Alert Rule on the *signal* (separate from health state) | |
| 20 | +| **Customer tuning** | Override (in companion override pack) | Bicep parameter (in tier `.bicepparam` file) | |
| 21 | +| **Maintenance window** | Maintenance Mode | Manual `Healthy` health objective or impact override | |
| 22 | +| **Visualization** | SCOM Health Explorer + SquaredUp Dashboard Server | Azure portal Health Model view + Workbooks + SquaredUp Cloud | |
| 23 | + |
| 24 | +## Entity / class mapping |
| 25 | + |
| 26 | +Per [ADR 0005](decisions/0005-scom-class-hierarchy.md) and |
| 27 | +[ADR 0006](decisions/0006-azmon-entity-model.md), entities map 1:1 across tracks. |
| 28 | + |
| 29 | +| Logical entity | SCOM class | Azure Monitor entity type | ARM resource type (if applicable) | |
| 30 | +|---|---|---|---| |
| 31 | +| Cluster | `AzureLocal.Cluster` | Azure Resource Entity | `Microsoft.AzureStackHCI/clusters` | |
| 32 | +| Node | `AzureLocal.Node` | Azure Resource Entity | `Microsoft.HybridCompute/machines` | |
| 33 | +| Storage Pool | `AzureLocal.StoragePool` | Logical Entity (custom signals) | n/a — inferred from cluster | |
| 34 | +| Volume | `AzureLocal.Volume` | Logical Entity | n/a | |
| 35 | +| Storage Tier | `AzureLocal.StorageTier` | Logical Entity | n/a | |
| 36 | +| Network Intent | `AzureLocal.NetworkIntent` | Logical Entity | n/a (inferred from `MS-SDDC-Mgmt`) | |
| 37 | +| Storage Replica | `AzureLocal.StorageReplica` | Logical Entity | n/a | |
| 38 | +| Update / LCM | `AzureLocal.UpdateState` | Logical Entity | partly ARM `solutionUpdates` | |
| 39 | +| Arc Resource Bridge | `AzureLocal.ResourceBridge` | Azure Resource Entity | `Microsoft.ResourceConnector/appliances` | |
| 40 | +| AKS Arc platform | `AzureLocal.AKSArcPlatform` | Azure Resource Entity | `Microsoft.Kubernetes/connectedClusters` | |
| 41 | +| DCMA / Cloud Agent | `AzureLocal.DCMA` | Logical Entity | n/a | |
| 42 | +| HCI registration | `AzureLocal.HCIRegistration` | derived from cluster ARM | n/a | |
| 43 | +| Custom Location | `AzureLocal.CustomLocation` | Azure Resource Entity | `Microsoft.ExtendedLocation/customLocations` | |
| 44 | +| Logical Network | `AzureLocal.LogicalNetwork` | Azure Resource Entity | `Microsoft.AzureStackHCI/logicalNetworks` | |
| 45 | +| Managed Identity | `AzureLocal.ManagedIdentity` | Azure Resource Entity | `Microsoft.ManagedIdentity/userAssignedIdentities` (and system MI on cluster) | |
| 46 | +| Deployment SPN | `AzureLocal.DeploymentSPN` | Logical Entity (Graph) | n/a (Microsoft Graph) | |
| 47 | +| Key Vault | `AzureLocal.KeyVault` | Azure Resource Entity | `Microsoft.KeyVault/vaults` | |
| 48 | +| Storage Account | `AzureLocal.StorageAccount` | Azure Resource Entity | `Microsoft.Storage/storageAccounts` | |
| 49 | +| RBAC assignments | `AzureLocal.RBAC` | Logical Entity | n/a | |
| 50 | +| Update Manager linkage | `AzureLocal.UpdateMgrLinkage` | Logical Entity | `Microsoft.Maintenance/configurationAssignments` | |
| 51 | +| Data Collection Rule | `AzureLocal.DCR` | Azure Resource Entity | `Microsoft.Insights/dataCollectionRules` | |
| 52 | +| Log Analytics Workspace | `AzureLocal.Workspace` | Azure Resource Entity | `Microsoft.OperationalInsights/workspaces` | |
| 53 | + |
| 54 | +## Health state mapping |
| 55 | + |
| 56 | +| SCOM | Azure Monitor | Color | Generic state | |
| 57 | +|---|---|---|---| |
| 58 | +| `Success` | `Healthy` | Green | Healthy | |
| 59 | +| `Warning` | `Degraded` | Yellow | Degraded | |
| 60 | +| `Error` | `Unhealthy` | Red | Critical | |
| 61 | +| `Uninitialized` | `Unknown` | Grey | Unknown | |
| 62 | + |
| 63 | +## Signal naming parity |
| 64 | + |
| 65 | +Per [ADR 0007](decisions/0007-naming-convention.md), every threshold has a single logical |
| 66 | +name, with mechanical translation to each track's idiom: |
| 67 | + |
| 68 | +| Logical name | SCOM override key | Azure Monitor Bicep param | |
| 69 | +|---|---|---| |
| 70 | +| `Volume.FreeSpace.WarnPercent` | `Volume.FreeSpace.WarnPercent` | `volumeFreeSpaceWarningThresholdPct` | |
| 71 | +| `Volume.FreeSpace.CritPercent` | `Volume.FreeSpace.CritPercent` | `volumeFreeSpaceCriticalThresholdPct` | |
| 72 | +| `Node.CPU.WarnPercent` | `Node.CPU.WarnPercent` | `nodeCpuWarningThresholdPct` | |
| 73 | +| `Node.CPU.CritPercent` | `Node.CPU.CritPercent` | `nodeCpuCriticalThresholdPct` | |
| 74 | +| `KeyVault.SecretExpiry.WarnDays` | `KeyVault.SecretExpiry.WarnDays` | `keyVaultSecretExpiryWarningDays` | |
| 75 | + |
| 76 | +The translation is mechanical: |
| 77 | +- SCOM key uses dot-separated PascalCase verbatim from the logical name. |
| 78 | +- Bicep param uses camelCase, expands `Pct` → `Pct` and `Days` → `Days`, prefixed by entity. |
| 79 | + |
| 80 | +A round-trip linter validates parity at PR time (planned for Phase 3). |
| 81 | + |
| 82 | +## Rollup mapping |
| 83 | + |
| 84 | +| SCOM | Azure Monitor | |
| 85 | +|---|---| |
| 86 | +| Dependency Monitor with `Worst Of` algorithm | Child entity with `Standard` impact | |
| 87 | +| Dependency Monitor with `Best Of` algorithm | Child entity with custom impact rule | |
| 88 | +| Dependency Monitor disabled (or maintenance mode) | Child entity with `Suppressed` impact | |
| 89 | +| Aggregate Monitor (Availability/Performance/Configuration/Security) | Health Objective on the entity, scoped per dimension | |
| 90 | + |
| 91 | +## Alert mapping |
| 92 | + |
| 93 | +See [ADR 0009](decisions/0009-alert-vs-health-state.md). Alerts are intentionally separate |
| 94 | +from health state in both tracks. |
| 95 | + |
| 96 | +| SCOM | Azure Monitor | |
| 97 | +|---|---| |
| 98 | +| Monitor with `Generate alert` enabled | Alert rule on the underlying signal (metric / KQL) | |
| 99 | +| Alert severity (Critical / Warning / Information) | Alert severity (0–4) → action group routing | |
| 100 | +| Notification subscription | Action group | |
| 101 | +| Alert auto-resolve when monitor returns to Healthy | Alert auto-resolve via metric/log condition | |
| 102 | + |
| 103 | +## Migration implications |
| 104 | + |
| 105 | +Because the conceptual model is identical and naming is parity-locked, a customer running |
| 106 | +the SCOM MP today can migrate to the Azure Monitor track without re-learning *what* is |
| 107 | +monitored — only the surface differs. The |
| 108 | +[Migration Guide](../comparison/index.md) (Phase 5) walks through this end-to-end. |
| 109 | + |
| 110 | +## References |
| 111 | + |
| 112 | +- ADR 0005 — [SCOM class hierarchy](decisions/0005-scom-class-hierarchy.md) |
| 113 | +- ADR 0006 — [Azure Monitor entity model alignment](decisions/0006-azmon-entity-model.md) |
| 114 | +- ADR 0007 — [Naming convention](decisions/0007-naming-convention.md) |
| 115 | +- ADR 0009 — [Alert vs health-state separation](decisions/0009-alert-vs-health-state.md) |
| 116 | +- [Brian Wren, "Designing a Service Model" (SC 2012 R2 module 6)](https://learn.microsoft.com/en-us/shows/system-center-2012-r2-operations-manager-management-packs/) |
| 117 | +- [Azure Monitor Health Models — overview](https://learn.microsoft.com/en-us/azure/azure-monitor/health-models/) |
| 118 | +- [Azure Service Groups overview](https://learn.microsoft.com/en-us/azure/governance/service-groups/overview) |
0 commit comments