Skip to content

Commit de266cb

Browse files
feat(phase-2): docs reorg — promote Design to top-level section + author ADRs 0002-0010
- Move decisions/ -> docs/design/decisions/ so ADRs render in nav - Move docs/project/customization.md -> docs/design/customization.md - New design pages: index, scope-topology, health-model, signal-catalog, concept-mapping - New ADRs (all Proposed; cite MS Learn / Brian Wren / Kevin Holman): 0002 Signal source, 0003 Rollup policy, 0004 SCOM discovery, 0005 SCOM class hierarchy, 0006 AzMon entity model, 0007 Naming convention, 0008 Customization strategy, 0009 Alert vs health-state, 0010 Cloud prerequisites contract - Rewrite track indexes (SCOM MP, Azure Monitor) as track-specific only - Repurpose comparison/ as Migration section (concept table moved to design/) - Update PLAN.md Phase 2 checklist; fix internal links
1 parent 73ebd57 commit de266cb

25 files changed

Lines changed: 2090 additions & 74 deletions

PLAN.md

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ Both tracks use **worst-state** rollup as the default:
291291
- An expiring Key Vault secret rolls up to **Warning** at 30 days, **Critical** at 7 days.
292292
- VMs / workloads (out of scope here) that are stopped intentionally can be configured with **Suppressed** impact in workload-companion MPs.
293293

294-
### Customization Strategy *(see [Customization](docs/project/customization.md))*
294+
### Customization Strategy *(see [Customization](docs/design/customization.md))*
295295

296296
Every threshold, alert severity, and behavior is **parameterized** so customers customize without forking:
297297

@@ -320,34 +320,32 @@ Every threshold, alert severity, and behavior is **parameterized** so customers
320320
- [x] Implement all three Mermaid diagrams in `diagrams/mermaid/`
321321

322322
### Phase 2 — Health Model Design
323-
- [ ] Author ADRs in `decisions/` (matches `AzureLocal/platform` template)
324-
- [ ] ADR 0001 — Scope & topology (infra only — 3 layers, ~25 entities)
325-
- [ ] ADR 0002 — Primary signal source (Azure Local PowerShell APIs + ARM/Resource Graph for Azure-side)
326-
- [ ] ADR 0003 — Health rollup policy (worst-state default + impact exceptions)
327-
- [ ] ADR 0004 — SCOM discovery strategy (PowerShell Discovery, not WMI)
328-
- [ ] ADR 0005 — SCOM class hierarchy + hosting relationships (3-layer model)
329-
- [ ] ADR 0006 — Azure Monitor entity model alignment (mirrors SCOM 1:1; uses ARM resources where available)
330-
- [ ] ADR 0007 — Naming convention (cross-track parity)
331-
- [ ] ADR 0008 — Customization strategy (sealed MP + override pack tiers; Bicep params + tiers)
332-
- [ ] ADR 0009 — Alert vs health-state separation policy
333-
- [ ] ADR 0010 — Cloud-side prerequisites contract (HCI Insights, AMA, DCMA, Service Group, RBAC, networking)
334-
- [ ] Build full structural inventory tables in PLAN.md / `design/`
335-
- [ ] Component inventory (~25 entities across 3 layers)
336-
- [ ] Signal inventory (~50–70 signals × dimensions × thresholds × source cmdlet)
337-
- [ ] SCOM class hierarchy table
338-
- [ ] Azure Monitor entity graph table
339-
- [ ] SCOM ↔ Azure Monitor concept mapping table
340-
- [ ] Threshold parameter catalog (cross-track parity table)
323+
- [x] Reorg docs site: add top-level Design section (cross-cutting), make track sections track-specific only
324+
- [x] Move ADRs into `docs/design/decisions/` so they render in MkDocs
325+
- [x] Move Customization into `docs/design/`
326+
- [x] Move SCOM ↔ AzMon concept mapping into `docs/design/concept-mapping.md`; comparison/ becomes Migration only
327+
- [x] Author ADRs in `docs/design/decisions/` (matches `AzureLocal/platform` template)
328+
- [x] ADR 0001 — Scope & topology (infra only — 3 layers, ~25 entities) — Proposed
329+
- [x] ADR 0002 — Primary signal source (Azure Local PowerShell APIs + ARM/Resource Graph) — Proposed
330+
- [x] ADR 0003 — Health rollup policy (worst-state default + impact exceptions) — Proposed
331+
- [x] ADR 0004 — SCOM discovery strategy (PowerShell Discovery, not WMI) — Proposed
332+
- [x] ADR 0005 — SCOM class hierarchy + hosting relationships (3-layer model) — Proposed
333+
- [x] ADR 0006 — Azure Monitor entity model alignment (mirrors SCOM 1:1) — Proposed
334+
- [x] ADR 0007 — Naming convention (cross-track parity) — Proposed
335+
- [x] ADR 0008 — Customization strategy (sealed MP + override pack tiers; Bicep params + tiers) — Proposed
336+
- [x] ADR 0009 — Alert vs health-state separation policy — Proposed
337+
- [x] ADR 0010 — Cloud-side prerequisites contract (HCI Insights, AMA, DCMA, Service Group, RBAC, networking) — Proposed
338+
- [x] Build full structural inventory tables in `docs/design/`
339+
- [x] Component inventory (~25 entities across 3 layers) — `scope-topology.md`
340+
- [x] Signal inventory (~60 signals × dimensions × thresholds × source) — `signal-catalog.md`
341+
- [x] SCOM ↔ Azure Monitor concept mapping table — `concept-mapping.md`
342+
- [x] Cloud-side prerequisites table — `azure-monitor/prerequisites.md`
341343
- [ ] Complete draw.io diagrams (replace Phase 1 stubs with real visuals)
342344
- [ ] `scom-health-model.drawio` — full 3-layer rollup tree
343345
- [ ] `azure-monitor-entity-graph.drawio` — entity graph w/ relationships
344346
- [ ] `concept-comparison.drawio` — side-by-side mapping
345347
- [ ] Refine Mermaid sources to match ADR 0005 / 0006 names
346-
- [ ] Write `docs/scom-mp/health-model.md` (embedded Mermaid + draw.io exports)
347-
- [ ] Write `docs/azure-monitor/concepts.md` (entities, signals, relationships)
348-
- [ ] Write `docs/comparison/index.md` (concept mapping table)
349-
- [ ] Phase 2 sign-off gate: ADRs Accepted, inventory reviewed, diagrams complete
350-
348+
- [ ] Phase 2 sign-off gate: all 10 ADRs Accepted, inventory reviewed by maintainers, draw.io
351349
### Phase 3 — Track 1: SCOM MP Authoring
352350
- [ ] Watch/review Brian Wren's SC 2012 R2 video series (23 modules) as primary authoring reference — see [Brian Wren Resources](#brian-wren--mpauthor-resources) below
353351
- [ ] Set up VSAE project + fragment library references (Kevin Holman fragments)

docs/azure-monitor/index.md

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,42 @@ description: Azure Monitor Health Models for Azure Local (HCI) — overview.
55

66
# Azure Monitor Health Models
77

8-
> Track 2 — Native Azure Monitor health monitoring for Azure Local clusters.
8+
> **Track 2** — Native Azure Monitor health monitoring for Azure Local clusters.
9+
10+
This section covers **how the design is implemented** as an Azure Monitor Health Model.
11+
The *design itself* — entity model, signal catalog, rollup policy, customization — is
12+
track-agnostic and lives in [Design](../design/index.md). Read that first.
913

1014
!!! tip "Start here — Prerequisites"
1115
Before building or deploying the health model, work through the [Prerequisites](prerequisites.md)
1216
page. The model itself collects nothing — it pulls signals from data that other features (HCI
1317
Insights, AMA, DCMA, Resource Health) must already be flowing.
1418

15-
!!! info "Coming soon"
16-
The full health model design lands in Phase 2. See [PLAN.md](https://github.com/AzureLocal/azurelocal-scom-mp/blob/main/PLAN.md) for the roadmap.
19+
!!! info "Phase 4 — coming after Phase 2 sign-off"
20+
Implementation lands in Phase 4 once the [Design ADRs](../design/decisions/index.md)
21+
move from Proposed to Accepted. Roadmap in
22+
[PLAN.md](https://github.com/AzureLocal/azurelocal-scom-mp/blob/main/PLAN.md).
23+
24+
## What lives here
25+
26+
| Page | Content |
27+
|---|---|
28+
| [Prerequisites](prerequisites.md) | Cloud-side setup contract (HCI Insights, AMA, DCMA, RBAC, networking) |
29+
| Entities (planned) | Implementation of [ADR 0006](../design/decisions/0006-azmon-entity-model.md) — Service Group + per-entity definitions |
30+
| Signals (planned) | DCMA metrics + KQL queries per [Signal Catalog](../design/signal-catalog.md) |
31+
| Health Objectives (planned) | Per-entity Availability/Performance/Configuration/Security objectives |
32+
| Alerts (planned) | Alert rules + action groups per [ADR 0009](../design/decisions/0009-alert-vs-health-state.md) |
33+
| Bicep modules (planned) | `health-model.bicep`, `service-group.bicep`, `alerts.bicep` + tier files |
34+
| Workbook (planned) | Azure Monitor Workbook for visualization |
35+
| Diagrams | Entity graph (Mermaid + draw.io), health propagation flow |
36+
37+
## Where to start
38+
39+
1. **[Prerequisites](prerequisites.md)** — make sure your cloud side is wired up
40+
2. [Design overview](../design/index.md) — the conceptual foundation
41+
3. [Azure Monitor entity model ADR](../design/decisions/0006-azmon-entity-model.md)
42+
4. [Cloud prerequisites contract ADR](../design/decisions/0010-cloud-prerequisites-contract.md)
43+
5. [Customization](../design/customization.md) — how operators tune the Azure Monitor track
1744

1845
## What will be here
1946

docs/comparison/index.md

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
11
---
2-
title: SCOM Azure Monitor Comparison
3-
description: Side-by-side concept mapping between SCOM and Azure Monitor Health Models.
2+
title: Migration — SCOM Azure Monitor
3+
description: SCOM-to-Azure-Monitor migration guidance for Azure Local health monitoring.
44
---
55

6-
# SCOM Azure Monitor Comparison
6+
# Migration — SCOM Azure Monitor
77

8-
> Side-by-side concept crosswalk between the two health monitoring tracks.
8+
> **Phase 5 deliverable.** End-to-end migration guidance for operators moving from the
9+
> SCOM track to the Azure Monitor track (or running both side by side).
910
10-
!!! info "Coming soon"
11-
Full comparison docs are planned for Phase 2. The concept mapping table is available in [REFERENCES.md](https://github.com/AzureLocal/azurelocal-scom-mp/blob/main/REFERENCES.md).
11+
!!! info "Phase 5 — coming after Phase 3 + 4"
12+
Migration walkthroughs land after both tracks are authored and validated.
13+
See [PLAN.md](https://github.com/AzureLocal/azurelocal-scom-mp/blob/main/PLAN.md).
1214

13-
## Concept mapping (quick reference)
15+
## Looking for the concept crosswalk?
1416

15-
| SCOM | Azure Monitor |
17+
The side-by-side concept mapping (SCOM ↔ Azure Monitor) lives under Design now —
18+
it's a track-agnostic foundation, not migration content:
19+
20+
**[Design / Concept Mapping (SCOM ↔ AzMon)](../design/concept-mapping.md)**
21+
22+
## What this section will cover
23+
24+
| Page (planned) | Content |
25+
|---|---|
26+
| Migration walkthrough | Step-by-step move from SCOM MP to Azure Monitor Health Model |
27+
| Migration tool output | Auto-migrated vs manual migration items via the Microsoft `MP2AzMon` tool |
28+
| Side-by-side operation | How to run both tracks against the same Azure Local during transition |
29+
| Cutover checklist | Pre-cutover, cutover day, post-cutover validation |
30+
| Lessons learned | Common gotchas operators hit during migration |
31+
32+
## Why migrate (or not)?
33+
34+
| Reason to stay on SCOM | Reason to move to Azure Monitor |
1635
|---|---|
17-
| Management Pack | DCR + Alert Rules + Workbook (ARM/Bicep bundle) |
18-
| Health Model (rollup tree) | Azure Monitor Health Model (preview) |
19-
| Unit Monitor | Signal on an entity (metric or log query) |
20-
| Aggregate Monitor | Generic entity aggregating child health |
21-
| Dependency Monitor | Relationship with health propagation |
22-
| Health State (Green/Yellow/Red) | Healthy / Degraded / Unhealthy |
23-
| Distributed Application | Service Group + Health Model root entity |
24-
| SLA Reporting | Azure Monitor SLI/SLO (public preview) |
25-
| Discovery | Azure Resource Graph / Service Group auto-discovery |
26-
| Override | Signal threshold / entity impact setting |
27-
| Notification Subscription | Action Group |
28-
| Data Warehouse | Log Analytics Workspace |
29-
| Operations Console | Azure Portal + Workbooks + Grafana |
36+
| Existing SCOM investment + skill set | No SCOM infrastructure to maintain |
37+
| Hybrid estate that includes non-Azure-Local servers | Azure-only / Arc-only estate |
38+
| Custom SCOM MPs already in production | Greenfield Azure Local deployment |
39+
| Need on-prem alerting independent of Azure | Want Azure-native alerting + Workbooks + Grafana |
40+
41+
The dual-track design of this project means you don't have to choose — both surfaces
42+
read from the same conceptual model.
43+

docs/design/concept-mapping.md

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
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)
File renamed without changes.

decisions/0001-scope-and-topology.md renamed to docs/design/decisions/0001-scope-and-topology.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ deployed *as part of* an Azure Local deployment, modeled across **three layers**
8484
- SQL MI / AVD / other workloads
8585
- Customer applications and their dependencies
8686

87-
These are tracked in the [Roadmap](../docs/project/roadmap.md) as future companion MPs that
87+
These are tracked in the [Roadmap](../../project/roadmap.md) as future companion MPs that
8888
take a *dependency* on this health model.
8989

9090
## Consequences

0 commit comments

Comments
 (0)