At least one metric is below 95%. Action required — see recommendations. Lowest weekly average: 94.05%.
403|PbiForbiddenError surged 85.0× (1 → 85 events, 1 unique notebooks) — see Save Reliability.GetMWCToken_401_PowerBINotAuthorizedException surged 3.6× (1,235 → 4,476 events, 35 unique notebooks) — see Save Reliability.Bands: ≥ 99% Healthy 95–99% Watch < 95% Degraded · Y-axis auto-scales to the data range for clearer trend visibility. Hover any dot for the exact daily value.
Rolled-out client versions ranked by total join attempts this week. A clearly worse rate on a specific build hints at a regression in that release.
| Component Version | Join Rate | Success | Total |
|---|---|---|---|
1.7.9 | 99.55% | 849,685 | 853,516 |
1.7.8 | 99.76% | 848 | 850 |
1.7.5 | 100.00% | 147 | 147 |
1.7.7 | 98.68% | 75 | 76 |
1.7.3 | 100.00% | 57 | 57 |
1.7.4 | 100.00% | 10 | 10 |
1.7.6 | 100.00% | 10 | 10 |
Rolling 14-day window: 2026-06-28 → 2026-07-12. Inconsistency rate = % of instances that fired dataIntegrity/error in AzNB.Client events. Lower is better.
| Message | Occurrences | Distinct Instances | Distinct Clients |
|---|---|---|---|
| Cell source mismatch between local and fluid (editor mismatched with fluid) | 44,100 | 752 | 584 |
| Cell source mismatch between local and fluid (editor not mounted) | 9,750 | 138 | 109 |
| Cell count mismatch between local and fluid DDS | 224 | 12 | 12 |
| Local cell doesn't have mapped remote id | 485 | 9 | 9 |
| Cell ID mismatch in cell order between local and fluid | 58 | 2 | 2 |
Bands: ≥ 99% Healthy 95–99% Watch < 95% Degraded · Hover any dot for the exact daily value.
Overall: every save attempt counts equally. Excluding user errors: ignores user-side reasons (size limits, capacity inactive, auth). Unique notebook: % of distinct notebooks that saved at least once.
📌 Rows tagged SystemError / Service have an amber background — these are service-side issues we own. Click sample text to expand the full JSON.
| Error Code | Category | Events | Unique Notebooks | Sample Error (click to expand) |
|---|---|---|---|---|
UserDevice_NetworkError | UserError | 24,327 | 3,360 | |
UserDevice_ProxyError | UserError | 12,807 | 31 | |
CapacityNotActive | UserError | 10,057 | 63 | |
NotebookSave_ExceedMaximumSize | UserError | 6,031 | 76 | |
GetMWCToken_401_PowerBINotAuthorizedException | UserError | 4,476 | 35 | |
GetMWCToken_Other | UnknownError | 4,428 | 24 | |
MwcRequest_Status404 | UserError | 1,988 | 186 | |
GetMWCToken_401_TokenExpired | SystemError | 1,298 | 28 | |
FaileToGetEtagOfNotebook | SystemError | 956 | 74 | |
GetMWCToken_403_TenantNotAuthorizedForCluster | UserError | 445 | 7 | |
MwcRequestError | UnknownError | 343 | 6 | |
GetMWCToken_0_SharedNetworkConnectionIssue | UserError | 277 | 50 | |
ArtifactWrite_Unauthorized | UserError | 105 | 8 | |
GetMWCToken_403_TokenExpired | SystemError | 90 | 14 | |
403|PbiForbiddenError | UnknownError | 85 | 1 | |
GetMWCToken_404_CapacityNotActive | UserError | 43 | 38 | |
GetMWCToken_429_Unkown | UserError | 24 | 2 | |
GetMWCToken_403_Unkown | UserError | 18 | 4 | |
MWCToken_ValidationException | SystemError | 15 | 14 | |
NotebookSave_PreconditionFailed | SystemError | 13 | 11 |
Both PUT (save) and HEAD (etag pre-fetch) calls are counted at the network layer. The HTTP 500 Deep-Dive section below only covers PUT failures that reached the app-level save-error log path, so its unique-notebook count can legitimately be lower (a HEAD-500 may prevent the PUT from ever being attempted).
| Environment | Status | Unique Notebook URLs |
|---|---|---|
| PROD | 200 | 360,772 |
| PROD | 0 | 2,020 |
| PROD | 412 | 383 |
| PROD | 404 | 237 |
| PROD | 401 | 162 |
| PROD | 403 | 52 |
| PROD | 500 | 14 |
| PROD | 451 | 2 |
| PROD | 400 | 1 |
| PROD | 408 | 1 |
| Message (click to expand) | Status | Unique Notebooks |
|---|---|---|
| TypeError: Failed to fetch (browser thrown this error when response is not returned) | — | 2,548 |
| Failed to fetch [ParentActivityId:<g-u-i-d>] | — | 1,017 |
| Failed to get etag | — | 345 |
| Failed to get etag | 404 | 186 |
| Notebook content size <#> MB exceeds maximum allowed size 32 MB | — | 76 |
| CapacityNotActive | — | 63 |
| NetworkError when attempting to fetch resource. [ParentActivityId:<g-u-i-d>] | — | 33 |
| — | — | 32 |
| Load failed [ParentActivityId:<g-u-i-d>] | — | 17 |
| Failed to get etag | 403 | 14 |
| [MwcTokenValidationException] Internal error MwcTokenValidationException. | 401 | 14 |
| Failed to retrieve MWC token for "Notebook": WorkspaceId=<g-u-i-d> CapacityId=<g-u-i-d> ArtifactId=<g-u-i-d>. | — | 13 |
| Failed to get etag | 401 | 12 |
| [Metastore/PreconditionFailed/NotebookServiceError] Failed to update entity <g-u-i-d>/<g-u-i-d>. | 412 | 11 |
401 | 8 | |
| The notebook has been deleted. | 404 | 5 |
| Failed to get etag | 500 | 5 |
404 | 4 | |
| System error. The content of this notebook is missing. Artifact Id: <g-u-i-d>. | 500 | 3 |
| You are not allowed to perform this action. | 451 | 2 |
Server-internal errors during PUT /content. These are service-owned — review correlated logs in the artifact storage service. Use the correlation IDs in the sample response body to trace upstream.
| Error Code | Component Version | Environment | Events | Unique Notebooks | Sample Message + Response Body |
|---|---|---|---|---|---|
MwcRequestError | — | PROD | 29 | 4 | view samplemessage: [Storage/InternalServerError/NotebookServiceError] Request to storage failed. |
MwcRequest_Status500 | — | PROD | 5 | 5 | view samplemessage: Failed to get etag of notebook c0158cba-8b3d-41b0-8889-a8f02f15c174. MwcRequestError: Failed to send HTTP (MWC) request to https://301863b60a5548598d2ed0c36c2d1a6a.pbidedicated.windows.net/webapi/capacities/301863B6-0A55-4859-8D2E-D0C36C2D1A6A/workloads/Notebook/Data/Automatic/api/workspaces/f81d5f0c-08d2-410a-826a-6b1b38ac5825/artifacts/c0158cba-8b3d-41b0-8889-a8f02f15c174/content?v=1783416051920. Status code: 500. |
500_NotebookContentIsMissing | — | PROD | 5 | 3 | view samplemessage: System error. The content of this notebook is missing. Artifact Id: fba51858-4fe9-4a00-b5aa-9ff2624824ca. |
componentVersion — if 500s concentrate on one build, suspect a recent client-side change that triggered a backend regression. (2) Search artifact-storage logs for the CorrelationId in response.body. (3) Compare event count to last week — a 2× surge appears in the WoW banner above.Each save failure mapped to the network call it came from and the HTTP status returned. Use this to trace user-visible errors back to the responsible service layer.
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
HEAD /workspaces/{ws}/artifacts/{id}/content | — | 26,800 | 2,831 | UserDevice_NetworkError |
other / uncategorized | — | 22,889 | 118 | UserDevice_ProxyError Timeout fetching MWC token for Notebook. 7299s elapsed. Please retry your operation. |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
PUT /content (generic fetch error) | — | 8,599 | 1,017 | UserDevice_NetworkError Failed to fetch [ParentActivityId:001ffff5-f5d8-4c34-903c-a66402c57fe4] |
PUT /content (browser network error) | — | 61 | 33 | UserDevice_NetworkError NetworkError when attempting to fetch resource. [ParentActivityId:001ffcae-27cf-450a-a020-98e251340edb] |
PUT /content (browser load failed) | — | 26 | 17 | UserDevice_NetworkError Load failed [ParentActivityId:001ffd17-396c-4227-8059-269bc986d6ac] |
PUT /content (browser aborted before response) | — | 1 | 1 | UserDevice_NetworkError |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
HEAD /workspaces/{ws}/artifacts/{id}/content | 404 | 1,988 | 186 | MwcRequest_Status404 |
other / uncategorized | 412 | 13 | 11 | NotebookSave_PreconditionFailed |
other / uncategorized | 404 | 9 | 9 | NotebookSave_ItemDeleted |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
PUT /content (rejected client-side, oversize) | — | 6,031 | 76 | NotebookSave_ExceedMaximumSize Notebook content size 99.23 MB exceeds maximum allowed size 32 MB. |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
other / uncategorized | 401 | 120 | 22 | MWCToken_ValidationException |
HEAD /workspaces/{ws}/artifacts/{id}/content | 403 | 893 | 14 | FaileToGetEtagOfNotebook |
HEAD /workspaces/{ws}/artifacts/{id}/content | 401 | 12 | 12 | MwcRequest_Status401 |
other / uncategorized | 403 | 103 | 2 | 500|MwcRequestError|DeniedByPolicy [DeniedByPolicy] An internal error occurred. Access protector failed due to DeniedByPolicy |
other / uncategorized | 451 | 314 | 2 | MwcRequestError You are not allowed to perform this action. |
other / uncategorized | 400 | 2 | 1 | NotebookSave_ContentError |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
other / uncategorized | 500 | 34 | 7 | MwcRequestError [Storage/InternalServerError/NotebookServiceError] Request to storage failed. |
HEAD /workspaces/{ws}/artifacts/{id}/content | 500 | 5 | 5 | MwcRequest_Status500 |
statusCode + path. AAD / Authorization = token / capacity / workspace permission issue, route to identity team. Client (size limit) = SDK rejected the save before sending; user-side education or limit raise.| Outcome | Detail | Env | Unique Instances | Events |
|---|---|---|---|---|
| NotNeeded | Not needed (isLeader=false / collStatus=joined) | PROD | 3,626 | 36,198 |
| NotNeeded | Not needed (isLeader= / collStatus=) | PROD | 308 | 25,158 |
| NotNeeded | Not needed (isLeader=false / collStatus=inactive) | PROD | 410 | 10,037 |
| YieldFailed | Yield failed | PROD | 78 | 4,909 |
| NotNeeded | Not needed (isLeader=false / collStatus=failed) | PROD | 67 | 1,165 |
| YieldSucceeded | Yield succeeded | PROD | 44 | 212 |
| NotNeeded | Not needed (isLeader=false / collStatus=in-progress) | PROD | 10 | 10 |
| NotNeeded | Not needed (isLeader=true / collStatus=inactive) | PROD | 1 | 1 |
Counts of File version is updated to … events on the new leader within 20 seconds of yield — the success signal that the handoff actually unblocked the user.
| Env | Unique instances | Unique notebooks | Saves Succeeded |
|---|---|---|---|
| PROD | 10 | 8 | 24 |
Grouped error messages from Failed to yield save leader and Yield save leader completed. Yield success: false events.
| Error message (click to expand) | Env | Unique Instances | Events |
|---|---|---|---|
| No other clients in the session that we can yield to | PROD | 74 | 4,824 |
| New leader is still this client | PROD | 5 | 79 |
| Timeout waiting for new leader | PROD | 4 | 6 |
When a yield succeeds, did the new leader actually save? These rows are SAVE_FAILED events on the new leader within 20 seconds of the yield — grouped by error so you can see the dominant failure modes.
| Error message (click to expand) | Env | Unique instances | Unique notebooks | Save Failures |
|---|---|---|---|---|
| Unexpected token '<', "<!--# MmTS"... is not valid JSON | PROD | 4 | 1 | 54 |
| Unexpected token '<', "<!--# F7tJ"... is not valid JSON | PROD | 5 | 2 | 39 |
| Unexpected token '<', "<!--# L0Wf"... is not valid JSON | PROD | 2 | 1 | 5 |
| Unexpected token '<', "<!--# mLbn"... is not valid JSON | PROD | 2 | 1 | 4 |
| Notebook content size 42.85 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 3 |
| Failed to fetch [ParentActivityId:001f26ab-b359-46a1-8c43-95085f6bf594] | PROD | 1 | 1 | 2 |
| Failed to fetch [ParentActivityId:001fcd53-c8e3-4835-a0bb-dda9315b1e29] | PROD | 1 | 1 | 2 |
| Failed to fetch [ParentActivityId:001f2c4e-3b67-4b7f-98d7-5ce5d015a1e4] | PROD | 1 | 1 | 2 |
| Failed to fetch [ParentActivityId:001fc9cf-d412-4f2e-8083-70ef92fed988] | PROD | 1 | 1 | 2 |
| Unexpected token '<', "<!--# sN3W"... is not valid JSON | PROD | 1 | 1 | 2 |
| Failed to fetch [ParentActivityId:001f6ecb-c714-4fe4-8cda-cf978df4f517] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fcef8-f985-4ff3-952e-c5b83dc4e155] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd0c0-848e-4d81-89cc-23ae43cea856] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7916-46ff-4712-99af-dd276c9a4a0e] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ff1b7-2dd8-461c-a74d-b6c3a367cad0] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f41e7-df69-49c5-8361-fd6d539ed62f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa24c-4b1b-4eb0-b405-7e38bcaac182] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f056b-d70e-4d05-a941-4a6912e0ac0f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f6886-59ed-49c4-ba6b-919657f7d4a9] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f069e-fa6a-4c4e-bec7-aa70b0ad4583] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5527-5ef1-401e-b49a-80980b2e6f62] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb0b4-de90-4a19-a01f-eefbedab1dd3] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f2031-4f59-4f78-9f4f-1b733f41c074] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe887-08b8-483a-83c4-66bb13c6888b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f0c06-fb42-4252-971c-35cdb81cef08] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8935-84b7-4b4f-ba8f-a3098c94de70] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb217-d524-4b3f-91ed-9e5b24f35154] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7a71-94a9-4420-a91e-7bd5503b02c8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5920-a2a3-4ba7-88da-8385a4401fe7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8b8f-5a39-4795-9086-e2906b2ad8fe] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f4481-3ce6-436b-83dc-befe8653fd44] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7ab5-a53f-4357-ae99-93c567b22382] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8e55-efa5-4b54-b095-64ef63c4d7f4] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ff960-0f55-4e24-874e-6fe1783cb45e] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f637a-97c2-4d3f-9aac-c0d7d76e27e6] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fbb39-047d-4d62-bcfe-86da14231a37] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb643-329f-466a-b049-7d36e23ce6c7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f149d-56b8-4529-a863-9807ae3f01f0] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9383-7a79-4396-938c-dfa02f720e39] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fabdc-4e1f-4b47-949f-6e32fcc403ef] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001feb10-aad3-472d-aaca-1dc7721523c7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc9de-7f24-4873-bac6-e61e447232a9] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa1b9-5e48-4b77-bc52-7e8458aa2338] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb7c7-7f2f-4a0c-ac61-b088dcf1d32b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001feb6b-ca95-4bb0-9df8-9d6b6b42a4a4] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f35f1-648a-431d-b9e8-00c255c4160c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe89d-4e07-4c6b-a584-ab4e833b1838] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fafe2-326d-4823-9989-5962a6133cd8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f21cf-223a-47a1-bf86-442f85fd710b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb1c6-6dd1-443d-b3ca-3011322346e3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f20ae-b5c5-4036-877b-7e00b5efb7ab] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe15a-1114-4447-bb14-5d14c65a3997] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3a88-11af-40d3-a67d-468cab1c2fc7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5e50-883f-4b46-9548-e926bb49bf16] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb17e-0d38-4e65-b0e2-43085e3762a3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb622-a47f-4f45-93ff-dce1b7e83797] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f6847-b4e6-48d5-a753-715aaf512bf5] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f063a-e612-4240-9c0b-bacb572590bf] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8f40-3351-4ef0-ac7f-55f3809dd340] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fbb64-c1cf-41cc-9923-5f4dd70cbede] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5830-37e5-47ec-a0c3-f107bfabaf8a] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001fce9e-8ab5-446f-9b14-bfbeeecb3596] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9b75-a0bc-401b-976c-d5a95e43e91d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3c5a-4e41-475d-8828-c8d348cab6c5] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc843-83a7-42c5-965e-b063993e1e5d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8f61-9110-49a9-81df-4ad3b783b768] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fbd95-c567-47c6-995f-a440e46bb1ba] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa671-efae-4225-a9c2-5b2757589424] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ffd39-e8ab-46c8-b902-d94ab7a604db] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc081-108f-44d9-860b-847c9e53906a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3232-4f42-497b-a8bb-35beb717e08a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7445-cd5b-4c0b-ba63-c8b580d24ab7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f16a9-74a3-44a4-a26d-181ac405af7d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc107-09bd-4e46-b249-a5e492c3d15c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5d4e-b7f0-4904-84e1-7efc937e9b45] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fcb62-a6a4-49fa-bb67-4b5c3dfda430] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fce51-90fd-4e57-92b1-ff407b28bb08] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa384-aff4-4612-bc02-e3526b874883] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb0d9-7891-41a0-9086-fb62be520134] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9d7d-923b-4496-87cf-38435de44ac0] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5d48-48ae-471d-ab3a-141710d8a581] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f32fe-63a9-447e-b7c8-5fa3c427c192] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f4819-1e77-4bfd-a76f-c57bcc45cf89] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb128-8271-4e34-bdfa-2147d495a65c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f30e7-7fd4-4c97-89fb-9faa5a75e161] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa65a-d1ed-4d6b-ad23-77191f9e11f1] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd3e5-d32f-408e-98f0-c07ee1e634b9] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f55ee-b7ef-4bd7-a4a6-574d03e02077] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc080-f48d-472e-bcf6-46c9076b6e70] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8ae4-1707-45a4-b2ff-9629444d6f45] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f21b4-041c-4f2a-9dea-1c2553c5e66a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7c6b-831f-4354-a3c9-8f87da10a85f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fda55-651e-4cee-b95b-26a76110266d] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f3e7f-f497-4dce-b8dd-53e6feaf352e] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f55e6-2d80-405b-b897-f76eeea0658d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7c68-42aa-475b-bb2c-348f092f8928] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2a8d-8379-49e8-970e-ac0090156074] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f1527-8fd6-4b6a-9429-51c826b0b7ff] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f03d5-a28f-43b2-b6a1-a4a0f50c81ad] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3ca4-0c1b-402d-8e85-ba74a604a2d6] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ffb8c-55be-4050-b426-6a31ad07fb8c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc4b7-80c8-4efa-97a5-a450f953a6bc] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f90b1-251e-4b78-802d-77c7915ba5fa] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2f1f-1584-456d-a432-67950aa498e6] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ff8f6-75fc-4694-8421-489000b30d5d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fed4b-86c8-425f-b625-010289ca3636] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f7055-b8fe-4864-b84c-3dec27fdacd4] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb122-5dfb-4e0d-b43f-01ea0d7e9388] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f20f7-544a-4d1c-8713-c3907e0e540b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f1b54-078e-4a90-86c5-e03eb99a746c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fec85-3bfe-4b05-af79-96d97821fa27] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f50ef-d9dd-48ad-b16a-5422c892864a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f85f9-5aff-40c4-9583-56e1ce179d2f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3ae4-780a-4a4b-ba44-6e33eb0b1aac] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f807a-eb41-43c6-ba98-96d48b748eae] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9c8a-55a9-479c-8d99-e4e9799e4fb3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ff92b-9a63-49d5-91b4-2c0166b9254d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2460-3133-4012-8655-928f301724ec] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f562d-230f-4c72-8155-d6181831fcd2] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f4086-cc42-4470-a173-b7d39ddfd0ec] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc89c-83d0-4d06-9208-68abf4400817] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc059-9901-4e2a-aa72-33b2e4b3282a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdf2c-a2e6-485e-ae71-3e67cbe3fbc9] | PROD | 1 | 1 | 1 |
PUT /content returned 5xx. Service-side regression / dependency outage.
Bad gateway: front-door couldn't reach NBS workload.
Save exceeded gateway timeout — usually large notebook + slow backing store.
NBS replied 503 — backend overloaded or scaling event.
Etag fetch returned 404 — artifact deleted/moved mid-save or metadata replication lag.
Browser threw before the response returned — usually corp proxy, VPN drop, or page navigation aborting save.
Tenant's Fabric capacity is paused / suspended. Save cannot proceed until reactivated.
User's MWC token doesn't have write permission for this artifact / capacity.
User notebook exceeded the 32 MB save limit (often due to embedded outputs/widgets).
Pre-filled with the same week range / environment as this dashboard. Click Copy to paste into Kusto Explorer or Azure Data Explorer.
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let tridentItems = cluster('pbiclients.eastus').database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where (customDimensions.TL_componentName == 'Notebook.NotebookFileView' and customDimensions.TL_event contains 'notebook.notebookProfile')
or (customDimensions.TL_componentName == '@synapse/notebook-core:SynapseNotebookConnector' and customDimensions.TL_message contains 'Connect NotebookViewModel with AzureNotebookRef')
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.browserVersion != "97.0.4692.71"
| extend instanceId = iff(customDimensions.TU_instanceId != '', tostring(customDimensions.TU_instanceId), tostring(customDimensions.TU_aznbInstanceId))
| project timestamp, env = tostring(customDimensions.TL_environment), instanceId;
let targetData = tridentItems
| join kind=inner (
cluster('azurenb.southcentralus').database('Prod').aznbServices
| where TIMESTAMP >= _startTime and TIMESTAMP <= _endTime
| where hostName == "Trident"
| where msg in ("join_session_success", "join_session_error")
| project TIMESTAMP, msg, isSuccess=iff(msg == "join_session_success", 1, 0), isFail=iff(msg == "join_session_error", 1, 0), instanceId, componentVersion
)
on $left.instanceId == $right.instanceId;
let countItemsByDayAndStatus = targetData
| summarize dcount(instanceId) by tostring(msg), bin(timestamp, 1d);
let countItemsByDay = targetData
| summarize totalCount = dcount(instanceId) by bin(timestamp, 1d);
let finalData = countItemsByDayAndStatus | join kind = inner (countItemsByDay) on $left.timestamp == $right.timestamp;
finalData
| where msg == 'join_session_success'
| extend percentageDouble = round(100.0 * dcount_instanceId / (totalCount * 1.0), 2)
| project msg, timestamp, distinct_collabSession = dcount_instanceId, percentage = percentageDouble, totalCount
| order by timestamp asc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let tridentItems = cluster('pbiclients.eastus').database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where (customDimensions.TL_componentName == 'Notebook.NotebookFileView' and customDimensions.TL_event contains 'notebook.notebookProfile')
or (customDimensions.TL_componentName == '@synapse/notebook-core:SynapseNotebookConnector' and customDimensions.TL_message contains 'Connect NotebookViewModel with AzureNotebookRef')
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.browserVersion != "97.0.4692.71"
| extend instanceId = iff(customDimensions.TU_instanceId != '', tostring(customDimensions.TU_instanceId), tostring(customDimensions.TU_aznbInstanceId))
| project env = tostring(customDimensions.TL_environment), instanceId;
let targetData = tridentItems
| join kind=inner (
cluster('azurenb.southcentralus').database('Prod').aznbServices
| where TIMESTAMP >= _startTime and TIMESTAMP <= _endTime
| where hostName == "Trident"
| where msg in ("join_session_success", "join_session_error")
| project TIMESTAMP, msg, instanceId, componentVersion
)
on $left.instanceId == $right.instanceId;
let total_distinct_instanceId_byVersion = targetData
| summarize totalDistinct = count_distinct(instanceId) by componentVersion;
let finalTable = targetData
| extend joinStatus = tostring(msg)
| where joinStatus == 'join_session_success'
| summarize successDistinct = count_distinct(instanceId) by componentVersion, joinStatus
| join kind = inner (total_distinct_instanceId_byVersion) on componentVersion;
finalTable
| extend percentageDouble = round(100.0 * successDistinct / (totalDistinct * 1.0), 2)
| project componentVersion, joinRate = percentageDouble, successCount = successDistinct, totalCount = totalDistinct
| order by totalCount desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let aznbCollabSessionWithError = cluster("azurenb.southcentralus").database("Prod").aznbServices
| where PreciseTimeStamp >= _startTime and PreciseTimeStamp <= _endTime
| where hostName == "Trident"
| where HttpRequestUserAgent !contains "ThousandEyes"
| where eventName contains "collab"
| extend hasError = iif(level=="error", 1, 0)
| extend datebin=bin(PreciseTimeStamp, 1d)
| summarize hint.shufflekey = instanceId hasError=max(hasError) by datebin, instanceId, documentId, componentVersion
| project datebin, hasError, instanceId, documentId, componentVersion;
let tridentJoinedCollabData = cluster("pbiclients.eastus").database("appinsights").customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| where customDimensions.TL_extensionName == 'DES'
| where customDimensions.browserVersion != "97.0.4692.71"
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.TL_message == 'AzNB collaboration: onSessionStatusChange' and customDimensions.TU_sessionStatus == 'joined'
| extend aznbInstanceId = tostring(customDimensions.TU_aznbInstanceId), environment = tostring(customDimensions.TL_environment)
| summarize hint.shufflekey = aznbInstanceId by environment, aznbInstanceId;
let errorCntData = tridentJoinedCollabData
| join hint.strategy = shuffle kind=inner (
aznbCollabSessionWithError
| summarize hint.shufflekey = instanceId errorCnt = sum(hasError) by datebin, instanceId
) on $left.aznbInstanceId == $right.instanceId;
errorCntData
| extend hasError = errorCnt > 0
| summarize dcount(instanceId), totalInstances=count(), unreliableInstances=countif(hasError>0) by datebin, environment
| where dcount_instanceId > 50
| extend sessionReliability = 100 - round(unreliableInstances*100.0/totalInstances, 2)
| project timestamp = datebin, environment, dcount_instanceId, totalInstances, unreliableInstances, sessionReliability
| order by timestamp asc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let totalData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment']);
let saveTotalCnt = totalData
| where customDimensions.TL_message contains 'Save is triggered'
| summarize totalCnt = count() by bin(timestamp, 1d);
let saveFailedData = totalData
| where customDimensions.TL_message contains 'Failed when saving notebook content';
let saveFailedCnt = saveFailedData
| summarize failedCnt = count(),
failedCntExcludeUserErr = countif(
customDimensions.TU_code != 'NotebookSave_ExceedMaximumSize'
and customDimensions.TU_code != 'UserDevice_ProxyError'
and customDimensions.TU_code != 'CapacityNotActive'
and customDimensions.TU_code != 'GetMWCToken_404_CapacityNotActive'
and customDimensions.TU_code != 'ArtifactWrite_Unauthorized'
and customDimensions.TU_code != 'GetMWCToken_403_TenantNotAuthorizedForCluster'
) by bin(timestamp, 1d);
let finalData = saveTotalCnt | join kind = inner (saveFailedCnt) on timestamp;
finalData
| extend failureRate = round(100.0 * failedCnt / (totalCnt * 1.0), 2),
failureRateExcludeUserErr = round(100.0 * failedCntExcludeUserErr / (totalCnt * 1.0), 2)
| project timestamp,
successRate = 100.0 - failureRate,
successRateExcludeUserErr = 100.0 - failureRateExcludeUserErr,
totalCnt, failedCnt, failedCntExcludeUserErr
| order by timestamp asc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let totalData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment']);
let saveTotalCnt = totalData
| where customDimensions.TL_message contains 'Save is triggered'
| extend artifactId = tostring(customDimensions.TU_artifactId)
| summarize totalCnt = dcount(artifactId) by bin(timestamp, 1d);
let saveFailedCnt = totalData
| where customDimensions.TL_message contains 'Failed when saving notebook content'
| extend artifactId = tostring(customDimensions.TU_artifactId)
| summarize failedCnt = dcount(artifactId) by bin(timestamp, 1d);
let finalData = saveTotalCnt | join kind = inner (saveFailedCnt) on timestamp;
finalData
| extend failureRate = round(100.0 * failedCnt / (totalCnt * 1.0), 2)
| project timestamp, successRate = 100.0 - failureRate, totalCnt, failedCnt
| order by timestamp asc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let totalData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment']);
let saveFailedData = totalData
| where customDimensions.TL_message contains 'Failed when saving notebook content'
| extend errorObj = customDimensions.TL_error;
saveFailedData
| extend artifactId = tostring(customDimensions.TU_artifactId), category = tostring(customDimensions.TU_category)
| summarize count_ = count(), uniqueArtifactCnt = dcount(artifactId), sampleError = arg_max(tostring(errorObj), timestamp)
by code = tostring(customDimensions.TU_code), category
| order by count_ desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where customDimensions.TL_componentName == 'TrackLib.Ajax'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.TU_request has 'workloads/Notebook/Data/Automatic/api/workspaces' and customDimensions.TU_request has '/content'
| extend environment = tostring(customDimensions.TL_environment)
| extend requestInfo = parse_json(tostring(customDimensions.TU_request))
| extend url = requestInfo['url']
| extend url = substring(url, 0, strlen(url) - 16)
| extend method = requestInfo.method
| where method == 'PUT' or method == 'HEAD'
| extend responseInfo = parse_json(tostring(customDimensions.TU_response))
| extend statusCode = responseInfo['statusCode']
| where statusCode != ''
| summarize uniqueUrlCnt = dcount(tostring(url)) by environment = tostring(environment), statusCode = tostring(statusCode)
| order by uniqueUrlCnt desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let failedToPut = 'Failed to put content';
let typeError = 'TypeError: Failed to fetch (browser thrown this error when response is not returned)';
let failedToGetEtag= 'Failed to get etag';
let failedToAccess = 'Failed to access the artifact metadata';
let noAccess = 'No access to the artifact or the workspace';
cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.TL_message has 'Failed when saving notebook content' or customDimensions.TL_message has 'Attempt to put notebook content failed'
| extend environment = tostring(customDimensions.TL_environment)
| extend saveType = tostring(customDimensions.TU_saveType)
| extend artifactId = tostring(customDimensions.TU_artifactId)
| extend errorDetail = parse_json(tostring(customDimensions.TL_error))
| extend cause = parse_json(tostring(errorDetail.cause))
| extend causeResponse = parse_json(tostring(cause.response))
| extend response = iff(causeResponse != '', causeResponse, parse_json(errorDetail.response))
| extend statusCode = tostring(response.status)
| extend message = tostring(errorDetail.message)
| extend message = replace_regex(message, "[0-9a-fA-F]{8}(-[0-9a-fA-F]{4,12}){4}", "<g-u-i-d>")
| extend message = replace_regex(message, @"Notebook content size [\d.]+", "Notebook content size <#>")
| extend message = iff(message startswith "Notebook content size <#>", "Notebook content size <#> MB exceeds maximum allowed size 32 MB", message)
| extend message = iff(message has 'TypeError: Failed to fetch', typeError, message)
| extend message = iff(message startswith 'Failed to put content of notebook', failedToPut, message)
| extend message = iff(message startswith 'Failed to get etag of notebook', failedToGetEtag, message)
| extend message = iff(message startswith "Failed to access the artifact metadata.", failedToAccess, message)
| extend message = iff(message startswith "You don't have the access to the artifact or the workspace it belongs to", noAccess, message)
| extend message = iff(message startswith "[NotebookMaxContentLengthExceeded]", "NotebookMaxContentLengthExceeded", message)
| summarize uniqueArtifactCnt = dcount(artifactId) by environment, message, statusCode
| order by uniqueArtifactCnt desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| where customDimensions.TL_message has 'Failed when saving notebook content' or customDimensions.TL_message has 'Attempt to put notebook content failed'
| extend artifactId = tostring(customDimensions.TU_artifactId)
| extend code = tostring(customDimensions.TU_code)
| extend errorDetail = parse_json(tostring(customDimensions.TL_error))
| extend cause = parse_json(tostring(errorDetail.cause))
| extend causeResp = parse_json(tostring(cause.response))
| extend response = iff(causeResp != '', causeResp, parse_json(errorDetail.response))
| extend statusCode = tostring(response.status)
| extend rawMessage = tostring(errorDetail.message)
| extend httpOp = case(
rawMessage startswith "Failed to put content of notebook"
or rawMessage has "Attempt to put notebook content failed",
"PUT /workspaces/{ws}/artifacts/{id}/content",
rawMessage startswith "Failed to get etag of notebook",
"HEAD /workspaces/{ws}/artifacts/{id}/content",
rawMessage startswith "Failed to access the artifact metadata",
"GET /workspaces/{ws}/artifacts/{id}",
rawMessage startswith "You don't have the access to the artifact",
"AAD /authorization-check",
rawMessage startswith "[NotebookMaxContentLengthExceeded]"
or rawMessage has "exceeds maximum allowed size",
"PUT /content (rejected client-side, oversize)",
rawMessage has "TypeError: Failed to fetch",
"PUT /content (browser aborted before response)",
rawMessage has "NetworkError when attempting to fetch resource",
"PUT /content (browser network error)",
rawMessage has "Load failed",
"PUT /content (browser load failed)",
rawMessage has "Failed to fetch",
"PUT /content (generic fetch error)",
"other / uncategorized")
| extend layer = case(
httpOp has "browser" or httpOp has "fetch error",
"Client (browser/network)",
httpOp has "oversize",
"Client (size limit)",
httpOp startswith "AAD",
"AAD / Authorization",
statusCode startswith "5",
"Backend 5xx",
statusCode == "404" or statusCode == "412" or statusCode == "409",
"Backend 4xx (notebook conflict / not-found)",
statusCode startswith "4",
"Backend 4xx (other)",
statusCode == "" or statusCode == "0",
"No HTTP response captured",
"Other")
| summarize
eventCnt = count(),
uniqueArtifactCnt = dcount(artifactId),
sampleMessage = arg_max(rawMessage, timestamp),
sampleErrorCode = arg_max(code, timestamp)
by layer, httpOp, statusCode
| order by uniqueArtifactCnt desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let totalData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment']);
totalData
| where customDimensions.TL_message has 'Failed when saving notebook content' or customDimensions.TL_message has 'Attempt to put notebook content failed'
| extend artifactId = tostring(customDimensions.TU_artifactId)
| extend code = tostring(customDimensions.TU_code)
| extend environment = tostring(customDimensions.TL_environment)
| extend componentVersion = tostring(customDimensions.TU_componentVersion)
| extend errorDetail = parse_json(tostring(customDimensions.TL_error))
| extend cause = parse_json(tostring(errorDetail.cause))
| extend causeResp = parse_json(tostring(cause.response))
| extend response = iff(causeResp != '', causeResp, parse_json(errorDetail.response))
| extend statusCode = tostring(response.status)
| extend message = tostring(errorDetail.message)
| extend responseBody = tostring(response.body)
| where statusCode == "500"
| summarize
eventCnt = count(),
uniqueArtifactCnt = dcount(artifactId),
sampleMessage = arg_max(message, timestamp),
sampleResponseBody= arg_max(responseBody, timestamp)
by environment, code, componentVersion
| order by eventCnt desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let totalData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment']);
totalData
| extend aznbInstanceId = tostring(customDimensions.TU_aznbInstanceId)
| extend artifactId = tostring(customDimensions.TU_artifactId)
| where isnotempty(aznbInstanceId) or isnotempty(artifactId)
| summarize uniqueInstances = dcountif(aznbInstanceId, isnotempty(aznbInstanceId)),
uniqueNotebooks = dcountif(artifactId, isnotempty(artifactId))
by bin(timestamp, 1d)
| order by timestamp asc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| extend msg = tostring(customDimensions.TL_message)
| where msg startswith 'Yield save leader completed. Yield success:'
or msg == 'Failed to yield save leader'
or msg startswith 'Do not need to yield save leader'
| extend isLeader = tostring(customDimensions.TU_isLeader)
| extend collStatus = tostring(customDimensions.TU_collSessionStatus)
| extend yieldState = case(
msg == 'Yield save leader completed. Yield success: true', 'YieldSucceeded',
msg startswith 'Yield save leader completed. Yield success: false', 'YieldFailed',
msg == 'Failed to yield save leader', 'YieldFailed',
msg startswith 'Do not need to yield save leader', 'NotNeeded',
'Other')
| extend bucket = case(
yieldState == 'YieldSucceeded', 'Yield succeeded',
yieldState == 'YieldFailed', 'Yield failed',
yieldState == 'NotNeeded', strcat('Not needed (isLeader=', isLeader, ' / collStatus=', collStatus, ')'),
'Other')
| extend aznbInstanceId = tostring(customDimensions.TU_aznbInstanceId)
| extend env = tostring(customDimensions.TL_environment)
| summarize uniqueInstances = dcount(aznbInstanceId), events = count() by yieldState, bucket, env
| order by events desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| extend msg = tostring(customDimensions.TL_message)
| where msg startswith 'Yield save leader completed. Yield success: false'
or msg == 'Failed to yield save leader'
| extend errorMsg = tostring(coalesce(
tostring(customDimensions.TU_errorMessage),
tostring(customDimensions.TU_error),
''))
| extend errorMsg = iff(errorMsg == '', '(no error message)', errorMsg)
| extend aznbInstanceId = tostring(customDimensions.TU_aznbInstanceId)
| extend env = tostring(customDimensions.TL_environment)
| summarize uniqueInstances = dcount(aznbInstanceId), events = count() by errorMsg, env
| order by events desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let yieldLeaderData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| extend msg = tostring(customDimensions.TL_message)
| where msg == "Yield save leader completed. Yield success: true"
| extend newLeaderId = tostring(customDimensions.TU_leaderId)
| extend env = tostring(customDimensions.TL_environment)
| where newLeaderId != ''
| project yieldTimestamp = timestamp, newLeaderId, env;
let yieldLeaderIds = toscalar(yieldLeaderData | summarize make_set(newLeaderId));
let saveData = cluster("azurenb.southcentralus").database("Prod").aznbServices
| where PreciseTimeStamp >= _startTime and PreciseTimeStamp <= _endTime
| where hostName == "Trident"
| where msg == "SAVE_FAILED"
| where instanceId in (yieldLeaderIds)
| project saveTs = PreciseTimeStamp, instanceId, log;
yieldLeaderData
| join kind = inner (saveData) on $left.newLeaderId == $right.instanceId
| extend gapInSecond = datetime_diff('second', saveTs, yieldTimestamp)
| where gapInSecond > 0 and gapInSecond < 20
| extend logObj = parse_json(log)
| extend errorMsg = tostring(coalesce(tostring(logObj.ErrorMessage), tostring(logObj.message), '(no message)'))
| extend artifactId = tostring(coalesce(
tostring(logObj.ArtifactId), tostring(logObj.artifactId),
tostring(logObj.NotebookId), tostring(logObj.notebookId),
tostring(logObj.ResourceId), tostring(logObj.resourceId), ''))
| summarize failures = count(),
uniqueInstances = dcount(newLeaderId),
uniqueNotebooks = dcountif(artifactId, isnotempty(artifactId))
by errorMsg, env
| order by failures desc
let UXEnvironment = dynamic(['PROD']);
let _startTime = datetime(2026-07-05T00:00:00Z);
let _endTime = datetime(2026-07-12T00:00:00Z);
let yieldLeaderData = cluster("pbiclients.eastus").database('appinsights').customEvents
| union cluster("pbiclientseu.northeurope").database("appinsights").customEvents
| where timestamp >= _startTime and timestamp <= _endTime
| extend customDimensions = parse_json(customDimensions)
| where customDimensions.TL_extensionName == 'DES'
| where isempty(['UXEnvironment']) or customDimensions.TL_environment in (['UXEnvironment']) or 'All Prod' in (['UXEnvironment'])
| extend msg = tostring(customDimensions.TL_message)
| where msg == "Yield save leader completed. Yield success: true"
| extend newLeaderId = tostring(customDimensions.TU_leaderId)
| extend env = tostring(customDimensions.TL_environment)
| where newLeaderId != ''
| project yieldTimestamp = timestamp, newLeaderId, env;
let yieldLeaderIds = toscalar(yieldLeaderData | summarize make_set(newLeaderId));
let saveData = cluster("azurenb.southcentralus").database("Prod").aznbServices
| where PreciseTimeStamp >= _startTime and PreciseTimeStamp <= _endTime
| where hostName == "Trident"
| where msg startswith 'File version is updated to'
| where instanceId in (yieldLeaderIds)
| project saveTs = PreciseTimeStamp, instanceId, log;
yieldLeaderData
| join kind = inner (saveData) on $left.newLeaderId == $right.instanceId
| extend gapInSecond = datetime_diff('second', saveTs, yieldTimestamp)
| where gapInSecond > 0 and gapInSecond < 20
| extend logObj = parse_json(log)
| extend artifactId = tostring(coalesce(
tostring(logObj.ArtifactId), tostring(logObj.artifactId),
tostring(logObj.NotebookId), tostring(logObj.notebookId),
tostring(logObj.ResourceId), tostring(logObj.resourceId), ''))
| summarize savesSucceeded = count(),
uniqueInstances = dcount(newLeaderId),
uniqueNotebooks = dcountif(artifactId, isnotempty(artifactId))
by env
| order by savesSucceeded desc
let _componentVersion = dynamic(null);
let _endTime = datetime(2026-07-12T00:00:00Z);
let _startTime = datetime(2026-06-28T00:00:00Z);
let _tenant = dynamic(null);
cluster("azurenb.southcentralus").database("Prod").aznbServices
| where PreciseTimeStamp between (_startTime .. _endTime)
| where service == "AzNB.Client"
| where eventName contains "dataIntegrity"
| where isempty(['_componentVersion']) or componentVersion in (['_componentVersion'])
| where isempty(['_tenant']) or Tenant in (['_tenant'])
| extend timeBin = bin(PreciseTimeStamp, 1d)
| summarize instances = dcount(instanceId),
instancesWithInconsistency = dcountif(instanceId, eventName endswith "/error")
by timeBin
| extend inconsistencyRate = round(instancesWithInconsistency * 100.0 / instances, 2)
| project timestamp = timeBin, instances, instancesWithInconsistency, inconsistencyRate
| order by timestamp asc
let _componentVersion = dynamic(null);
let _endTime = datetime(2026-07-12T00:00:00Z);
let _startTime = datetime(2026-06-28T00:00:00Z);
let _tenant = dynamic(null);
cluster("azurenb.southcentralus").database("Prod").aznbServices
| where PreciseTimeStamp between (_startTime .. _endTime)
| where service == "AzNB.Client"
| where eventName endswith "dataIntegrity/error"
| where isempty(['_componentVersion']) or componentVersion in (['_componentVersion'])
| where isempty(['_tenant']) or Tenant in (['_tenant'])
| summarize occurrences = count(),
instances = dcount(instanceId),
clients = dcount(fpId)
by msg
| order by instances desc