At least one metric is between 95% and 99%. Investigate trends below. Lowest weekly average: 95.17%.
MwcRequest_Status401 surged 4.4× (14 → 61 events, 24 unique notebooks) — see Save Reliability.GetMWCToken_Other surged 3.5× (492 → 1,737 events, 37 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.
Daily distinct counts from the same telemetry source as Collab + Save metrics. Notebook instances = browser-session-level (aznbInstanceId). Notebook IDs = artifact-level (artifactId) — one artifact may be opened in multiple instances.
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.10 | 99.72% | 882,142 | 884,617 |
1.7.9 | 99.82% | 3,821 | 3,828 |
1.7.7 | 100.00% | 136 | 136 |
1.7.8 | 100.00% | 73 | 73 |
1.7.5 | 100.00% | 39 | 39 |
1.7.4 | 100.00% | 20 | 20 |
1.7.3 | 100.00% | 14 | 14 |
1.7.6 | 100.00% | 11 | 11 |
Rolling 14-day window: 2026-08-02 → 2026-08-16. 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) | 76,865 | 1,040 | 741 |
| Cell source mismatch between local and fluid (editor not mounted) | 12,730 | 184 | 139 |
| Cell count mismatch between local and fluid DDS | 408 | 14 | 14 |
| Local cell doesn't have mapped remote id | 758 | 10 | 10 |
| Cell ID mismatch in cell order between local and fluid | 24 | 2 | 2 |
| Data integrity execution failed | 1 | 1 | 1 |
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 | 7,698 | 3,032 | |
CapacityNotActive | UserError | 4,966 | 46 | |
UserDevice_ProxyError | UserError | 2,380 | 34 | |
GetMWCToken_Other | UnknownError | 1,737 | 37 | |
NotebookSave_ExceedMaximumSize | UserError | 1,420 | 114 | |
MwcRequest_Status404 | UserError | 395 | 151 | |
GetMWCToken_401_PowerBINotAuthorizedException | UserError | 239 | 33 | |
ArtifactWrite_Unauthorized | UserError | 147 | 7 | |
GetMWCToken_401_TokenExpired | SystemError | 132 | 13 | |
GetMWCToken_403_TenantNotAuthorizedForCluster | UserError | 129 | 9 | |
GetMWCToken_0_SharedNetworkConnectionIssue | UserError | 128 | 46 | |
FaileToGetEtagOfNotebook | SystemError | 97 | 55 | |
MwcRequest_Status401 | SystemError | 61 | 24 | |
GetMWCToken_403_TokenExpired | SystemError | 19 | 13 | |
GetMWCToken_404_CapacityNotActive | UserError | 19 | 17 | |
NotebookSave_PreconditionFailed | SystemError | 11 | 11 | |
MwcRequestError|NotebookMaxContentLengthExceeded | UnknownError | 10 | 1 | |
MWCToken_ValidationException | SystemError | 9 | 9 | |
MwcRequest_Status500 | SystemError | 5 | 5 | |
TimeoutError|CacheTimeoutError | UnknownError | 5 | 5 |
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 | 368,008 |
| PROD | 0 | 1,880 |
| PROD | 412 | 437 |
| PROD | 404 | 178 |
| PROD | 401 | 154 |
| PROD | 403 | 73 |
| PROD | 500 | 8 |
| PROD | 408 | 3 |
| PROD | 201 | 3 |
| PROD | 413 | 1 |
| PROD | 400 | 1 |
| Message (click to expand) | Status | Unique Notebooks |
|---|---|---|
| TypeError: Failed to fetch (browser thrown this error when response is not returned) | — | 2,204 |
| Failed to fetch [ParentActivityId:<g-u-i-d>] | — | 1,048 |
| Failed to get etag | — | 273 |
| Failed to get etag | 404 | 151 |
| Notebook content size <#> MB exceeds maximum allowed size 32 MB | — | 114 |
| CapacityNotActive | — | 46 |
| — | — | 37 |
| NetworkError when attempting to fetch resource. [ParentActivityId:<g-u-i-d>] | — | 27 |
| Failed to get etag | 401 | 24 |
| Load failed [ParentActivityId:<g-u-i-d>] | — | 17 |
| Failed to get etag | 403 | 15 |
| [Metastore/PreconditionFailed/NotebookServiceError] Failed to update entity <g-u-i-d>/<g-u-i-d>. | 412 | 11 |
| [MwcTokenValidationException] Internal error MwcTokenValidationException. | 401 | 9 |
401 | 7 | |
| Failed to retrieve MWC token for "Notebook": WorkspaceId=<g-u-i-d> CapacityId=<g-u-i-d> ArtifactId=<g-u-i-d>. | — | 7 |
| Failed to get etag | 500 | 5 |
| Failed to get etag | 408 | 3 |
| The notebook has been deleted. | 404 | 3 |
| PBI API Access denied. (HTTP 403, RequestId=<g-u-i-d>) | 403 | 2 |
| NotebookMaxContentLengthExceeded | 413 | 1 |
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 |
|---|---|---|---|---|---|
MwcRequest_Status500 | — | PROD | 5 | 5 | view samplemessage: Failed to get etag of notebook f0ffce51-c5e2-414a-87ad-e6e207a60f67. MwcRequestError: Failed to send HTTP (MWC) request to https://4cd36fb375214ccf8153ad8f89794645.pbidedicated.windows.net/webapi/capacities/4CD36FB3-7521-4CCF-8153-AD8F89794645/workloads/Notebook/Data/Automatic/api/workspaces/df5f639b-1baf-4a1e-a5b1-3652145cd8d8/artifacts/f0ffce51-c5e2-414a-87ad-e6e207a60f67/content?v=1786348937734. Status code: 500. |
500_NotebookContentIsMissing | — | PROD | 1 | 1 | view samplemessage: System error. The content of this notebook is missing. Artifact Id: 4f3b8ca5-a15f-4a65-b3dc-d8c2b40e702f. |
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 | — | 6,447 | 2,443 | UserDevice_NetworkError |
other / uncategorized | — | 7,369 | 94 | UserDevice_ProxyError Timeout fetching MWC token for Notebook. 46732s elapsed. Please retry your operation. |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
PUT /content (generic fetch error) | — | 3,600 | 1,048 | UserDevice_NetworkError Failed to fetch [ParentActivityId:001fffdc-dead-408a-a0e9-baaf9472b6e5] |
PUT /content (browser network error) | — | 62 | 27 | UserDevice_NetworkError NetworkError when attempting to fetch resource. [ParentActivityId:001ffe75-5133-47af-8cc6-c8fe10c7937e] |
PUT /content (browser load failed) | — | 29 | 17 | UserDevice_NetworkError Load failed [ParentActivityId:001ff953-4fc0-487b-a4fb-083cc230c1fa] |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
HEAD /workspaces/{ws}/artifacts/{id}/content | 404 | 395 | 151 | MwcRequest_Status404 |
other / uncategorized | 412 | 11 | 11 | NotebookSave_PreconditionFailed |
other / uncategorized | 404 | 4 | 4 | NotebookSave_ItemDeleted [TargetItemNotInWorkspace] An internal error occurred. Access protector failed due to TargetItemNotInWorkspace |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
PUT /content (rejected client-side, oversize) | — | 1,420 | 114 | NotebookSave_ExceedMaximumSize Notebook content size 95.61 MB exceeds maximum allowed size 32 MB. |
PUT /content (rejected client-side, oversize) | 413 | 10 | 1 | MwcRequestError|NotebookMaxContentLengthExceeded [NotebookMaxContentLengthExceeded] file content size 37395688 is over 33554432 Bytes. |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
HEAD /workspaces/{ws}/artifacts/{id}/content | 401 | 61 | 24 | MwcRequest_Status401 |
other / uncategorized | 401 | 156 | 16 | MWCToken_ValidationException |
HEAD /workspaces/{ws}/artifacts/{id}/content | 403 | 52 | 15 | FaileToGetEtagOfNotebook |
other / uncategorized | 403 | 4 | 4 | MwcRequestError [DeniedByPolicy] An internal error occurred. Access protector failed due to DeniedByPolicy |
HEAD /workspaces/{ws}/artifacts/{id}/content | 408 | 3 | 3 | MwcRequest_Status408 |
other / uncategorized | 400 | 1 | 1 | NotebookSave_ContentError |
| HTTP Operation | Status | Events | Unique Notebooks | Latest Sample Error |
|---|---|---|---|---|
HEAD /workspaces/{ws}/artifacts/{id}/content | 500 | 5 | 5 | MwcRequest_Status500 |
other / uncategorized | 500 | 1 | 1 | 500_NotebookContentIsMissing System error. The content of this notebook is missing. Artifact Id: 4f3b8ca5-a15f-4a65-b3dc-d8c2b40e702f. |
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,534 | 46,606 |
| NotNeeded | Not needed (isLeader= / collStatus=) | PROD | 239 | 26,653 |
| NotNeeded | Not needed (isLeader=false / collStatus=inactive) | PROD | 384 | 10,841 |
| NotNeeded | Not needed (isLeader=false / collStatus=failed) | PROD | 66 | 7,880 |
| YieldFailed | Yield failed | PROD | 109 | 7,016 |
| YieldSucceeded | Yield succeeded | PROD | 54 | 309 |
| NotNeeded | Not needed (isLeader=false / collStatus=in-progress) | PROD | 2 | 2 |
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 | 11 | 10 | 15 |
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 | 104 | 6,940 |
| New leader is still this client | PROD | 5 | 68 |
| Timeout waiting for new leader | PROD | 5 | 8 |
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 '<', "<!--# TNrP"... is not valid JSON | PROD | 2 | 1 | 183 |
| Unexpected token '<', "<!--# PjHS"... is not valid JSON | PROD | 2 | 1 | 57 |
| Unexpected token '<', "<!--# wB5N"... is not valid JSON | PROD | 2 | 1 | 35 |
| Notebook content size 38.3 MB exceeds maximum allowed size 32 MB. | PROD | 2 | 1 | 19 |
| Notebook content size 38.31 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 12 |
| Notebook content size 32.72 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 3 |
| Notebook content size 38.34 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 3 |
| Unexpected token '<', "<!--# Z5Qs"... is not valid JSON | PROD | 1 | 1 | 3 |
| JSON Parse error: Unrecognized token '<' | PROD | 1 | 1 | 3 |
| Notebook content size 35.31 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 2 |
| Failed to fetch [ParentActivityId:001f7982-e2c4-4c71-87c2-94c5a61b4bd5] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa607-82e6-4f22-a5e8-2c3cd7f9ac48] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd840-322b-48ce-88df-06e0f29c8fbe] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdd4c-d271-4c99-87f8-c3b993160e74] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f0b4c-5c90-4931-9540-a9b2e2ad12ca] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f4f16-ae1b-46a8-836b-52209a87ffba] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f67c7-def8-4e43-9827-e5adea11b1bd] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fbc88-4081-4c02-9d45-251725df9978] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001fdf4c-759d-4e0f-b1fa-a37a9cacd70d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f96ab-be13-4d6c-817a-6ac8bc5aaa58] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdc5f-989f-4799-9049-32622fd7b764] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7d9c-2cc0-4b07-8e3e-db310599ec20] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f439d-ce98-4d1c-829d-f0be7b547eda] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2024-5ec2-48b1-8172-97ec4b8cc20e] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7c2a-f86c-4f46-9415-a747ae02406e] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f0e43-bbf8-4975-9d64-f03ae7ca260f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3c8b-afa1-4e55-a0cb-83ae3a491510] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fccd8-d142-42d5-84f4-463b7394ab4a] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd92a-c602-4509-8f33-23b87e5dd36b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f74c5-cc3f-46f9-85ee-f6b8a573d3f3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fcc2d-7538-4e8d-b52d-cb5a09c1fd61] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fcc3d-4405-4996-a325-a6649f3ebbc4] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8bad-9553-45b9-b28b-121a6c71c5b3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f572d-a121-48eb-a655-1eb6ffcd5077] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f786d-03bd-46fa-a4ce-06c61d6de7f0] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb31b-f463-4bc5-b25e-2f44a7b514cd] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9213-47bc-4b6f-9ba8-29c0a2ae05c8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe1df-fc4a-4e81-af32-7b79ed4e9a2f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fea59-1967-4a30-b118-c89f74ca89e8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc52f-a3c2-4421-893e-1cf84389bc0b] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f4ea2-eb71-4901-b7af-d88cc90232bf] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fabd6-e4b1-4790-94ed-fd0d46db8d79] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2fbb-501d-46b6-aca4-94f9773e198b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa5a1-5a3d-4ba2-8f79-9f7f66009b24] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd4f1-1a3e-428d-9aaf-ae0dc974226c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f65af-3955-495e-85ab-6dbeae2e23f3] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f6528-bc05-41b6-aebd-f123f1cdb6f4] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb24b-eb57-4c04-972d-c33f87d9bef8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3a18-d296-4722-b1f1-4244762aca6b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdd59-debc-4e40-9a07-a817ed8ae2a8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe51d-aa7f-483c-9240-86c5f9a741eb] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f0a62-05ba-40c5-9286-cc208a17d83f] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb113-619e-4742-bc29-cff196f4759c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f62e2-8135-420e-bb66-5552066ab832] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f98d3-98fd-4249-8fa9-be258881225e] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe0d9-afc6-4904-9305-06c68e3fa464] | PROD | 1 | 1 | 1 |
| NetworkError when attempting to fetch resource. [ParentActivityId:001f0f00-df13-4efe-a07e-5f5bfa202f86] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fabc8-2747-4210-b857-b825e1595d28] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa7c4-e727-4796-b770-b4936ec3cea2] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f788c-2dc9-4af8-9a93-bb85d57d28be] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9560-c3cd-4252-a184-a0564d0e4f30] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f7583-34b2-491b-bce0-79ca8bc35e55] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fe437-01c3-4b9f-9e69-57e2ae7305c8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f12b9-1dab-4b92-a39f-df68499c334d] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa081-90a6-4f05-bace-a558ac4f3b08] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fbbfc-3988-453d-ab75-e809c0ca8970] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2b25-6820-4da3-8686-92243e9babe2] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3fab-bafc-4a46-b6a8-13713599be78] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001ff7fc-7d34-47ef-9253-f5eba51ada93] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2922-2573-4afe-8916-13c6a8a1fe1c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f5a53-a83d-425f-bb39-4766051f71fa] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f852e-4e09-4614-8ccb-a092fd9a500b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f0e5e-da42-4c54-8e0b-afe6e21c4cbd] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fd346-5f42-4eed-b7f2-99a3e21574d5] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fae0f-e14f-4bd3-8a4c-4a2eac22e18c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f1c39-36bc-465a-977f-505495e44484] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f86df-a2ef-4b02-b1d0-4cc9dca42118] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc5d4-dde2-4b4c-93d4-e282884fcb43] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fef23-4ef9-4783-9fff-ee7123dd2164] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f2b7a-3f5a-42ec-bd10-926ebebd03e6] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdd99-9d22-4192-be7a-a5878eb9fd68] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fdffb-cd5a-4397-af44-6d5a2c6b4b7b] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9e5c-a1c8-46b1-9a48-a2d7525d8031] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb80f-6fdf-49d4-a567-8a4df09bbea8] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fc77e-b313-4fb6-8d0b-1b6ba1e0ede0] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| PROD | 1 | 1 | 1 | |
| Invalid operation. Notebook 911820a5-974f-44da-8cd6-5e9ce0a1f2c1 does not exist. | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8a72-fcde-4e25-88c1-0a2da39d7189] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f0fed-f642-4243-82d1-cabb320eebe7] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f8749-42d5-4554-bab0-d5b4616cb267] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fb893-4797-4ffc-afc6-7815e99265d0] | 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 | |
| PROD | 1 | 1 | 1 | |
| Failed to fetch [ParentActivityId:001f3649-86c7-4286-9353-a68651e17771] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f3249-c047-4140-baaa-9495bd649542] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f418e-de47-4723-884b-5084ca9ef6b2] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fcf93-cbd9-476f-a5f3-4c1eeabe8c52] | PROD | 1 | 1 | 1 |
| PROD | 1 | 1 | 1 | |
| Notebook content size 42.39 MB exceeds maximum allowed size 32 MB. | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001fa2a6-aa41-4898-9298-000206f04b9c] | PROD | 1 | 1 | 1 |
| Failed to fetch [ParentActivityId:001f9f51-b005-488d-964f-3322cbe07785] | PROD | 1 | 1 | 1 |
Save exceeded gateway timeout — usually large notebook + slow backing store.
PUT /content returned 5xx. Service-side regression / dependency outage.
Bad gateway: front-door couldn't reach NBS workload.
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 notebook exceeded the 32 MB save limit (often due to embedded outputs/widgets).
User's MWC token doesn't have write permission for this artifact / capacity.
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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-09T00:00:00Z);
let _endTime = datetime(2026-08-16T00: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-08-16T00:00:00Z);
let _startTime = datetime(2026-08-02T00: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-08-16T00:00:00Z);
let _startTime = datetime(2026-08-02T00: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