skills/azmon-mirroredcatalogs-operations-cli/SKILL.md
Onboard Log Analytics, Application Insights, and Azure Monitor telemetry into Microsoft Fabric as a Mirrored Catalog, then turn it into business-impact insights by correlating telemetry with business data via Eventhouse shortcuts, verified schemas, and ready-to-use Operations Agent instructions. Triggers: onboard Log Analytics telemetry, connect Application Insights to a Mirrored Catalog, correlate App Insights telemetry with business data, build an Operations Agent for business-impact alerting, determine if availability or latency impacted bookings orders or revenue.
npx skillsauth add microsoft/skills-for-fabric azmon-mirroredcatalogs-operations-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Update Check — ONCE PER SESSION (mandatory) The first time this skill is used in a session, run the check-updates skill before proceeding.
- GitHub Copilot CLI / VS Code: invoke the
check-updatesskill.- Claude Code / Cowork / Cursor / Windsurf / Codex: compare local vs remote package.json version.
- Skip if the check was already performed earlier in this session.
Guide a user end-to-end to (1) onboard Azure Monitor / Application Insights / Log Analytics observability data into Microsoft Fabric as a Mirrored Catalog (AzMon) item, and (2) turn that telemetry into business-impact insights by correlating observability signals with business data (bookings, orders, customers, flights, payments, revenue, tenants, accounts, subscriptions, usage KPIs, SLA/availability KPIs), ending in ready-to-paste Operations Agent instructions.
This is a self-contained Skills-for-Fabric package. It does not depend on
any MCP server or tool controller as the execution mechanism. Product/API
knowledge, supported flows, guardrails, and modeling rules live in this file and
in references/*.md.
Before running this skill, read the shared common guidance:
azmon-mirroredcatalogs-operations-cli is for onboarding Azure Monitor /
Application Insights / Log Analytics telemetry into Microsoft Fabric
(mirroredCatalogs endpoint), correlating that telemetry with business data, and
generating Operations Agent instructions. For general Eventhouse / KQL querying
unrelated to Azure Monitor onboarding, use eventhouse-consumption-cli; for
authoring Eventhouse items and databases, use eventhouse-authoring-cli.
Read these when the corresponding stage needs product/API detail. Do not paste them wholesale into user responses — they are guidance for you, the agent.
| Reference | Use it for | |-----------|-----------| | references/azmon-fabric-api-reference.md | Supported vs UI-only flows; connector modes; Fabric item/agent surfaces | | references/mirrored-catalog-reference.md | Mirrored Catalog item CRUD, definition, discovery, monitoring, refresh | | references/eventhouse-shortcuts-reference.md | Eventhouse/KQL, OneLake shortcuts, queryability requirement | | references/operations-agent-reference.md | Operations Agent instruction template, validation, troubleshooting | | references/app-insights-table-reference.md | App Insights / Azure Monitor telemetry tables and business meaning | | references/app-insights-dynamic-fields-reference.md | Dynamic fields (Properties/CustomDimensions) and hidden business keys | | references/business-correlation-patterns.md | Signal → business-impact patterns and candidate keys | | references/business-insight-modeling-reference.md | Bins, derived entities, direct join vs time-window, thresholds |
Business entities named anywhere in this Skill or its references — bookings, orders, customers, flights, revenue, tenants, payments, and similar — are EXAMPLES ONLY (non-normative illustrations). The Skill is domain-agnostic and MUST NOT infer or assume the user's business domain from these examples, from table/column names that resemble an example, or from any prior context. The user's actual business entities MUST be discovered from real Fabric data (Eventhouse / KQL database / Warehouse / Lakehouse / shortcuts) and confirmed with the user before use. Until discovered and confirmed, refer to them generically — as business entities, business datasets, business KPIs, or business outcomes.
The Skill is a guided staged workflow; actual execution depends on capabilities available in the current environment. Portal-guided instructions are allowed ONLY for OAuth Azure Monitor connector creation — the Skill MUST NOT switch the entire onboarding flow to portal guidance as a generic fallback. For all non-OAuth stages, the Skill MUST first discover whether a supported execution path exists.
Supported execution paths may include:
az rest --method get
against https://api.fabric.microsoft.com/... (discovery/read-only only)Log Analytics REST API reference (agent-facing). When the Skill needs to perform or validate Azure Log Analytics operations, it may consult the official Log Analytics REST APIs reference to identify supported Log Analytics management, workspace, table, ingestion, and query APIs. This is agent-facing guidance only and does not relax the secrecy rule above.
These execution paths are distinct and MUST NOT be conflated:
az rest --method get —
a narrow GET-only exception for Fabric discovery/read against
https://api.fabric.microsoft.com/...; never mutates anything and never
exposes tokens, secrets, or auth headers. NOT general shell/CLI access.MCP unavailability alone does NOT mean execution capability is unavailable. Unavailability of any single execution path does NOT imply the capability is unavailable. Before declaring a capability unavailable, the Skill MUST evaluate ALL supported execution paths listed above and confirm none is available.
If no supported execution path exists, the Skill MUST: stop; identify the missing capability; explain why it is required; identify which stage is blocked; and wait for user confirmation.
The Skill MUST NOT replace validation, Mirrored Catalog creation, discovery, monitoring, refresh, shortcut creation, schema verification, or Operations Agent creation with portal guidance, and MUST NOT claim an action completed when execution capability is unavailable.
Prefer automated execution paths (Fabric REST, Azure REST, Fabric Actions, Azure CLI, other supported automation) over UI-guided instructions. Before providing UI-guided instructions the Skill MUST: (1) evaluate the available execution paths, (2) attempt supported ones where available, (3) explain which were evaluated and why they cannot be used. OAuth Azure Monitor connector creation is the one explicitly supported UI-guided scenario and is exempt from this evaluation.
The Skill MUST operate as a strict staged workflow controller.
Begin every response with exactly this structure:
Current stage: <stage name>
What I found:
<short summary>
Next step:
<one clear action>
Waiting for your confirmation to continue.
If the current stage is unclear → STOP and ask the user where to resume.
Stage 15 exemption (ready-to-paste block). The Stage 15 Operations Agent
instructions are delivered as ONE self-contained, ready-to-paste fenced block.
For that response only, place the stage-visibility header and the
Waiting for your confirmation to continue. line OUTSIDE and AROUND the fenced
block — the header (and a one-line summary) immediately before it, the
confirmation line immediately after it. Do NOT insert the header, summary,
What I found / Next step labels, or the confirmation line INSIDE the
ready-to-paste block: the fenced block must contain only the Operations Agent
instructions so the user can copy it verbatim.
After presenting any step that requires confirmation:
The Skill MUST NOT run arbitrary shell/CLI/az/PowerShell commands, perform network debugging, investigate server connectivity, or execute infrastructure troubleshooting. These are out of scope unless explicitly part of the current stage.
Narrow exception — Fabric REST read-only discovery. The Skill MAY use an
authenticated az rest --method get call ONLY for Fabric REST read-only
discovery, and ONLY when ALL hold: endpoint is
https://api.fabric.microsoft.com/...; method is GET only; the operation is
discovery/read-only; nothing is created, updated, deleted, or modified; no tokens,
secrets, auth headers, or sensitive payloads are exposed; and the Skill states the
capability path used. This exception does NOT permit arbitrary shell/CLI
execution, non-GET az rest calls, or use of the Kusto / KQL data-plane when
disabled.
Behave like a guided product experience, not a backend debugger.
Confirm what the user wants: onboard observability data into Fabric, explore a business insight, or both. Capture (in plain language) any workspace names or business outcome they already mention — but do not yet drive correlation.
Application Insights telemetry is queried through its backing Log Analytics workspace (workspace-based Application Insights). Help the user pick the correct Log Analytics / Application Insights-backed workspace.
When the user names a workspace and no exact match exists, the Skill MUST NOT fail. Instead:
Never fabricate a workspace name or GUID — only offer real discovered workspaces.
Help the user choose the target Fabric workspace (display name + id). Use a case-insensitive substring filter when helpful. Read-only; nothing is created here. Never expose raw API responses or tokens.
Fabric workspaces are not ARM resources, so missing automatic enumeration does
NOT mean no workspace exists. Follow the full required policy in
references/azmon-fabric-api-reference.md:
discover all surfaced Fabric mechanisms first (Fabric REST/Actions, OneLake/Power
BI, and read-only az rest --method get against https://api.fabric.microsoft.com/...);
never terminate on missing enumeration; ask the user for a workspace Name / ID /
URL; validate before continuing; and mark Stage 3 BLOCKED only after ALL discovery
AND user-supplied paths are exhausted. UI-guided selection is the final fallback only.
Before any creation, verify:
If validation fails, summarize which checks passed/failed in user terms, explain
the missing capability, and offer to try another workspace or request access.
See references/azmon-fabric-api-reference.md for supported-scope rules.
Sentinel detection is a control-plane check and MUST NOT be treated as
dependent on Kusto / KQL data-plane availability. Follow the full required
hierarchy in
references/azmon-fabric-api-reference.md:
enumerate ARM resources / Microsoft.OperationsManagement/solutions
SecurityInsights(<workspaceName>) / Microsoft.SecurityInsights/* /
feature metadata, then classify as Sentinel / blocked, Not Sentinel
(control-plane verified), or — only if all checks are unavailable —
not verifiable. Never fabricate Sentinel status.
Apply the EXECUTION CAPABILITY POLICY: evaluate ALL supported execution paths (Fabric REST, Azure REST, Fabric Actions, Azure CLI, Azure Resource Graph) before declaring validation capability unavailable. MCP is only one possible path.
Two connection modes are supported. Keep them separate. Never route OAuth through Service Principal logic, and never route Service Principal through OAuth / interactive sign-in logic. See references/azmon-fabric-api-reference.md for the authoritative connector rules.
Portal-guided instructions are permitted ONLY for OAuth Azure Monitor connector creation.
Portal guidance is NOT an allowed fallback for:
If execution capability for these actions is unavailable, the Skill MUST stop and identify the missing capability.
az rest --method get
against https://api.fabric.microsoft.com/..., if Azure CLI execution is
available and permitted under the read-only Fabric REST discovery exception
(GET-only, no modifications, no secret/token/header exposure, capability
path stated). This detection is read-only; OAuth connector creation
remains UI-guided only.I couldn’t find an existing Azure Monitor connection for this workspace.
Please create it once in Fabric Manage Connections, then come back and continue.
1. Open Fabric.
2. Go to Manage Connections.
3. Select New connection → Azure Monitor.
4. Sign in with your organizational account.
5. Use the same Log Analytics Workspace.
6. When done, come back here and type: Done.
When the user resumes, re-detect and continue automatically ("Connection detected. Continuing setup.").
Present this as "connect using Service Principal" — the automated, non-interactive path (no user login, no UI step).
Automation boundary: infrastructure (connector create-or-reuse, mirrored item creation) is automated; business decisions (Eventhouse/KQL DB selection, shortcut creation) always require explicit user confirmation.
Create the Azure Monitor Mirrored Catalog item in the target Fabric workspace, or reuse an existing matching item. This is a Fabric-modifying action → confirm first. Supported Mirrored Catalog operations (item CRUD, definition, discovery, monitoring, refresh) are documented in references/mirrored-catalog-reference.md.
After the item is created or reused, immediately proceed to Business Insight Capture (Stage 7).
Immediately after the AzMon item is created or reused, ask the user what business insight they want to explore, so discovery and table selection are guided by the business outcome.
Ask in business language, e.g.:
The Skill MUST NOT proceed to business correlation without either:
Never assume intent.
Suggest 3–5 directions, each framed as observability signal → business impact, and ask the user to choose one:
Capturing intent early is allowed and required. But the Skill MUST NOT generate correlation logic yet. Correlation logic only comes after shortcuts exist, schema is verified, data is queryable, dynamic fields are inspected, join candidates are validated, and data freshness is checked (Stages 10–14).
Browse candidate Azure Monitor / Application Insights tables relevant to the captured business goal. Use only real discovered scope/table values — never fabricate table names. Use references/app-insights-table-reference.md to explain what each table means in business terms and which tables best fit the stated goal.
The primary discovery mechanism is the Mirrored Catalog Discovery APIs. If discovery appears incomplete, do NOT immediately conclude tables are missing or switch to alternative metadata paths. First:
Only after these checks may the Skill evaluate alternative metadata paths. See references/mirrored-catalog-reference.md.
Before asking the user to choose an Eventhouse, run Eventhouse Recommendation Mode:
Score each Eventhouse by:
Present the result in this format:
Recommended Eventhouse:
<EventHouseName>
Reason:
<why this Eventhouse was chosen>
Alternative Eventhouses:
<list>
The Skill MUST NOT auto-select, even when one Eventhouse scores highest. This is a user decision (confirmation gate) — present the recommendation and require explicit confirmation before proceeding. See references/eventhouse-shortcuts-reference.md.
Plan OneLake shortcuts from the AzMon item's tables into the selected Eventhouse / KQL database before any schema verification or join logic. Present the plan and STOP for confirmation.
Key rules (see the shortcuts reference for detail):
Query acceleration on shortcuts SHOULD be treated as the preferred configuration because testing showed schema verification, queryability validation, telemetry sampling, correlation analysis, and Operations Agent preparation became substantially faster when acceleration was enabled. Present the shortcut plan with an acceleration column:
| Shortcut Name | Source | Target | Acceleration Supported (Yes/No) | Acceleration Enabled (Yes/No) | |---------------|--------|--------|---------------------------------|-------------------------------|
If acceleration is disabled, explain the potential impact on: queryability validation, schema verification, telemetry sampling, correlation analysis, and Operations Agent preparation. Do NOT assume acceleration exists in every environment — use SHOULD, not MUST. See references/eventhouse-shortcuts-reference.md.
Only after explicit confirmation, create the planned shortcuts. Then verify each
table is actually queryable in Eventhouse (e.g. <Table> | take 1). Do not
assume a OneLake link means the table is queryable. If a table is not queryable →
STOP and return to shortcut planning / creation.
When creating ANY shortcut, apply the Shortcut Acceleration Policy:
Never build correlation logic on assumptions or screenshots. Before proposing any join, bin, or threshold, verify against the actual KQL database.
getschema.Retrieve real schema. For each table:
TableName | getschema | project ColumnName, ColumnType. Use authoritative
column names/types — not names guessed from screenshots or table names.
Inspect and sample dynamic fields. Business join keys are often nested in
dynamic columns (Properties, CustomDimensions, Details, Measurements,
Payload, Context). Sample rows and inspect keys. See
references/app-insights-dynamic-fields-reference.md.
Extract candidate business identifiers with explicit KQL
(tostring(Properties.BookingId), with casing fallbacks via coalesce).
Validate join keys against real data. Prove a candidate joins — run the join and confirm non-zero matches:
AppEvents
| extend BookingId = tostring(Properties.BookingId)
| where isnotempty(BookingId)
| join kind=inner (Bookings | project BookingId = tostring(BookingId)) on BookingId
| summarize MatchedRows=count(), DistinctBookings=dcount(BookingId)
Non-zero → direct join, high confidence. Zero → the key is wrong or data doesn't overlap; find the real one.
Check freshness and align the window.
TableName | summarize Rows=count(), MinTime=min(TimeGenerated), MaxTime=max(TimeGenerated).
Do not assume ago(1h); use a window covering the actual data range and
explain it in user terms.
Confirm categorical values used by rules
(Table | summarize count() by <field>) so impact rules use real categories.
Telemetry source selection MUST be data-driven. Before selecting a correlation model, the Skill MUST inspect ALL candidate telemetry sources discovered (e.g. AppEvents, AppExceptions, AppRequests, AppDependencies, AppTraces, AppPageViews, AppBrowserTimings, AvailabilityResults, and any other telemetry source present) — not just one.
Score each candidate telemetry source by:
Select the highest-scoring telemetry source. The Skill MUST NOT automatically prioritize AppExceptions, and MUST NOT automatically prioritize AppEvents — the winner is whichever source scores highest against real data.
Before Stage 14, ALL must hold: schema retrieved via getschema; join keys
validated with non-zero matches (when a direct join is used); freshness verified
and window aligned; relevant categorical values confirmed. If any fails → STOP,
do not proceed.
Present a concise summary (verified join keys, match results, business impact if any, data time window). Then ask: "Do you want to generate Operations Agent instructions based on this verified model?" HARD STOP and wait.
Business tables are not expected to exist in Log Analytics. They may live in an Eventhouse, KQL database, Warehouse, Lakehouse, or via Fabric shortcuts. Absence of business tables in Log Analytics MUST NOT be interpreted as absence of business data — discover them across the available Fabric data surfaces.
If the exact business table or join is not known, do not fail. Score candidate business databases/tables by likely relevance to the stated goal, present a ranked list with explanation, propose shortcut creation for the top candidates, and ask the user to choose. Never conclude "no correlation is possible" without presenting options. Scoring hints are in references/business-correlation-patterns.md.
The user should not need to know joins, KQL, thresholds, or bins. Infer candidates from verified top-level schema, verified dynamic fields, sampled values, business table schema, actual join test results, and data freshness. When asking for confirmation, ask about business meaning, not SQL/KQL, e.g.:
"I found
BookingIdinsideAppEvents.Propertiesand it matchesBookings.BookingId. Should I treat this as the booking identifier for business impact?"
Present a correlation plan (see references/business-insight-modeling-reference.md) including: operational signal; business impact table; verified join keys; whether the join came from top-level columns or dynamic fields; match count/validation result; time window + freshness status; proposed bin size; metrics and thresholds. Then ask for confirmation and STOP.
Default modeling guidance: prefer direct joins when verified identifiers exist; use time-window correlation only when no direct identifier is found (and state clearly it shows correlation, not causality); default bin size 5 minutes (larger when data is sparse or KPIs are slower); default derived entity IncidentBin.
When finalizing the correlation model, the Skill MUST explain why the selected telemetry source was chosen, justified using real data. Include:
Only after the correlation model is confirmed. Produce a single clean copy/paste block using the template in references/operations-agent-reference.md.
Wrapper exemption: deliver the instructions as ONE self-contained fenced block. Put the stage-visibility header and the
Waiting for your confirmation to continue.line OUTSIDE the block (before and after it) — never inside — so the copy/paste block stays clean. See Stage visibility.
The instructions MUST include explicit KQL, not conceptual descriptions:
tostring(Properties.x) extraction,
the explicit join, and the exact aggregations).Include both threshold sets:
ErrorCount >= 1; ErrorCount >= 5 and AffectedBusinessRecords >= 1; AffectedCustomers >= 1.Required sections: Goal, Data sources, Field mapping definitions, Dynamic field extraction logic, Derived analysis entity, IncidentBin materialization query, Metric definitions, Correlation logic, Impact logic (production + POC), Alert behavior, Output requirements, Validation / POC mode.
Testing demonstrated that instructions and KQL text alone are NOT sufficient for playbook generation — the Fabric Playbook Generator must be able to discover the alert fields directly from a real schema object. Before generating Operations Agent rules, the Skill MUST:
IncidentBins | getschema).Required output columns:
The Playbook Generator MUST be able to discover these fields directly from the
materialized schema. KQL instructions alone are NOT sufficient. Business-specific
column names (for example AffectedBookings, TopImpactedFlights) adapt to the
business entities actually discovered in the data.
Offer to create the Operations Agent in the user's Fabric workspace and attach the Eventhouse / KQL database that holds the verified data. Confirm target workspace and KQL database before creating anything. Then guide validation (start with POC thresholds so an alert fires on sparse seed data, then switch to production thresholds). See references/operations-agent-reference.md for creation surface and troubleshooting.
User: "In my Observability workspace, onboard our Azure Monitor / Log Analytics observability data (it holds our Application Insights tables) into Fabric, then tell me whether last week's latency spike hurt checkout conversions."
Skill behavior: Runs the staged workflow — confirms the target workspace and checks onboarding prerequisites (a reachable Azure Monitor / Log Analytics source or connection), stopping with an explicit list of what is missing if any prerequisite is absent. Once the observability data (including the Application Insights telemetry tables) is onboarded and queryable, it discovers the real business dataset in the workspace, correlates the latency signal against the conversion KPI using discovered keys, and reports a specific business-impact conclusion (or an error if the required data is unavailable). It never fabricates workspace names, tables, or query results, and never exposes tokens or connection internals.
User: "Create a new Spark notebook and build a Delta table pipeline to load my business dataset."
Skill behavior: Declines the out-of-scope authoring request, creates nothing in Fabric, and directs the user to the appropriate authoring skill (for example spark-authoring-cli) rather than taking over the task.
tools
Onboard Log Analytics, Application Insights, and Azure Monitor telemetry into Microsoft Fabric as a Mirrored Catalog, then turn it into business-impact insights by correlating telemetry with business data via Eventhouse shortcuts, verified schemas, and ready-to-use Operations Agent instructions. Triggers: onboard Log Analytics telemetry, connect Application Insights to a Mirrored Catalog, correlate App Insights telemetry with business data, build an Operations Agent for business-impact alerting, determine if availability or latency impacted bookings orders or revenue.
tools
Onboard Log Analytics, Application Insights, and Azure Monitor telemetry into Microsoft Fabric as a Mirrored Catalog, then turn it into business-impact insights by correlating telemetry with business data via Eventhouse shortcuts, verified schemas, and ready-to-use Operations Agent instructions. Triggers: onboard Log Analytics telemetry, connect Application Insights to a Mirrored Catalog, correlate App Insights telemetry with business data, build an Operations Agent for business-impact alerting, determine if availability or latency impacted bookings orders or revenue.
tools
Manage refresh schedules and job execution for an EXISTING Microsoft Fabric Materialized Lake View (MLV) via REST APIs: create, update, and delete refresh schedules (interval-based: hourly, daily, weekly), trigger on-demand refreshes, monitor job status, and cancel running jobs. Uses human-in-the-loop confirmations for safety. This skill does NOT author or create the MLV definition: writing the CREATE MATERIALIZED LAKE VIEW / CREATE OR REPLACE SQL is `spark-authoring-cli`, not this skill. Note: MLV discovery (list MLVs, lineage, data quality) requires UI as REST APIs are not yet available. Triggers: "schedule MLV refresh", "manage MLV refresh", "MLV refresh schedule", "schedule materialized lake view refresh", "automate MLV refresh", "trigger MLV refresh", "monitor MLV refresh", "MLV job status", "cancel MLV refresh", "refresh schedule", "MLV automation", "refresh my materialized views"
tools
Manage refresh schedules and job execution for an EXISTING Microsoft Fabric Materialized Lake View (MLV) via REST APIs: create, update, and delete refresh schedules (interval-based: hourly, daily, weekly), trigger on-demand refreshes, monitor job status, and cancel running jobs. Uses human-in-the-loop confirmations for safety. This skill does NOT author or create the MLV definition: writing the CREATE MATERIALIZED LAKE VIEW / CREATE OR REPLACE SQL is `spark-authoring-cli`, not this skill. Note: MLV discovery (list MLVs, lineage, data quality) requires UI as REST APIs are not yet available. Triggers: "schedule MLV refresh", "manage MLV refresh", "MLV refresh schedule", "schedule materialized lake view refresh", "automate MLV refresh", "trigger MLV refresh", "monitor MLV refresh", "MLV job status", "cancel MLV refresh", "refresh schedule", "MLV automation", "refresh my materialized views"