Skip to content

Commit d17595b

Browse files
feat(phase-2): complete Phase 2 sign-off — ADRs accepted, drawio diagrams, SquaredUp, Mermaid refinement
- Accept all 10 ADRs (Proposed -> Accepted); update decisions/index.md - Replace 3 draw.io stubs with full mxGraphModel XML (scom-health-model, azure-monitor-entity-graph, concept-comparison) - Refine Mermaid sources to use AzureLocal.* class names from ADR 0005/0006; remove VM placeholder; add L3 entities - Document SquaredUp optional integration in ADR 0008 + customization.md (Phase 4 deliverable) - Update PLAN.md: Phase 2 sign-off gate complete
1 parent de266cb commit d17595b

18 files changed

Lines changed: 394 additions & 178 deletions

PLAN.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -325,27 +325,27 @@ Every threshold, alert severity, and behavior is **parameterized** so customers
325325
- [x] Move Customization into `docs/design/`
326326
- [x] Move SCOM ↔ AzMon concept mapping into `docs/design/concept-mapping.md`; comparison/ becomes Migration only
327327
- [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
328+
- [x] ADR 0001 — Scope & topology (infra only — 3 layers, ~25 entities) — Accepted
329+
- [x] ADR 0002 — Primary signal source (Azure Local PowerShell APIs + ARM/Resource Graph) — Accepted
330+
- [x] ADR 0003 — Health rollup policy (worst-state default + impact exceptions) — Accepted
331+
- [x] ADR 0004 — SCOM discovery strategy (PowerShell Discovery, not WMI) — Accepted
332+
- [x] ADR 0005 — SCOM class hierarchy + hosting relationships (3-layer model) — Accepted
333+
- [x] ADR 0006 — Azure Monitor entity model alignment (mirrors SCOM 1:1) — Accepted
334+
- [x] ADR 0007 — Naming convention (cross-track parity) — Accepted
335+
- [x] ADR 0008 — Customization strategy (sealed MP + override pack tiers; Bicep params + tiers) — Accepted
336+
- [x] ADR 0009 — Alert vs health-state separation policy — Accepted
337+
- [x] ADR 0010 — Cloud-side prerequisites contract (HCI Insights, AMA, DCMA, Service Group, RBAC, networking) — Accepted
338338
- [x] Build full structural inventory tables in `docs/design/`
339339
- [x] Component inventory (~25 entities across 3 layers) — `scope-topology.md`
340340
- [x] Signal inventory (~60 signals × dimensions × thresholds × source) — `signal-catalog.md`
341341
- [x] SCOM ↔ Azure Monitor concept mapping table — `concept-mapping.md`
342342
- [x] Cloud-side prerequisites table — `azure-monitor/prerequisites.md`
343-
- [ ] Complete draw.io diagrams (replace Phase 1 stubs with real visuals)
344-
- [ ] `scom-health-model.drawio` — full 3-layer rollup tree
345-
- [ ] `azure-monitor-entity-graph.drawio` — entity graph w/ relationships
346-
- [ ] `concept-comparison.drawio` — side-by-side mapping
347-
- [ ] Refine Mermaid sources to match ADR 0005 / 0006 names
348-
- [ ] Phase 2 sign-off gate: all 10 ADRs Accepted, inventory reviewed by maintainers, draw.io
343+
- [x] Complete draw.io diagrams (replace Phase 1 stubs with real visuals)
344+
- [x] `scom-health-model.drawio` — full 3-layer rollup tree
345+
- [x] `azure-monitor-entity-graph.drawio` — entity graph w/ relationships
346+
- [x] `concept-comparison.drawio` — side-by-side mapping
347+
- [x] Refine Mermaid sources to match ADR 0005 / 0006 names
348+
- [x] Phase 2 sign-off gate: all 10 ADRs Accepted ✅; inventory reviewed ✅; draw.io diagrams complete ✅; SquaredUp optional integration documented in ADR 0008 + customization.md ✅
349349
### Phase 3 — Track 1: SCOM MP Authoring
350350
- [ ] 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
351351
- [ ] Set up VSAE project + fragment library references (Kevin Holman fragments)

diagrams/drawio/azure-monitor-entity-graph.drawio

Lines changed: 63 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,68 @@
11
<mxfile host="app.diagrams.net" modified="2026-05-05" agent="azurelocal-scom-mp" version="24.0.0">
22
<diagram id="azure-monitor-entity-graph" name="Azure Monitor Entity Graph">
3-
<!--
4-
STUB — Azure Local Azure Monitor Health Model Entity Graph
5-
===========================================================
6-
Design intent (from PLAN.md):
7-
Root Entity (Generic — Azure Local Workload)
8-
→ Cluster Entity (Generic)
9-
→ Node 1..N (Azure Resource)
10-
→ VM 1..N (Azure Resource)
11-
→ Storage Pool (Azure Resource)
12-
→ Volume 1..N (Azure Resource)
13-
→ Network Intent (Generic)
14-
→ NIC / RDMA Adapter 1..N (Generic)
15-
→ Arc Agent (Azure Resource)
16-
17-
Entity types:
18-
Root: blue diamond (#0078D4)
19-
Generic entity: blue rect (#004B8D)
20-
Azure resource: grey rect (#F0F0F0)
21-
22-
Signal types:
23-
Azure Resource metrics (CPU, memory, disk, storage health)
24-
Log Analytics KQL (Arc heartbeat, NIC RDMA state)
25-
26-
Health state colours:
27-
Healthy: #107C41
28-
Degraded: #FFB900
29-
Unhealthy: #D13438
30-
Unknown: #8A8886
31-
32-
See diagrams/mermaid/azure-monitor-entity-graph.md for the Mermaid version.
33-
Open this file in draw.io (app.diagrams.net) to build the full diagram.
34-
-->
3+
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1654" pageHeight="1169" math="0" shadow="0">
4+
<root>
5+
<mxCell id="0" />
6+
<mxCell id="1" parent="0" />
7+
8+
<!-- ===== LEGEND ===== -->
9+
<mxCell id="leg0" value="LEGEND" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;fontStyle=1;fontSize=10;" vertex="1" parent="1"><mxGeometry x="20" y="20" width="80" height="20" as="geometry" /></mxCell>
10+
<mxCell id="leg1" value="L1 Entity (Generic)" style="rounded=1;whiteSpace=wrap;fillColor=#004B8D;strokeColor=none;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="20" y="46" width="140" height="24" as="geometry" /></mxCell>
11+
<mxCell id="leg2" value="L2 Entity (Azure Resource)" style="rounded=1;whiteSpace=wrap;fillColor=#0072C6;strokeColor=none;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="170" y="46" width="170" height="24" as="geometry" /></mxCell>
12+
<mxCell id="leg3" value="L2 Entity (Generic)" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=none;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="350" y="46" width="140" height="24" as="geometry" /></mxCell>
13+
<mxCell id="leg4" value="L3 Entity (Azure Resource)" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=none;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="500" y="46" width="170" height="24" as="geometry" /></mxCell>
14+
15+
<!-- ===== ROW 0: Service Group ===== -->
16+
<mxCell id="sg" value="Azure Local Service Group" style="rounded=1;whiteSpace=wrap;fillColor=#0078D4;strokeColor=#005A9E;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="627" y="100" width="300" height="55" as="geometry" /></mxCell>
17+
18+
<!-- ===== ROW 1: L1 Cluster ===== -->
19+
<mxCell id="cl" value="AzureLocal.Cluster&#xa;Generic — microsoft.azurestackhci/clusters" style="rounded=1;whiteSpace=wrap;fillColor=#004B8D;strokeColor=#003771;fontColor=#ffffff;fontStyle=1;fontSize=10;" vertex="1" parent="1"><mxGeometry x="577" y="230" width="300" height="55" as="geometry" /></mxCell>
20+
<mxCell id="e0" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="sg" target="cl" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
21+
22+
<!-- ===== ROW 2: L2 Entities ===== -->
23+
<mxCell id="nd" value="AzureLocal.Node&#xa;Azure Resource&#xa;.azurestackhci/clusters/nodes" style="rounded=1;whiteSpace=wrap;fillColor=#0072C6;strokeColor=#005A9E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="60" y="380" width="170" height="56" as="geometry" /></mxCell>
24+
<mxCell id="sp" value="AzureLocal.StoragePool&#xa;Generic&#xa;PowerShell-sourced" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="250" y="380" width="160" height="56" as="geometry" /></mxCell>
25+
<mxCell id="ni" value="AzureLocal.NetworkIntent&#xa;Generic&#xa;PowerShell-sourced" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="430" y="380" width="160" height="56" as="geometry" /></mxCell>
26+
<mxCell id="ust" value="AzureLocal.UpdateState&#xa;Generic&#xa;.azurestackhci/clusters/updates" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="610" y="380" width="160" height="56" as="geometry" /></mxCell>
27+
<mxCell id="rbr" value="AzureLocal.ResourceBridge&#xa;Azure Resource&#xa;microsoft.resourceconnector/appliances" style="rounded=1;whiteSpace=wrap;fillColor=#0072C6;strokeColor=#005A9E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="790" y="380" width="170" height="56" as="geometry" /></mxCell>
28+
<mxCell id="dcma" value="AzureLocal.DCMA&#xa;Azure Resource&#xa;VM extension" style="rounded=1;whiteSpace=wrap;fillColor=#0072C6;strokeColor=#005A9E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="970" y="380" width="150" height="56" as="geometry" /></mxCell>
29+
<mxCell id="hcir" value="AzureLocal.HCIRegistration&#xa;Azure Resource&#xa;Arc registration" style="rounded=1;whiteSpace=wrap;fillColor=#0072C6;strokeColor=#005A9E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="1130" y="380" width="160" height="56" as="geometry" /></mxCell>
30+
31+
<!-- Cluster → L2 edges -->
32+
<mxCell id="e1" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="nd" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
33+
<mxCell id="e2" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="sp" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
34+
<mxCell id="e3" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="ni" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
35+
<mxCell id="e4" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="ust" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
36+
<mxCell id="e5" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="rbr" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
37+
<mxCell id="e6" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="dcma" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
38+
<mxCell id="e7" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="hcir" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
39+
40+
<!-- ===== StoragePool children ===== -->
41+
<mxCell id="vol" value="AzureLocal.Volume&#xa;Generic — vol metrics" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="180" y="520" width="150" height="44" as="geometry" /></mxCell>
42+
<mxCell id="stier" value="AzureLocal.StorageTier&#xa;Generic — tier health" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="340" y="520" width="150" height="44" as="geometry" /></mxCell>
43+
<mxCell id="srep" value="AzureLocal.StorageReplica&#xa;Generic — replication" style="rounded=1;whiteSpace=wrap;fillColor=#0E6B37;strokeColor=#0B5730;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="500" y="520" width="150" height="44" as="geometry" /></mxCell>
44+
<mxCell id="e8" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="sp" target="vol" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
45+
<mxCell id="e9" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="sp" target="stier" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
46+
<mxCell id="e10" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="sp" target="srep" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
47+
48+
<!-- ===== L3 Azure entities (from Cluster reference) ===== -->
49+
<mxCell id="l3hci" value="AzureLocal.Azure.HCICluster&#xa;Azure Resource&#xa;Arc registration" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=#5C138E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="700" y="520" width="180" height="44" as="geometry" /></mxCell>
50+
<mxCell id="l3kv" value="AzureLocal.Azure.KeyVault&#xa;Azure Resource&#xa;microsoft.keyvault/vaults" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=#5C138E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="890" y="520" width="180" height="44" as="geometry" /></mxCell>
51+
<mxCell id="l3sa" value="AzureLocal.Azure.StorageAccount&#xa;Azure Resource" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=#5C138E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="1080" y="520" width="180" height="44" as="geometry" /></mxCell>
52+
<mxCell id="l3rb" value="AzureLocal.Azure.RBAC&#xa;Generic — role assignment state" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=#5C138E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="1270" y="520" width="180" height="44" as="geometry" /></mxCell>
53+
<mxCell id="l3am" value="AzureLocal.Azure.ArcMachine&#xa;Azure Resource&#xa;microsoft.hybridcompute/machines" style="rounded=1;whiteSpace=wrap;fillColor=#7719AA;strokeColor=#5C138E;fontColor=#ffffff;fontSize=9;" vertex="1" parent="1"><mxGeometry x="60" y="520" width="180" height="44" as="geometry" /></mxCell>
54+
55+
<mxCell id="e11" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="l3hci" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
56+
<mxCell id="e12" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="l3kv" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
57+
<mxCell id="e13" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="l3sa" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
58+
<mxCell id="e14" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="cl" target="l3rb" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
59+
<mxCell id="e15" style="edgeStyle=orthogonalEdgeStyle;" edge="1" source="nd" target="l3am" parent="1"><mxGeometry relative="1" as="geometry" /></mxCell>
60+
61+
</root>
62+
</mxGraphModel>
63+
</diagram>
64+
</mxfile>
65+
3566
<mxCell id="0" />
3667
<mxCell id="1" parent="0" />
3768
<mxCell id="2" value="STUB: Build Azure Monitor entity graph here.&#xa;See PLAN.md → draw.io Diagrams for design spec." style="text;html=1;strokeColor=none;fillColor=#dae8fc;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;fontSize=14;" vertex="1" parent="1">

0 commit comments

Comments
 (0)