{ "$schema": "https://dataexplorer.azure.com/static/d/schema/60/dashboard.json", "schema_version": "60", "title": "waldo's BCTelemetry Dashboard", "pagesNavWidth": 223, "tiles": [ { "id": "58a9d2a6-ef15-45a7-a081-8bd645783134", "title": "Count per company", "visualType": "table", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 29, "width": 21, "height": 6 }, "queryRef": { "kind": "query", "queryId": "8602be28-bebf-4a06-b953-8772f1cdeb6e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "36af83a5-9ea2-437f-b877-1a994d272189", "title": "Count per eventId", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 11, "y": 0, "width": 13, "height": 6 }, "queryRef": { "kind": "query", "queryId": "c008bb5f-f112-4b2e-bd87-067b1623d64c" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "493ffb0e-905d-4269-96cd-34ef121ba65f", "title": "Events", "visualType": "table", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 6, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "6ee8955a-0509-4360-9835-fae7eae324cb" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [ { "urlColumn": "LearnUrl", "displayColumn": "eventId", "disabled": false } ], "colorRules": [] } }, { "id": "d796a89e-5f66-4992-bb0b-8d5130c4fd5f", "title": "Signals per Area", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 12, "width": 14, "height": 6 }, "queryRef": { "kind": "query", "queryId": "b2080001-26ba-4b1c-98b5-81e77452dad5" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c6ffe9c3-dc2d-4035-893a-cd2de16dc879", "title": "Custom Events (Microsoft)", "visualType": "table", "pageId": "f56f5822-56bf-4758-a589-1e398df2aeee", "layout": { "x": 0, "y": 0, "width": 11, "height": 14 }, "queryRef": { "kind": "query", "queryId": "868def6d-b14e-4b1f-b57e-083db46d0bdb" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "5d761873-80b0-4e93-84ef-b27472d05f1a", "title": "Custom Events (Not Microsoft)", "visualType": "table", "pageId": "f56f5822-56bf-4758-a589-1e398df2aeee", "layout": { "x": 11, "y": 0, "width": 11, "height": 14 }, "queryRef": { "kind": "query", "queryId": "dce33516-7013-4858-9815-ffe56de29c97" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "58e67413-3cc1-4564-8e5a-a0d73bbfe552", "title": "Telemetry on Tests (Last 10000)", "visualType": "table", "pageId": "fbdd4db5-d977-4a56-997e-4043d8c0645f", "layout": { "x": 0, "y": 0, "width": 18, "height": 7 }, "queryRef": { "kind": "query", "queryId": "0f7c5281-3a86-49c7-8223-8f80724a6ae3" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "eb1403d0-3a9e-4657-ac02-ebc2bdb2a04e", "title": "Test Regression (NoOfSqlStatements)", "visualType": "line", "pageId": "fbdd4db5-d977-4a56-997e-4043d8c0645f", "layout": { "x": 0, "y": 7, "width": 18, "height": 7 }, "queryRef": { "kind": "query", "queryId": "7ab0d9af-5add-4026-8124-333757a4cff5" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoOfSqlStatements" ], "seriesColumns": [ "FQMethod" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "7bfebbac-36c9-4eb1-9ec0-21b1ffc1919c", "title": "All Executions (Filter on MeasuredFunction) (Last 100)L", "visualType": "table", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 0, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "82d43d11-286a-40f9-80f2-b87b9d313d43" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "2b3554f0-62a7-4f05-8645-775d16ce0537", "title": "Averages per customers (Filter on MeasuredFunction)", "visualType": "table", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 12, "y": 0, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "05748e43-13c5-4052-b60a-3f3aa9f4de32" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "879a3f9f-2039-47dc-bf27-5b7e41ffa086", "title": "AvgDuration per Tenant.Message per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 49, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "942d4c05-5146-4c57-834c-2c84b5d2612c" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgDuration" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "db42d8cc-fc8f-4d9d-a468-f42b7d9c5b15", "title": "Last 1000 Missing Indexes", "visualType": "table", "pageId": "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "layout": { "x": 0, "y": 10, "width": 19, "height": 8 }, "queryRef": { "kind": "query", "queryId": "4de49ef9-7d2c-4d77-8648-d2f3be6dc56e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "902f4361-9100-49e1-b7f0-a503960e3ff3", "title": "Missing Indexes (By missing index)", "visualType": "table", "pageId": "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "layout": { "x": 0, "y": 2, "width": 18, "height": 8 }, "queryRef": { "kind": "query", "queryId": "1a6861e8-a2cd-4a71-b923-1d608f3cd46e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "370c3e16-a1a1-46c0-9a70-931ece74d3ac", "title": "Missing Indexes per Customer", "visualType": "table", "pageId": "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "layout": { "x": 18, "y": 2, "width": 6, "height": 8 }, "queryRef": { "kind": "query", "queryId": "600efe89-e821-43e6-8bb0-ad262a5d3b65" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "a3abee56-9597-4fa6-9076-f91c8577cc18", "title": "Missing indexes over time", "visualType": "stackedcolumn", "pageId": "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "layout": { "x": 0, "y": 18, "width": 19, "height": 7 }, "queryRef": { "kind": "query", "queryId": "3cf21d55-fb49-4aa1-a6c0-8568daf7cad5" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "a3f0dce1-796d-4af3-8d3b-ea8f967d69ec", "title": ".", "visualType": "markdownCard", "pageId": "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "layout": { "x": 0, "y": 0, "width": 24, "height": 2 }, "markdownText": "# Missing Indexes\n", "visualOptions": {} }, { "id": "8b18a687-a7ff-4d33-bffc-0d2ab9c25025", "title": "1.", "visualType": "markdownCard", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 0, "width": 20, "height": 3 }, "markdownText": "# Partial Records\n", "visualOptions": {} }, { "id": "13d901f3-4d4b-4c9c-9709-7dfc79754f58", "title": "Partial Records (Most columns on top)", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 3, "width": 20, "height": 9 }, "queryRef": { "kind": "query", "queryId": "6d6a812f-0956-4a64-a235-8dd24298387e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0bf7f557-415a-4742-bca6-bf0fbf8357c9", "title": "No Of Columns by Extension", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 12, "width": 10, "height": 7 }, "queryRef": { "kind": "query", "queryId": "885767e4-1f73-45b7-a6bc-d34b344b7dbc" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "ede47df1-472f-434c-bfc3-00b8a0f0c83a", "title": "No Of Columns by Table", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 10, "y": 12, "width": 10, "height": 7 }, "queryRef": { "kind": "query", "queryId": "a65356d1-831a-4ccf-a5c2-a8ccf3135dbb" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "8beffbc9-847c-4980-8699-58206c9c9851", "title": "2.", "visualType": "markdownCard", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 19, "width": 20, "height": 3 }, "markdownText": "# Locking", "visualOptions": {} }, { "id": "663a3dd0-2c2e-41e5-b816-15f8e709ff4b", "title": "Locking IsEmpty", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 22, "width": 13, "height": 6 }, "queryRef": { "kind": "query", "queryId": "1705eabe-f7b5-4305-974f-fcc52aa15996" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c520b0d4-e9e8-4cb2-816f-c0f8077cbcbb", "title": "IsEmpty by Extension", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 13, "y": 22, "width": 7, "height": 6 }, "queryRef": { "kind": "query", "queryId": "0cf9db9d-1796-42ca-93b5-0cbe8cd9aab3" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "a985afb8-3934-4da9-920c-d61dceee5383", "title": "Locking Calcsums", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 28, "width": 13, "height": 6 }, "queryRef": { "kind": "query", "queryId": "ba569803-4d86-409a-b516-2921e178ce5e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "71c09f6b-3125-4a80-9d49-27a28b47e2f9", "title": "Calcsums by Extension", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 13, "y": 28, "width": 7, "height": 6 }, "queryRef": { "kind": "query", "queryId": "db160dcd-c19d-4eb7-b458-2624fd3fc3d4" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d6721bfe-13f2-4b0f-b9f1-cba1422c9584", "title": "Locking Counts", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 0, "y": 34, "width": 13, "height": 6 }, "queryRef": { "kind": "query", "queryId": "4f86cd2a-e770-4f42-8a0f-c95f4a4044d6" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "e87dead3-c5f4-4ce2-bedb-bbfab681531a", "title": "Count by Extension", "visualType": "table", "pageId": "2546cc61-63e2-4e89-8157-d2977e6ddde6", "layout": { "x": 13, "y": 34, "width": 7, "height": 6 }, "queryRef": { "kind": "query", "queryId": "3da41e67-704f-4615-bf68-4e3374cd958b" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "8dc2d36b-69e2-4d37-8e20-29ddd36df1e3", "title": "Last Deadlocks", "visualType": "table", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 3, "width": 13, "height": 7 }, "queryRef": { "kind": "query", "queryId": "b700bc43-0173-48ad-94fc-4062bbd134e1" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "dd110ace-993f-4bda-9fa9-c88ce5a3ba84", "title": "DeadLocks By Customer", "visualType": "table", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 13, "y": 3, "width": 8, "height": 7 }, "queryRef": { "kind": "query", "queryId": "64ad1976-19d2-4e8f-8d57-9b2907eb8396" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "7fc032e1-51ee-466f-ba81-fea165764dd6", "title": "Deadlocks by day, TenantDescription", "visualType": "stackedcolumn", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 10, "width": 11, "height": 6 }, "queryRef": { "kind": "query", "queryId": "c7237d4c-bee5-406e-8b1e-9e3ab4029335" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "6d2e8a36-4f35-401b-8e59-a179df48be20", "title": "Per SourceProcess", "visualType": "table", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 16, "width": 21, "height": 8 }, "queryRef": { "kind": "query", "queryId": "b14a2eb2-9921-4e06-8d9b-1c347a0b697e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "6a28c367-2f8d-4518-9c64-3f56a4f635b2", "title": "Locking Object", "visualType": "pie", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 11, "y": 24, "width": 10, "height": 12 }, "queryRef": { "kind": "query", "queryId": "2260eaac-bc82-4f44-83ec-9a52ae54e3b7" }, "visualOptions": { "hideLegend": true, "xColumn": "LockingObject", "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "5ae67d35-441f-4f50-b4cb-581ce485b7d7", "title": "Source Process", "visualType": "pie", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 24, "width": 11, "height": 12 }, "queryRef": { "kind": "query", "queryId": "1f25df10-8c61-4450-bafe-e5447014ba06" }, "visualOptions": { "hideLegend": true, "xColumn": "SourceProcess", "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": true, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "202772f1-642c-4f03-8fc8-2c3221d51ec1", "title": ".", "visualType": "markdownCard", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 0, "width": 24, "height": 3 }, "markdownText": "# Lock Timeouts\r\n\r\n*“The operation could not complete because a record in the [table name] table was locked by another user. Please retry the activity.”*", "visualOptions": {} }, { "id": "c54267c7-cd9f-4d7d-ace5-07c4f51753b6", "title": "Lock Timeouts details (Last 100)", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 3, "width": 15, "height": 13 }, "queryRef": { "kind": "query", "queryId": "bde82600-5be6-4e68-a44c-de60b58b693b" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d0ae2747-309d-494b-82cd-8d799cc46c1b", "title": "Lock Timeouts By Customer", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 15, "y": 3, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "4e84039d-555f-4ce4-aa87-efec7f29420f" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "78fba414-a825-4909-8160-cd65063e2aff", "title": "Lock Timeouts by day", "visualType": "stackedcolumn", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 15, "y": 10, "width": 9, "height": 6 }, "queryRef": { "kind": "query", "queryId": "acdcccd3-7d0b-4454-b7ed-3c264a66b326" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "73b1cef1-fe54-4213-ac87-3f5684c4c233", "title": "Lock Timeouts by Source Process", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 22, "width": 13, "height": 12 }, "queryRef": { "kind": "query", "queryId": "0804cc9e-9770-4af1-bdd7-9be06dd7412d" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0c2d9c72-e771-46c9-901c-ee85b05bf01f", "title": "Lock Timeouts by Locking Object", "visualType": "pie", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 13, "y": 22, "width": 11, "height": 12 }, "queryRef": { "kind": "query", "queryId": "a14a9a82-dc6a-42c1-8b04-907b83b2b6e7" }, "visualOptions": { "hideLegend": true, "xColumn": "LockingObject", "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "00cfeb83-510c-4317-97b7-34c2772c1e2c", "title": ".", "visualType": "markdownCard", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 0, "width": 21, "height": 3 }, "markdownText": "# Deadlocks\r\n\r\n*“The activity was deadlocked with another user who was modifying the [table name] table. Please retry the activity.”*\r\n", "visualOptions": {} }, { "id": "7d036709-66c6-4a5f-977b-5c2984d9c050", "title": "API Calls by Customer (RT0008)", "visualType": "table", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 0, "width": 13, "height": 6 }, "queryRef": { "kind": "query", "queryId": "edba34e4-103f-41ac-a20d-79ddb726db11" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c5718320-ed81-4242-8837-c2baa39149db", "title": "By Day (RT0008)", "visualType": "column", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 13, "y": 0, "width": 11, "height": 6 }, "queryRef": { "kind": "query", "queryId": "2abdf7a3-da30-40bf-b448-62c957d9cfee" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgTime" ], "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "25cd2e5e-a56f-4836-90ec-76bbaaa8403c", "title": "Number of signals per day (-30d)", "visualType": "timechart", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 0, "width": 21, "height": 6 }, "queryRef": { "kind": "query", "queryId": "cb86eaee-df0e-4222-b1a4-ee3d495e0304" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "827edbab-5dad-4efe-8f09-f4dcb58d82bc", "title": "Per Object (Incl. Queryfilter)", "visualType": "table", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 6, "width": 24, "height": 6 }, "queryRef": { "kind": "query", "queryId": "6f40df88-d3b3-4c23-9746-1a8c4eb1077d" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "7e173913-870b-4a69-9612-2b9808f19254", "title": "Top 10 Companies (highest usages)", "visualType": "bar", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 22, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "b30eac30-447a-470e-a07e-b0babb422fa2" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "9690b5e2-14b1-43d6-9679-dfc7fcb765e4", "title": "Base Query - Sanity check", "visualType": "bar", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 50, "width": 21, "height": 5 }, "queryRef": { "kind": "query", "queryId": "0196f1fe-7f58-44b9-97fc-8e64c3f39e53" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "xColumnTitle": "", "xColumn": null, "yColumns": [ "Count" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "715ec90f-2677-4b05-9519-019044f90a70", "title": "TenantDescriptions (external data)", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 6, "width": 14, "height": 6 }, "queryRef": { "kind": "query", "queryId": "4e8d2e2b-15d8-462d-b2e4-1e525eb95e4a" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "b00671f6-d51a-4b8e-8bce-7ec63dd93eda", "title": "Slowest average, per company (Top 20)", "visualType": "bar", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 0, "width": 21, "height": 6 }, "queryRef": { "kind": "query", "queryId": "ae13b940-6175-4d6a-b155-83fdac0bf648" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": [ "avg_elapsedTimeInMS" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "94b63d5e-c7e9-4b93-b424-da05e32d56c9", "title": "API Calls per hour, count per endpoint", "visualType": "stackedcolumn", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 18, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "c1e124dd-1af6-467a-abd6-ea3ffaedc760" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "endpoint", "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "c6f03b3d-9a8f-4c1a-85c4-31fcad5ed112", "title": "Latest 1000 calls", "visualType": "table", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 12, "width": 24, "height": 6 }, "queryRef": { "kind": "query", "queryId": "798ec149-4911-4e89-8577-53bf2c7dbe05" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": false, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [ { "id": "204f1424-db50-45f9-9821-f98f3458f3a5", "ruleType": "colorByCondition", "applyToColumn": null, "hideText": false, "applyTo": "cells", "conditions": [ { "operator": ">", "column": "count", "values": [ "10000" ] } ], "chainingOperator": "and", "colorStyle": "bold", "color": "yellow", "tag": "", "icon": "critical", "ruleName": "", "visualType": "table" } ] } }, { "id": "58c00ae2-bd81-4052-a198-b2f3d7c1ed2c", "title": "Last Slow SQL Calls (Top 100)", "visualType": "table", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 6, "width": 21, "height": 9 }, "queryRef": { "kind": "query", "queryId": "5557b35e-e902-4c32-8f2b-040a5435d58c" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0b4d1b24-4def-42d0-87a5-df6e61b0633f", "title": "Per Slow Object", "visualType": "pie", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 15, "width": 14, "height": 13 }, "queryRef": { "kind": "query", "queryId": "cb28ebf5-5d02-43e0-b736-1404e21b4c4f" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": [ "count_" ], "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "d8c5d187-b5b1-4731-afbd-da8381a048bb", "title": "Per Slow Object", "visualType": "table", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 14, "y": 15, "width": 10, "height": 13 }, "queryRef": { "kind": "query", "queryId": "2b7d4cc1-a871-49d4-b915-2b3db3f99815" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "5ebc4c93-b493-4c81-b441-24960368e3eb", "title": "BCPT Runs - NoOfSqlStatements (30 Days)", "visualType": "line", "pageId": "c57aad53-d31f-4c8c-a0b7-39424d755d88", "layout": { "x": 0, "y": 0, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "63e17c65-a174-4ab4-a710-dd2a9884c97b" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "xColumnTitle": "", "xColumn": null, "yColumns": [ "avgNoOfSqlStatements" ], "seriesColumns": [ "Tag" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "ec6c0ac5-6294-4c0c-9788-ee6466898213", "title": "BCPT Runs - Durations (30 Days)", "visualType": "line", "pageId": "c57aad53-d31f-4c8c-a0b7-39424d755d88", "layout": { "x": 0, "y": 7, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "1a13ae89-57f0-4163-aa0b-56e633177fa5" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoOfSqlStatements", "avgDuration" ], "seriesColumns": [ "Tag" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "47c0c751-736f-4061-bbb9-be17297c2cc1", "title": "Errors", "visualType": "line", "pageId": "c57aad53-d31f-4c8c-a0b7-39424d755d88", "layout": { "x": 0, "y": 14, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "be6b924f-0baf-470b-bf9c-e588034ba173" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "xColumnTitle": "", "xColumn": null, "yColumns": [ "count" ], "seriesColumns": [ "Tag" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "178cb4f2-f43e-4dc6-853f-2de935e3978b", "title": "Error details", "visualType": "table", "pageId": "c57aad53-d31f-4c8c-a0b7-39424d755d88", "layout": { "x": 0, "y": 21, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "0195295a-7522-4600-9f66-984061f75c40" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0e7227ca-97f1-46b3-a1a3-d5d6998a8608", "title": "Number of signals (24h)", "visualType": "timechart", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 12, "y": 13, "width": 9, "height": 9 }, "queryRef": { "kind": "query", "queryId": "32efd14b-f002-488f-ae2b-b152e96c5433" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "a346d734-4956-493f-b85a-5477d1af662f", "title": "Count by Customer", "visualType": "pie", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 34, "width": 10, "height": 8 }, "queryRef": { "kind": "query", "queryId": "5ec01173-50fe-4eb3-8b13-4a37b42b9dbb" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "679a5717-27a4-461a-a616-c27e29b8ca02", "title": "Count by endpoint", "visualType": "pie", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 10, "y": 34, "width": 11, "height": 8 }, "queryRef": { "kind": "query", "queryId": "476519af-517d-4781-b9e9-4fc5403de69c" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "aca890ab-3b07-4a1c-b977-86febf469eac", "title": "Edit In Excel", "visualType": "table", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 42, "width": 21, "height": 7 }, "queryRef": { "kind": "query", "queryId": "35cd8ec8-33c4-4c21-9da8-5e2c697b0095" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "51faf9f2-29fc-41aa-9e41-5ca887283ac2", "title": "Last traces (last 1000)", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 28, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "b0978deb-57be-4dbc-b046-99270661f15c" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c035ab58-013f-47d5-b275-9352338414d3", "title": "API Calls per hour, avgTotalTime per endpoint", "visualType": "stackedcolumn", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 26, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "59b040d0-366a-442b-b022-4515411d3791" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgTotalTime" ], "seriesColumns": [ "endpoint", "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": true, "drillthroughDisabled": true, "crossFilter": [ { "interaction": "dragX", "property": "timeRange", "parameterId": "39cdef5b-3452-4363-abb8-14af11fec305", "disabled": false } ], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "74c9cecc-a291-4354-88cc-58b511bc3790", "title": "avgNoOfSqlStatements per Tenant.Message", "visualType": "pie", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 12, "y": 74, "width": 12, "height": 11 }, "queryRef": { "kind": "query", "queryId": "6c5526da-adf9-414e-9a45-500d811c0fb6" }, "visualOptions": { "hideLegend": true, "xColumn": "TenantMeasuredFunction", "yColumns": [ "avgNoSqlStatements" ], "seriesColumns": [ "message", "tenantDescription" ], "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "9efe342f-9f99-4231-a250-abf2c06a2a27", "title": "AvgElapsedTime By SourceProcess", "visualType": "pie", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 28, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "5c947609-8f50-4cd5-840a-511cc0c33b41" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "6eb4632f-48d6-436a-8b9f-1084861360d6", "title": "AvgElapsedTime By SlowObject", "visualType": "pie", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 41, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "2c87ced3-5ea0-4e8c-936b-fd1f015e7e28" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "0ee463f7-8139-4005-a79c-d5d0c3f2599e", "title": "avgElapsedTime, Per day, per customer", "visualType": "stackedcolumn", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 54, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "5fbdc066-e7ff-49e8-9523-e4affafac505" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "050fa23f-ec08-4e79-91b8-04aa8c9270ce", "title": "Signals (from GitHub)", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 0, "width": 11, "height": 6 }, "queryRef": { "kind": "query", "queryId": "08a39dde-2d8a-452f-9474-8c94898696e6" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "ae6723e9-460a-40d4-adce-3e0afaa0bb12", "title": "Slowest \"anything\", per customer (Top 100)", "visualType": "table", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 0, "width": 21, "height": 6 }, "queryRef": { "kind": "query", "queryId": "9a1c368a-24e2-4cfd-a789-7e2386c4ca64" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "3f1c7a8c-40b8-4cf5-91e6-c828aeda209e", "title": "Last Slow AL (Top 1000) (SourceProcess, SlowObject)", "visualType": "table", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 6, "width": 21, "height": 9 }, "queryRef": { "kind": "query", "queryId": "4b0ba2cd-8808-4ee0-8643-3d7731814f4c" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "cf4d3bbf-a403-4f15-970c-a237f61d577e", "title": "Last Slow AL (Top 1000) (SourceProcess, SlowObject)", "visualType": "table", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 70, "width": 21, "height": 9 }, "queryRef": { "kind": "query", "queryId": "ee7ab34c-3abb-47e2-b32c-51de991bc03b" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "1516659e-c80b-48f8-925a-136deb056062", "title": "Per Slow Object", "visualType": "pie", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 15, "width": 11, "height": 7 }, "queryRef": { "kind": "query", "queryId": "184c1352-001d-4aeb-b082-02daf4255171" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": [ "count_" ], "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [] } }, { "id": "f20cc370-a434-49b1-afb7-a2e766af424e", "title": "Per Slow Object", "visualType": "table", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 11, "y": 15, "width": 10, "height": 17 }, "queryRef": { "kind": "query", "queryId": "e893f0a3-a1a7-4824-8130-3cf05ff47158" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "9fe6fc60-2350-440b-a41a-b90085ba8afe", "title": "AvgElapsedTime By SourceProcess", "visualType": "pie", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 22, "width": 11, "height": 10 }, "queryRef": { "kind": "query", "queryId": "e0f2725b-f8da-46b5-b22e-e7fb2b9e59e6" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "1f10898b-bae1-4031-b2d8-50f588912536", "title": "AvgElapsedTime By SlowObject", "visualType": "pie", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 32, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "38566e27-4224-4013-91e6-d0e9dc6e4fb5" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "b3b7888a-f567-4d49-83be-c7af234512b3", "title": "Slow AL, Per day, per customer", "visualType": "stackedcolumn", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 57, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "3a64cf04-d932-481d-bb3f-90713092011c" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "5085f673-5939-4d15-9e5e-527bd3fc7fcd", "title": "Slow Pages (pageViews)", "visualType": "table", "pageId": "5920c0d6-a2d9-473a-9201-f0815ec919b7", "layout": { "x": 0, "y": 0, "width": 11, "height": 10 }, "queryRef": { "kind": "query", "queryId": "dcb18e21-c6f8-40ab-b956-9736735aecba" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "f6117963-6368-4373-ae41-b8b8021b9782", "title": "Pages at tenants", "visualType": "stackedbar", "pageId": "5920c0d6-a2d9-473a-9201-f0815ec919b7", "layout": { "x": 0, "y": 20, "width": 21, "height": 5 }, "queryRef": { "kind": "query", "queryId": "5ece6560-e041-40bf-8a32-93b13b5977be" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "tenantDescription", "yColumns": [ "avgDuration" ], "seriesColumns": [ "Page" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "89ae2b0f-345f-4f9f-9aae-e8129b43962a", "title": "TenantIds / Descriptions / CompanyNames", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 18, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "a4acfc3e-612c-4cd1-9c5e-39a8488d654e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "e3b4085d-108b-4781-bf26-c83188326b98", "title": "TotalTime, Per SourceObject, Per hour", "visualType": "stackedcolumn", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 45, "width": 21, "height": 12 }, "queryRef": { "kind": "query", "queryId": "203c8600-6d93-4b21-8ecf-bc5965159486" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "e94a42ca-e75d-4ac7-9fae-f1d007763f1e", "title": "AvgDuration per tenant per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 58, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "65ea0def-f60a-4dec-ab9d-a1316c857e33" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgDuration" ], "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "1451368b-8d69-4252-8764-3fbcd7f250a0", "title": "Compare versions (SQL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 0, "y": 18, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "16f9a04e-f4a3-4665-861c-01e6dcb5fbcb" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "172fa55c-124a-4d67-b6a3-3232825a1c2a", "title": "Slowest Apps (AL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 12, "y": 9, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "753ad640-abe1-4180-b1d4-cec31ba78d5d" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "716044d9-6476-4c1d-b503-cf75a5ba930a", "title": "Usages per ClientType, Per Hour", "visualType": "stackedcolumn", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 35, "width": 21, "height": 10 }, "queryRef": { "kind": "query", "queryId": "77ded84f-1318-411c-b1e3-73bd722fa76a" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "db32fb52-1b71-4fcb-b597-e82617f6f1f2", "title": "Top 10 Slowest customers (SQL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 0, "y": 0, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "e023f51c-b809-417f-a9e4-8985b59c5d00" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "b5826009-e4a0-4ef5-a4a4-00ae5559c186", "title": "Top 10 Slowest customers (AL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 12, "y": 0, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "bb3a8aaa-77e5-4354-900f-4e58f3ce98e8" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "5bde3254-8cfe-4524-87c5-ac62b6b09ee1", "title": "Slowest Apps (SQL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 0, "y": 9, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "84c1c737-6214-4be8-9094-2e0e43919fa7" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "4c0018e9-05dc-4586-b73c-1cd75b52bef1", "title": "Compare versions (AL)", "visualType": "pie", "pageId": "edd38efc-357f-4074-87bc-ae13ab32e97a", "layout": { "x": 12, "y": 18, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "9637a68b-91a7-4796-bbdd-60de93217d9d" }, "visualOptions": { "hideLegend": true, "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "ac3785a3-375c-43df-8bb8-abbcbc0032b3", "title": "Test Regression (DurationMs)", "visualType": "line", "pageId": "fbdd4db5-d977-4a56-997e-4043d8c0645f", "layout": { "x": 0, "y": 14, "width": 18, "height": 7 }, "queryRef": { "kind": "query", "queryId": "25f17751-f5dc-4dab-bd5a-d7d1b2245651" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgDurationMs" ], "seriesColumns": [ "FQMethod" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "25935946-c56c-48d5-9a22-8de383e0b8b1", "title": "AvgDuration per message per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 66, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "90dd1926-a783-4791-a3e7-4cda1259a880" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": 0, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgDuration" ], "seriesColumns": [ "MeasuredFunction" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "bdb27e81-1160-4fee-810a-0ca3e9e368aa", "title": "AvgNoOfSQLStatements per Tenant.Message per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 12, "y": 49, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "5b074ac6-c466-4861-b238-3388d109d8be" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": 0, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoSqlStatements" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "998465c1-48b9-4d72-a9fb-49ab70868cca", "title": "AvgNoOfSQLStatements per tenant per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 12, "y": 58, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "e7e68af4-d123-422e-a977-629abd62c220" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": 0, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoSqlStatements" ], "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "dbcbbe86-b6c1-42f1-a23a-49f1ae325237", "title": "AvgNoOfSQLStatements per message per day", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 12, "y": 66, "width": 12, "height": 8 }, "queryRef": { "kind": "query", "queryId": "1a035615-d4c2-4b6b-96f2-95e1e468d97a" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": 0, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoSqlStatements" ], "seriesColumns": [ "MeasuredFunction" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "a4a111d6-26f8-46ac-8245-f05732ea8c50", "title": "AvgDuration per Tenant.Message per hour", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 19, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "2f0d93be-6d44-4c00-be29-4e9a3c05996e" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgDuration" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "ee7f11f8-294c-4eb4-8507-312785142ba5", "title": "Count per Tenant per hour", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 29, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "e63b92e0-e264-4640-89c8-85853a80d6c2" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "count_" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "02a24a07-d409-4293-a74b-ca2335882a61", "title": "avgDuration per Tenant", "visualType": "pie", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 74, "width": 12, "height": 11 }, "queryRef": { "kind": "query", "queryId": "c2be5383-6dd7-4c76-bdf4-975db41f0aa2" }, "visualOptions": { "hideLegend": true, "xColumn": "tenantDescription", "yColumns": [ "avgDuration" ], "seriesColumns": [ "message", "tenantDescription" ], "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "9b8c5850-62e0-4350-b1a5-4829a23ba47e", "title": "Count per Tenant.Message per hour", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 39, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "3a380f88-461e-4780-9c1f-560b2eec5f47" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "count_" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "5ec40986-bcc1-4f82-9341-13b4f71cc5eb", "title": "AvgDuration Item List", "visualType": "line", "pageId": "5920c0d6-a2d9-473a-9201-f0815ec919b7", "layout": { "x": 0, "y": 10, "width": 21, "height": 10 }, "queryRef": { "kind": "query", "queryId": "382e0f83-65de-48a6-8066-fad07605c186" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avg_duration" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "b6cca4de-de84-450c-a4b8-ca4c8ae1681b", "title": "Deadlocks per BC Version", "visualType": "bar", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 0, "y": 36, "width": 11, "height": 12 }, "queryRef": { "kind": "query", "queryId": "464393ec-8e6b-4075-826a-c917af96f9b5" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "componentVersion", "yColumns": [ "avg_count" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "702b303d-0d66-44cd-9bd2-456324cd2616", "title": "Companies", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 14, "y": 6, "width": 10, "height": 12 }, "queryRef": { "kind": "query", "queryId": "3b6ea8da-80f3-428e-b95d-8f3cfe5412f1" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "7959a1ad-7e97-42f1-870c-3ba9ed5147d4", "title": "Extensions per tenant", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 10, "y": 38, "width": 14, "height": 12 }, "queryRef": { "kind": "query", "queryId": "2305c046-8d01-4ae0-894b-ed480558fb55" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "4cf90c71-f020-4b9d-ac2a-42e6dc1bf685", "title": "Most used publishers", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 0, "y": 38, "width": 5, "height": 12 }, "queryRef": { "kind": "query", "queryId": "49fbf399-72a3-4621-a134-305a10e5f93f" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "041852b2-d0ce-43f9-bfa4-6c6e4b1ebb9d", "title": "Most used publishers", "visualType": "table", "pageId": "767419b8-bb1b-4f95-9790-6e9f47cae7a1", "layout": { "x": 5, "y": 38, "width": 5, "height": 12 }, "queryRef": { "kind": "query", "queryId": "66011cc7-10e0-4c13-a431-3f19d5348460" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0bf9cd74-3778-4ccb-8807-82d8a5ea9879", "title": "Extension Lifecycle (Last 1000)", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 7, "y": 7, "width": 17, "height": 9 }, "queryRef": { "kind": "query", "queryId": "6f51e34f-3605-4dcb-90c5-e86bc0de8ac6" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "099637f7-dcd7-4137-b4bd-dd70aa3d7ded", "title": "Extension Lifecycle (Overview)", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 7, "width": 7, "height": 18 }, "queryRef": { "kind": "query", "queryId": "62f1a28d-0550-49a5-8d6d-bb3400508200" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "dd47e62a-9455-4a9a-9aed-48fff7687ad3", "title": "Fails (Last 1000)", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 7, "y": 16, "width": 17, "height": 9 }, "queryRef": { "kind": "query", "queryId": "3708a55c-05f0-4c85-82b1-e8f5304567a0" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "8f3be1a4-6465-4635-b78e-e3595292ecb5", "title": "Extension Lifecycle events in time", "visualType": "column", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 25, "width": 24, "height": 9 }, "queryRef": { "kind": "query", "queryId": "b634fa6e-6e9e-4d4f-9d38-6e21d18e04ff" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": [ "count_" ], "seriesColumns": [ "tenantDescription", "status" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "8f8321e4-d8b7-47bc-b273-62cd0ac85629", "title": "avgElapsedTime, Per 3 hours, per customer", "visualType": "column", "pageId": "142b6efb-d730-4b92-a9f1-c8311c35f795", "layout": { "x": 0, "y": 67, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "53e53c0a-81f9-40e6-8647-9ab885987397" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "080d62d9-c4e6-4510-8b77-592d6dba6dc9", "title": "Count per eventId", "visualType": "table", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 13, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "e3ec6fd6-07b8-45ed-8f2b-9e46c1803354" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d15cdea4-be66-4feb-8f05-e8722ee9054e", "title": "Deadlocks by Day, CompanyName", "visualType": "stackedcolumn", "pageId": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "layout": { "x": 11, "y": 10, "width": 10, "height": 6 }, "queryRef": { "kind": "query", "queryId": "267372af-e439-4e58-aa3d-43c1b0735787" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "09985ca7-04b7-4a39-bba2-1f3af0a455ac", "title": "Last 1000", "visualType": "table", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 0, "y": 0, "width": 24, "height": 7 }, "queryRef": { "kind": "query", "queryId": "d857e211-942a-48a9-a052-43aef3fad405" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "2f11189c-9518-4e8c-a83e-63bc88ed156f", "title": "AvgTime by endpoint", "visualType": "table", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 0, "y": 7, "width": 13, "height": 9 }, "queryRef": { "kind": "query", "queryId": "02117133-7e01-4a58-acc6-c75a81367208" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "12192436-7ce9-41f4-8274-a352c772010b", "title": "Count by extension", "visualType": "pie", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 12, "y": 25, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "9b3dc971-a821-4ebc-bab4-ef5aca1dbc17" }, "visualOptions": { "hideLegend": false, "legendLocation": "bottom", "xColumn": null, "yColumns": null, "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "1331fdfb-c840-4924-8b48-0d4023881602", "title": "AvgTime by extension", "visualType": "pie", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 0, "y": 25, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "241a37dc-18da-493a-bf21-20cd0feb11df" }, "visualOptions": { "hideLegend": false, "legendLocation": "bottom", "xColumn": null, "yColumns": [ "avg_elapsedTimeInMS" ], "seriesColumns": null, "crossFilterDisabled": false, "drillthroughDisabled": false, "labelDisabled": false, "pie__label": [ "name", "percentage" ], "tooltipDisabled": false, "pie__tooltip": [ "name", "percentage", "value" ], "pie__orderBy": "size", "pie__kind": "pie", "pie__topNSlices": null, "crossFilter": [], "drillthrough": [] } }, { "id": "cbb51353-10ed-48cb-98bf-e3e7167f396f", "title": "AvgTime by customer (Top 15)", "visualType": "bar", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 0, "y": 16, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "2ecf90e4-fda9-430e-8e98-4d9c43a41f62" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": [ "avg_elapsedTimeInMS" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "6be49066-e56c-494a-83c0-6410b425aa9b", "title": "Count by customer (Top 15)", "visualType": "bar", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 12, "y": 16, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "e66504a7-fa3e-4b22-ac91-ee67d4f90f84" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": [ "count_" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "feeb01db-dde2-434a-8943-73932095805c", "title": "Count per Table Lock (and type)", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 46, "width": 15, "height": 7 }, "queryRef": { "kind": "query", "queryId": "df666476-98c2-4ffd-a3ec-0d3e9d4eacd3" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0cb2d9f2-68c4-499f-b21e-327384108733", "title": "Errors - Details", "visualType": "table", "pageId": "839e9b74-183b-4d7c-9c62-05d466a8379d", "layout": { "x": 0, "y": 16, "width": 24, "height": 11 }, "queryRef": { "kind": "query", "queryId": "d9349cf1-5256-4343-b09e-2541ffa76a97" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "508970cd-cdfd-4554-b64b-a0b064cef19c", "title": "All failed EventIds", "visualType": "table", "pageId": "839e9b74-183b-4d7c-9c62-05d466a8379d", "layout": { "x": 0, "y": 8, "width": 22, "height": 8 }, "queryRef": { "kind": "query", "queryId": "0db3c8d9-eadb-4514-921e-57ee7ab0a89a" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "6817b46c-ed54-4821-852e-eee260b43f5f", "title": "Errors per company per day", "visualType": "line", "pageId": "839e9b74-183b-4d7c-9c62-05d466a8379d", "layout": { "x": 0, "y": 0, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "fbb87685-34b5-4d59-bebf-ec6709696787" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "companyName", "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "6a9f353a-fd7a-45f5-aa49-d2f803b71fca", "title": ".", "visualType": "markdownCard", "pageId": "19755718-2f7e-4b97-8120-0e9c2adc9216", "layout": { "x": 0, "y": 0, "width": 23, "height": 3 }, "markdownText": "# Media Orphans Info\n", "visualOptions": {} }, { "id": "92817d21-d73b-4af0-bbe2-b904c6ff3742", "title": "Current Orphans per customer", "visualType": "table", "pageId": "19755718-2f7e-4b97-8120-0e9c2adc9216", "layout": { "x": 0, "y": 3, "width": 23, "height": 8 }, "queryRef": { "kind": "query", "queryId": "47aab107-a91a-4afa-bb28-4f80c2a6ca37" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d5198070-1a8b-42fc-9491-2728ad28b521", "title": "Orphan problems", "visualType": "column", "pageId": "19755718-2f7e-4b97-8120-0e9c2adc9216", "layout": { "x": 0, "y": 11, "width": 23, "height": 7 }, "queryRef": { "kind": "query", "queryId": "d7c9ee94-2105-422c-a132-680d2d03ca5e" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription", "message" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "dcb669c1-6247-4281-a85f-617ac22693e3", "title": "Media Orphan Info (Last)", "visualType": "table", "pageId": "19755718-2f7e-4b97-8120-0e9c2adc9216", "layout": { "x": 0, "y": 18, "width": 23, "height": 8 }, "queryRef": { "kind": "query", "queryId": "ae0c55e3-b8ba-4828-8f92-735a469c4783" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d1483055-4c7a-4174-80a2-fdd58194a429", "title": ".", "visualType": "markdownCard", "pageId": "7b7f2b6b-e03e-40f6-bddf-70404b6529a8", "layout": { "x": 0, "y": 0, "width": 24, "height": 3 }, "markdownText": "# Retention Policies\n\n", "visualOptions": {} }, { "id": "9560c62d-886e-43f4-9da1-75cedd9744e9", "title": "Overview Retention Policies", "visualType": "table", "pageId": "7b7f2b6b-e03e-40f6-bddf-70404b6529a8", "layout": { "x": 0, "y": 3, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "6edf2a9a-0436-4169-b825-5630c8f819fd" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "6a0921b8-be93-4359-b73e-0681f813ebc8", "title": ".", "visualType": "markdownCard", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 8, "width": 24, "height": 3 }, "markdownText": "# Installed Apps Overview\n\n", "visualOptions": {} }, { "id": "6d66c2ca-5f8c-4cc4-901d-7198a8b21f56", "title": "Apps MaxVersion per company (Data last 10d)", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 12, "y": 11, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "92d795de-d0d3-4e33-b884-2bb1292b9609" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "e0bde961-d8e6-4cce-bc73-81faddfe2bc1", "title": "Max version per App", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 11, "width": 12, "height": 9 }, "queryRef": { "kind": "query", "queryId": "156dccee-adfc-4517-b239-fdf1c22964e2" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "5d0ff463-6089-465a-bb06-7142a5162c1f", "title": "Apps to be Upgraded", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 6, "y": 20, "width": 18, "height": 10 }, "queryRef": { "kind": "query", "queryId": "e1d2b7c2-213c-44fc-8db9-659267a34a73" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "6081ec5b-b0e8-4a9b-9bae-ee3c5a258c71", "title": "Customers to be Upgraded", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 20, "width": 6, "height": 10 }, "queryRef": { "kind": "query", "queryId": "409d4287-a850-4837-a336-7549d34569bb" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d5158161-df96-4208-9a3d-2296f9a85781", "title": "Companies with NO App Info", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 9, "y": 30, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "c5a6167f-4a6d-4563-bb73-31fb1e13d401" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "349ec305-8d1e-4d04-bffb-1e3612d38f35", "title": "Tenants with NO App Info", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 30, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "ccbe9f52-76c1-4d5f-b704-0b28da2e56b6" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "cab02c26-4255-4f04-89ec-6d093dbcbc05", "title": "Count per stacktrace", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 15, "y": 46, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "36ae9368-3592-4b87-a4ec-bbc26b0d2af0" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "81d32561-593d-4e6e-9430-4a03f9b103be", "title": "Overview Retention Policies", "visualType": "table", "pageId": "7b7f2b6b-e03e-40f6-bddf-70404b6529a8", "layout": { "x": 0, "y": 11, "width": 11, "height": 8 }, "queryRef": { "kind": "query", "queryId": "f936020b-21fc-4347-b261-bffd0b89445a" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "906fb382-8112-4361-863f-ff7c93267bf3", "title": ".", "visualType": "markdownCard", "pageId": "a04d1460-27a0-4cc7-affa-eb12ced39cf2", "layout": { "x": 0, "y": 0, "width": 23, "height": 3 }, "markdownText": "# Features\n\n", "visualOptions": {} }, { "id": "9eb381be-9bb4-46e0-974b-f2d4acec5592", "title": "Overview Features", "visualType": "table", "pageId": "a04d1460-27a0-4cc7-affa-eb12ced39cf2", "layout": { "x": 0, "y": 3, "width": 24, "height": 14 }, "queryRef": { "kind": "query", "queryId": "5a0b60c0-d61a-446b-90aa-b3079133be0e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c109baa5-a18a-46be-a058-534836fd54de", "title": ".", "visualType": "markdownCard", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 34, "width": 24, "height": 3 }, "markdownText": "# AppSource\n\n[Link to docs](https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/administration/telemetry-appsource-submission-validation-trace)\n", "visualOptions": {} }, { "id": "2fad97eb-0d4b-4ed7-b94d-13268b7367cb", "title": "Last 1000 AppSource Submissions", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 45, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "3a68fe02-c46f-4f3e-8874-8e0ac0bd31fc" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "6c5301e0-5165-4b25-85c7-63de34669ac1", "title": "AppSource Validation Failures (overview)", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 9, "y": 37, "width": 15, "height": 8 }, "queryRef": { "kind": "query", "queryId": "a58ea2b4-7587-43e8-b641-9a2e4ae52537" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "d9824c9a-7113-4762-b16e-cc85205fc1bc", "title": "AppSource Validation error details", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 53, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "ebf4f780-c6e8-40c0-92a9-eb60e342c5b5" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0ff073e5-4cdf-4b8e-b45b-259bfc6c2466", "title": "Last 1000 AppSource Submissions", "visualType": "table", "pageId": "a0f75fcf-eb7d-4d83-a807-2527c0f75471", "layout": { "x": 0, "y": 37, "width": 9, "height": 8 }, "queryRef": { "kind": "query", "queryId": "7c4ebec2-e163-48b3-968d-31f065e36747" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "bde74edb-912d-42e8-838c-4501bd698d6b", "title": "AvgExecutionTime per hour, per endpoint", "visualType": "stackedcolumn", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 49, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "b12fb281-9fac-4881-a19e-15af69700849" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "endpoint", "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "f2f3e19a-70d2-455f-b446-b7bfab790150", "title": "Count, Per SourceObject, Per hour", "visualType": "stackedcolumn", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 79, "width": 21, "height": 12 }, "queryRef": { "kind": "query", "queryId": "35e1ae29-3692-48b1-ab2e-8c639eac7104" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "8fbb0f85-40dd-4ff0-918f-4bd8cc300809", "title": "AvgTime, Per SourceObject, Per hour", "visualType": "column", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 91, "width": 21, "height": 12 }, "queryRef": { "kind": "query", "queryId": "5942b83f-de64-4960-b3c0-471170339111" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": "timestamp", "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "2a3ce569-506f-4ac5-b0c3-65ba1002bfce", "title": "Used Apps at Customers", "visualType": "table", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 55, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "1e0bb7a9-5441-4e88-8365-913d8027e73d" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "0d1035f9-820f-4c52-8b7c-d754a9ca7952", "title": "Raw data - Last entries", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 37, "width": 24, "height": 17 }, "queryRef": { "kind": "query", "queryId": "bbc5099c-b14d-4e54-aaa3-f9b679d9603e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "28808c42-9acb-4264-925c-155dbea7330a", "title": "Summery of the differents statuses of job queues", "visualType": "table", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 0, "y": 0, "width": 20, "height": 7 }, "queryRef": { "kind": "query", "queryId": "8145cc87-908c-4657-af3f-5c8a738a951e" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "1a812e4f-982d-4b03-aa2a-3b201464271d", "title": "Inactive Job Queues", "visualType": "table", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 0, "y": 7, "width": 9, "height": 7 }, "queryRef": { "kind": "query", "queryId": "87b7d2f8-dde0-41b2-83e7-c4ab117d232f" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "bf3a318b-bd78-4682-b2aa-a66bbd7df955", "title": "Avg processing time for Job Queues", "visualType": "table", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 9, "y": 7, "width": 11, "height": 7 }, "queryRef": { "kind": "query", "queryId": "cf42eed6-133d-4402-96ba-c4be86292877" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "37cba54c-22b0-4d43-85b2-124e8b822394", "title": "Failed Job Queue Entries and the reason for it", "visualType": "table", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 0, "y": 14, "width": 20, "height": 7 }, "queryRef": { "kind": "query", "queryId": "285cd3d0-0d8f-4bd2-9b17-d6277545cb54" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "b4a0c751-871e-45cb-8355-cb689f511224", "title": "Scheduled Environment Updates", "visualType": "table", "pageId": "92a3dce1-1ae3-468d-a470-e98907971cf7", "layout": { "x": 0, "y": 2, "width": 24, "height": 7 }, "queryRef": { "kind": "query", "queryId": "2abb5755-ccc2-46b0-b322-fa0fdc04ecfb" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "ae182a37-76b8-46be-b07a-27f1dfaddb59", "title": "Outgoing API's per endpoint per hour", "visualType": "column", "pageId": "6651f51d-54d7-49a6-beb6-9e76c6b5333d", "layout": { "x": 0, "y": 34, "width": 24, "height": 7 }, "queryRef": { "kind": "query", "queryId": "c286083d-559b-4e83-a6ec-99144997f030" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "1dc95cc7-8ae2-42ac-b4b0-4d0488d60586", "title": "AvgNoOfSqlStatements per Tenant.Message per hour", "visualType": "line", "pageId": "e057b00e-7fd8-476e-a00c-3421e7656af8", "layout": { "x": 0, "y": 9, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "29bc714e-918a-48fd-aed2-419402e575ad" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": "timestamp", "yColumns": [ "avgNoSqlStatements" ], "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "209c9739-cbd8-4a14-88a3-a15d425b7163", "title": "Lock Timeouts by hour", "visualType": "stackedcolumn", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 16, "width": 24, "height": 6 }, "queryRef": { "kind": "query", "queryId": "ded4b26f-83e2-4bc8-9956-655b5e3300b7" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "e86b93a8-d4c2-4fe6-a810-940ac54bb1e3", "title": "Overview Retention Policies per customer", "visualType": "table", "pageId": "7b7f2b6b-e03e-40f6-bddf-70404b6529a8", "layout": { "x": 0, "y": 19, "width": 23, "height": 8 }, "queryRef": { "kind": "query", "queryId": "08e7cacf-71ac-4927-ac9c-438d55bfd12a" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "c77f8240-a3fb-45c5-ba95-4c1d7a6521bf", "title": "Lock Snapshot details (last 100)", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 36, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "9b006a62-69d4-4c4d-a6b2-943cb7895561" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } }, { "id": "e4549d99-fe20-465b-b5bc-4c13ab4c3524", "title": "AvgExecutionTime per hour, per endpoint", "visualType": "column", "pageId": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "layout": { "x": 0, "y": 57, "width": 24, "height": 8 }, "queryRef": { "kind": "query", "queryId": "fec3e770-e41e-4fc1-a287-d738d4e563ce" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": [ "endpoint", "tenantDescription" ], "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "c63312dc-77e9-43b1-9df9-ff31db219ec9", "title": "Job queues statuses per hour", "visualType": "stackedcolumn", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 0, "y": 21, "width": 20, "height": 13 }, "queryRef": { "kind": "query", "queryId": "6cf67486-f9a4-47c6-b8ba-0bf27e37d861" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": false, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "f4635686-6e25-47cd-8619-51f10a598aad", "title": "Avg Processing time per hour per Job", "visualType": "stackedcolumn", "pageId": "38519c26-c531-413e-ba44-989a36547d93", "layout": { "x": 0, "y": 34, "width": 20, "height": 7 }, "queryRef": { "kind": "query", "queryId": "1f8c63b9-4045-40ae-b34d-77fb3ff4dcf9" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "0c89c601-017b-4902-843b-0d51b46d10f5", "title": "AvgTime, Per Customer, Per 3 Hours", "visualType": "column", "pageId": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "layout": { "x": 0, "y": 103, "width": 21, "height": 13 }, "queryRef": { "kind": "query", "queryId": "695ba804-52f3-49f8-b5cd-e9f41bf3c6d9" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "legendLocation": "bottom", "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [] } }, { "id": "bc56df1a-2c1c-4750-ac2f-9ffd4537bd60", "title": "Sessions per ClientType, Per Hour", "visualType": "stackedcolumn", "pageId": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59", "layout": { "x": 0, "y": 45, "width": 21, "height": 10 }, "queryRef": { "kind": "query", "queryId": "43af85e9-b3d0-44ac-a125-89c684f6b07e" }, "visualOptions": { "multipleYAxes": { "base": { "id": "-1", "label": "", "columns": [], "yAxisMaximumValue": null, "yAxisMinimumValue": null, "yAxisScale": "linear", "horizontalLines": [] }, "additional": [], "showMultiplePanels": false }, "hideLegend": true, "xColumnTitle": "", "xColumn": null, "yColumns": null, "seriesColumns": null, "xAxisScale": "linear", "verticalLine": "", "crossFilterDisabled": false, "drillthroughDisabled": false, "legendLocation": "bottom", "crossFilter": [], "drillthrough": [], "selectedDataOnLoad": { "all": true, "limit": 10 }, "dataPointsTooltip": { "all": false, "limit": 1 } } }, { "id": "3e2b346f-fcde-4995-96d0-0e5d63033015", "title": "Lock Snapshot Overview", "visualType": "markdownCard", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 34, "width": 24, "height": 2 }, "markdownText": "What is causing the lock?", "visualOptions": {} }, { "id": "8ca30199-86f3-42dd-99ca-e63674514516", "title": "Lock Snapshot Overview", "visualType": "table", "pageId": "9986d334-d966-4ec6-a436-4e6e6228711d", "layout": { "x": 0, "y": 53, "width": 24, "height": 10 }, "queryRef": { "kind": "query", "queryId": "a1a55452-a416-48af-887b-3edb086faba2" }, "visualOptions": { "table__enableRenderLinks": true, "colorRulesDisabled": true, "colorStyle": "light", "crossFilterDisabled": false, "drillthroughDisabled": false, "crossFilter": [], "drillthrough": [], "table__renderLinks": [], "colorRules": [] } } ], "baseQueries": [ { "id": "862f7073-e362-4e84-86e9-948b06e185ff", "queryId": "b19a2b7f-6d08-4f7f-b3ed-ce290cb93d82", "variableName": "allTraces" }, { "id": "16f01b77-06b2-437a-9929-e0731f8a6e56", "queryId": "ba39f166-a4d3-48ea-bad0-db65876a054f", "variableName": "entraTenantIdDescriptions" } ], "parameters": [ { "kind": "duration", "id": "39cdef5b-3452-4363-abb8-14af11fec305", "displayName": "Time range", "description": "", "beginVariableName": "_startTime", "endVariableName": "_endTime", "defaultValue": { "kind": "dynamic", "count": 1, "unit": "hours" }, "showOnPages": { "kind": "all" } }, { "kind": "string", "selectionType": "freetext", "id": "188fb724-d624-493e-a504-ea84e190c35c", "displayName": "MessageFilter", "variableName": "_MessageFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "all" } }, { "kind": "string", "selectionType": "freetext", "id": "5f8ab845-36a0-4ee8-b26e-0a2540d8b928", "displayName": "CustomDimensionsContains", "variableName": "_customDimensionsContains", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "all" } }, { "kind": "string", "selectionType": "freetext", "id": "53f0f6f5-2267-429a-8206-737d975dcce7", "displayName": "CompanyFilter", "variableName": "_CompanyFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "all" } }, { "kind": "string", "id": "bb15f72d-08d9-44a3-9ff3-1192ffc5c4ea", "displayName": "Area", "description": "", "variableName": "_Area", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "eventArea" }, "queryRef": { "kind": "query", "queryId": "f5fbe50d-0893-4b88-9d18-0a9a40874da0" }, "autoReset": true }, "showOnPages": { "kind": "selection", "pageIds": [ "767419b8-bb1b-4f95-9790-6e9f47cae7a1" ] } }, { "kind": "string", "id": "acf0dd80-5e90-4694-abd9-f57aee6bf9f3", "displayName": "ExtensionName", "description": "", "variableName": "_extensionName", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "extensionName" }, "queryRef": { "kind": "query", "queryId": "2fdf22eb-61c7-4964-bc7e-49c7eb81c9c8" } }, "showOnPages": { "kind": "all" } }, { "kind": "string", "id": "09bb5c28-4566-4081-9e9f-efbdc16e5281", "displayName": "ExtensionPublisher", "description": "", "variableName": "_extensionPublisher", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "extensionPublisher" }, "queryRef": { "kind": "query", "queryId": "79f1960d-e4a0-4ed3-8aca-fc0ec2aa2399" } }, "showOnPages": { "kind": "all" } }, { "kind": "string", "selectionType": "freetext", "id": "9a07b670-cbc8-46e4-b700-2f8a21677ca8", "displayName": "TableFilter", "variableName": "_tableFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "selection", "pageIds": [ "9c16317e-23f7-4e29-8a61-dfae292ea6d0", "19755718-2f7e-4b97-8120-0e9c2adc9216" ] } }, { "kind": "string", "id": "89494460-b823-402b-a4b8-19b08049e258", "displayName": "entraTenantId", "description": "entraTenantId", "variableName": "_entraTenantId", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "entraTenantId" }, "queryRef": { "kind": "query", "queryId": "1af6d35a-92af-4520-a929-26af2d29ea09" } }, "showOnPages": { "kind": "all" } }, { "kind": "string", "id": "c74760eb-82d3-4ea6-807f-f87f1462b27e", "displayName": "TenantDescription", "description": "", "variableName": "_TenantDescription", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "tenantDescription" }, "queryRef": { "kind": "query", "queryId": "18cf1613-ca57-4d94-9d30-c2ffcafe5245" } }, "showOnPages": { "kind": "all" } }, { "kind": "string", "id": "815cd5e7-2c20-4bdb-9ad5-830d04ef9e4c", "displayName": "EnvironmentName", "description": "", "variableName": "_environmentName", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "environmentName" }, "queryRef": { "kind": "query", "queryId": "a4426a6f-dfd5-43a4-b8fb-68c8cbb6da83" } }, "showOnPages": { "kind": "all" }, "allIsNull": false }, { "kind": "string", "selectionType": "freetext", "id": "9ef8005d-e709-4e8c-887f-8e71a49833e9", "displayName": "SourceObjectFilter", "variableName": "_sourceObjectFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "selection", "pageIds": [ "142b6efb-d730-4b92-a9f1-c8311c35f795", "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "5920c0d6-a2d9-473a-9201-f0815ec919b7" ] } }, { "kind": "string", "selectionType": "freetext", "id": "f115ee5f-4c2f-461a-8d90-c880e546aeae", "displayName": "SlowObject", "variableName": "_SlowObjectFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "selection", "pageIds": [ "142b6efb-d730-4b92-a9f1-c8311c35f795", "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed", "aeb108a6-aa5a-444a-b0d9-5177da37d8b9", "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "5920c0d6-a2d9-473a-9201-f0815ec919b7" ] } }, { "kind": "string", "id": "ce8713cf-d172-4bef-95c8-dd3652bfeb88", "displayName": "eventId", "description": "", "variableName": "_eventId", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "eventId", "label": "eventDescription" }, "queryRef": { "kind": "query", "queryId": "5793a15e-c4ad-4db1-9bca-0a3d11ea48cd" }, "autoReset": true }, "showOnPages": { "kind": "all" } }, { "kind": "string", "id": "8c4425c9-bbed-4372-b582-d3f9c9df8335", "displayName": "CodeunitName", "description": "", "variableName": "_codeunitName", "selectionType": "scalar", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "CodeunitName" }, "queryRef": { "kind": "query", "queryId": "4c19c0ce-09a4-47c7-8c4d-a348af93b96a" } }, "showOnPages": { "kind": "selection", "pageIds": [ "c57aad53-d31f-4c8c-a0b7-39424d755d88" ] } }, { "kind": "string", "id": "0b33c3c9-d7ea-4adc-ab6f-5fb0acfee1cc", "displayName": "Tag", "description": "", "variableName": "_BCPTTag", "selectionType": "array", "includeAllOption": true, "defaultValue": { "kind": "all" }, "dataSource": { "kind": "query", "columns": { "value": "tag" }, "queryRef": { "kind": "query", "queryId": "131192bf-b588-4e2a-95f1-851f8c5b2686" } }, "showOnPages": { "kind": "selection", "pageIds": [ "c57aad53-d31f-4c8c-a0b7-39424d755d88" ] } }, { "kind": "string", "selectionType": "freetext", "id": "3624de59-7654-4dc8-a867-6902dc46b7c5", "displayName": "componentVersion", "variableName": "_componentVersionFilter", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "all" } }, { "kind": "string", "selectionType": "freetext", "id": "dacaa9c6-6212-4998-a3d4-06c9f14f0b9e", "displayName": "MeasuredFunction", "variableName": "_MeasuredFunction", "description": "", "defaultValue": { "kind": "all" }, "showOnPages": { "kind": "selection", "pageIds": [ "e057b00e-7fd8-476e-a00c-3421e7656af8" ] } }, { "kind": "bool", "id": "bc9c5dad-92a9-4c16-aa7d-c604dd03ce84", "displayName": "IsSaaS", "description": "", "variableName": "_IsSaaS", "selectionType": "array", "includeAllOption": false, "defaultValue": { "kind": "values", "values": [ true, false ] }, "dataSource": { "kind": "static", "values": [ { "value": true }, { "value": false } ] }, "showOnPages": { "kind": "all" } } ], "dataSources": [ { "id": "05ae5610-5603-45ac-9458-616539c1c150", "kind": "manual-kusto", "scopeId": "kusto", "name": "AI-Datasource", "clusterUri": "https://ade.applicationinsights.io/subscriptions/a8341168-f467-4146-ba71-5e2e523dccb5", "database": "AI-CustomerNST" } ], "pages": [ { "name": "Base Tables", "id": "767419b8-bb1b-4f95-9790-6e9f47cae7a1" }, { "name": "Analyze Usages", "id": "e0ea770f-baf5-47a6-88b1-1cb0ec5dce59" }, { "name": "Apps", "id": "a0f75fcf-eb7d-4d83-a807-2527c0f75471" }, { "name": "Errors", "id": "839e9b74-183b-4d7c-9c62-05d466a8379d" }, { "name": "Job Queues", "id": "38519c26-c531-413e-ba44-989a36547d93" }, { "name": "Performance", "id": "edd38efc-357f-4074-87bc-ae13ab32e97a" }, { "name": "Perf: Slow SQL", "id": "142b6efb-d730-4b92-a9f1-c8311c35f795" }, { "id": "2da8380b-5d1b-4b0f-9c49-97c4b310e564", "name": "Perf: Slow AL" }, { "id": "5920c0d6-a2d9-473a-9201-f0815ec919b7", "name": "Perf: Slow Pages" }, { "name": "Perf: API (Incoming)", "id": "8fb4147d-b1b9-4d4b-b062-6fcb44fd87ed" }, { "name": "Perf: API (Outgoing)", "id": "6651f51d-54d7-49a6-beb6-9e76c6b5333d" }, { "name": "Perf: Deadlocks", "id": "aeb108a6-aa5a-444a-b0d9-5177da37d8b9" }, { "name": "Perf: Lock Timeouts", "id": "9986d334-d966-4ec6-a436-4e6e6228711d" }, { "name": "Perf: ALAnalysis", "id": "2546cc61-63e2-4e89-8157-d2977e6ddde6" }, { "name": "CT: Custom Events", "id": "f56f5822-56bf-4758-a589-1e398df2aeee" }, { "name": "CT: Tests", "id": "fbdd4db5-d977-4a56-997e-4043d8c0645f" }, { "name": "CT: Performance", "id": "e057b00e-7fd8-476e-a00c-3421e7656af8" }, { "name": "Daily - Missing Indexes", "id": "9c16317e-23f7-4e29-8a61-dfae292ea6d0" }, { "id": "19755718-2f7e-4b97-8120-0e9c2adc9216", "name": "Daily - Media Orphans" }, { "id": "92a3dce1-1ae3-468d-a470-e98907971cf7", "name": "Daily - Apps" }, { "name": "Daily - Retention Policy", "id": "7b7f2b6b-e03e-40f6-bddf-70404b6529a8" }, { "id": "a04d1460-27a0-4cc7-affa-eb12ced39cf2", "name": "Daily - Features" }, { "name": "BCPT", "id": "c57aad53-d31f-4c8c-a0b7-39424d755d88" } ], "queries": [ { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.environmentType)\n| where isnotempty(customDimensions.companyName)\n| extend environmentName = tostring(customDimensions.environmentName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| extend environmentType = iff(tobool(IsSaas),tostring(customDimensions.environmentType), \n iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),'OnPrem','SaaS'))\n| where environmentType == 'Production'\n or (environmentName !contains 'TEST'\n and environmentName !contains 'QA'\n and environmentName !contains 'TRAINING')\n| summarize count() by aadTenantId, tenantDescription, companyName, environmentName, environmentType, IsSaas\n| order by IsSaas", "id": "8602be28-bebf-4a06-b953-8772f1cdeb6e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime) // Parameter usage\n| where message contains _MessageFilter // Parameter usage\n| where isnotempty(customDimensions.eventId)\n| extend eventId = tostring(customDimensions.eventId)\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", //String manipulation \n iif(eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend status = //String manipulation \n iif(shortMessage has_any (\"called\",\"executed\",\"succeeded\",\"rendered\",\"successfully\",\"success\",\"opened\", \"added\", \"started\", \"finished\", \"Used\",\"enqueued\"),\"success\",\n iif(shortMessage has_any (\"error\",\"fail\",\"failed\",\"deadlock\",\"timed out\"), \"error\",\n iif(shortMessage has_any (\"exceeded\"),'too slow',\n \"unknown\")))\n| summarize count = count() by tostring(eventId), tostring(shortMessage), status\n| order by ['count'] desc\n", "id": "c008bb5f-f112-4b2e-bd87-067b1623d64c", "usedVariables": [ "_MessageFilter", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", //Remove ID's from message\n iif(eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend status = //Come up with a status\n iif(shortMessage has_any (\"called\",\"executed\",\"succeeded\",\"rendered\",\"successfully\",\"success\",\"opened\", \"added\", \"started\", \"finished\"),\"success\",\n iif(shortMessage has_any (\"error\",\"fail\",\"failed\",\"deadlock\",\"timed out\"), \"error\",\n iif(shortMessage has_any (\"exceeded\"),'too slow',\n \"unknown\")))\n| summarize count = count() by tostring(eventId), tostring(shortMessage), status\n| extend LearnUrl = strcat(\"https://learn.microsoft.com/en-us/search/?scope=BusinessCentral&terms=\",eventId, \"+\", replace_string(shortMessage,\" \",\"+\"))\n| project eventId, shortMessage, status, count, LearnUrl\n| order by ['count'] desc\n", "id": "6ee8955a-0509-4360-9835-fae7eae324cb", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventArea has_any (_Area) //drop-down list of all Areas\n| summarize count = count() by eventArea\n| order by ['count'] desc", "id": "b2080001-26ba-4b1c-98b5-81e77452dad5", "usedVariables": [ "_Area", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Custom Events in the base app\ntraces\n| where timestamp between (_startTime .. _endTime) \n| where customDimensions.eventId startswith \"AL\" //all events raised in AL, start with \"AL\"\n| where customDimensions.extensionPublisher == 'Microsoft'\n| extend eventId = tostring(customDimensions.eventId)\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", \n iif(customDimensions.eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| where shortMessage contains _MessageFilter\n| summarize count() by eventId, shortMessage\n| order by count_ desc", "id": "868def6d-b14e-4b1f-b57e-083db46d0bdb", "usedVariables": [ "_MessageFilter", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Custom Events in everything but Microsoft\nallTraces\n| where eventId startswith \"AL\"\n| where extensionPublisher <> 'Microsoft'\n| extend submsg = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", \n iif(customDimensions.eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| where submsg contains _MessageFilter\n| extend extensionPublisher = tostring(customDimensions.extensionPublisher)\n| summarize count() by extensionPublisher, eventId, submsg\n| order by count_ desc", "id": "dce33516-7013-4858-9815-ffe56de29c97", "usedVariables": [ "_MessageFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Get CodeunitNames\nlet codeunitNames = \n traces\n | where timestamp between (_startTime .. _endTime)\n | where customDimensions has 'ALIFCTST0002' //Full Codeunit Run\n | extend codeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n | summarize by codeunitId, codeunitName;\n//TelemetryOnTests - Overview\nlet Tests = \n traces\n | where timestamp between (_startTime .. _endTime)\n | where tostring(customDimensions.eventId) in (\"ALIFCTST0001\", \"ALIFCTST0002\", \"ALIFCTST0003\")\n | extend\n timestamp = timestamp\n , eventId = customDimensions.eventId\n , TestSuiteName = tostring(customDimensions.alTestSuiteName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , StartTime = tostring(customDimensions.alStartTime)\n , EndTime = tostring(customDimensions.alEndTime)\n , NoOfReads = tostring(customDimensions.alNoOfReads)\n , NoOfSqlStatements = tostring(customDimensions.alNoOfSQLStatements)\n , DurationMs = tostring(customDimensions.alDurationMs)\n , Result = tostring(customDimensions.alResult)\n | order by timestamp desc\n | take 10000;\ncodeunitNames\n| join kind = rightouter Tests on $left.codeunitId == $right.codeunitId\n| project\n timestamp,\n eventId,\n TestSuiteName,\n codeunitId,\n codeunitName,\n MethodName,\n StartTime,\n EndTime,\n Result,\n NoOfReads,\n NoOfSqlStatements,\n DurationMs", "id": "0f7c5281-3a86-49c7-8223-8f80724a6ae3", "usedVariables": [ "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Get CodeunitNames\nlet codeunitNames = \n traces\n | where timestamp between (_startTime .. _endTime)\n | where customDimensions has 'ALIFCTST0002' //Full Codeunit Run\n | extend codeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n | summarize by codeunitId, codeunitName;\n//Take first 2 days of the period\nlet BeginningOfPeriod = \n traces\n | where timestamp between (_startTime .. _startTime + 2d)\n | where tostring(customDimensions.eventId) == \"ALIFCTST0003\" //One function (method)\n | extend CodeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n | join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n | extend FQMethod = strcat(codeunitName,'.',MethodName)\n | where FQMethod contains _MessageFilter or message contains _MessageFilter\n | summarize avgNoOfSqlStatements=avg(NoOfSqlStatements) by FQMethod;\n//Then take last 2 days of the period\nlet EndOfPeriod = \n traces\n | where timestamp between (_endTime - 2d .. _endTime)\n | where tostring(customDimensions.eventId) == \"ALIFCTST0003\"\n | extend CodeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n | join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n | extend FQMethod = strcat(codeunitName,'.',MethodName)\n | where FQMethod contains _MessageFilter or message contains _MessageFilter\n | summarize avgNoOfSqlStatements=avg(NoOfSqlStatements) by FQMethod;\n//calculate difference, and take top 10 of the methods\nlet Difference = \n BeginningOfPeriod\n | join kind=leftouter EndOfPeriod on $left.FQMethod == $right.FQMethod\n | extend Difference = avgNoOfSqlStatements1 - avgNoOfSqlStatements\n | order by Difference desc\n | take 10;\n//Result, getting methods only\ntraces\n| where timestamp between (_startTime .. _endTime)\n| where tostring(customDimensions.eventId) == \"ALIFCTST0003\"\n| extend\n codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n| join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n| extend FQMethod = strcat(codeunitName,'.',MethodName)\n| join kind=rightouter Difference on $left.FQMethod == $right.FQMethod\n| project timestamp, FQMethod, NoOfSqlStatements\n| summarize avgNoOfSqlStatements=avg(NoOfSqlStatements) by bin(timestamp, 1d), FQMethod\n| order by FQMethod", "id": "7ab0d9af-5add-4026-8124-333757a4cff5", "usedVariables": [ "_MessageFilter", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = message\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| project timestamp, tenantDescription, environmentName, MeasuredFunction, TenantMeasuredFunction, Duration, NoSqlStatements, customDimensions\n| order by timestamp desc\n| take 100", "id": "82d43d11-286a-40f9-80f2-b87b9d313d43", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = message\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| project timestamp, tenantDescription, environmentName, MeasuredFunction, Duration, NoSqlStatements, componentVersion, callerAppVersion, callerAppName, callerPublisher\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoSqlStatements)) by MeasuredFunction, tenantDescription, environmentName, componentVersion, callerAppVersion, callerAppName, callerPublisher\n| project MeasuredFunction, tenantDescription, environmentName, count_, avgDuration, avgNoSqlStatements, callerAppName, callerPublisher, callerAppVersion, componentVersion", "id": "05748e43-13c5-4052-b60a-3f3aa9f4de32", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, bin(timestamp, 1d)", "id": "942d4c05-5146-4c57-834c-2c84b5d2612c", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"ALIFCTLM0001\"\n| where not (customDimensions has_any (\"[Image]\", \"[Picture]\")) //No indexes with columns for pictures/blobs\n| extend TableName = tostring(customDimensions.alTableName)\n , EqualityColumns = tostring(customDimensions.alEqualityColumns)\n , InequalityColumns = tostring(customDimensions.alInequalityColumns)\n , IncludeColumns = tostring(customDimensions.alIncludeColumns)\n| where TableName contains _tableFilter\n| project timestamp, tenantDescription, TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| order by timestamp desc\n| take 1000\n", "id": "4de49ef9-7d2c-4d77-8648-d2f3be6dc56e", "usedVariables": [ "_tableFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Missing indexes Per Index\nlet MissingIndexesBase=\nallTraces\n| where customDimensions.eventId == \"ALIFCTLM0001\"\n| where not (customDimensions has_any (\"[Image]\", \"[Picture]\",\"[Data]\")) //No indexes with columns for pictures/blobs\n| extend TableName = tostring(customDimensions.alTableName)\n , EqualityColumns = tostring(customDimensions.alEqualityColumns)\n , InequalityColumns = tostring(customDimensions.alInequalityColumns)\n , IncludeColumns = tostring(customDimensions.alIncludeColumns)\n| where TableName contains _tableFilter;\nlet MissingIndexesPerTenantDescription =\nMissingIndexesBase\n| summarize by bin(timestamp, 1d), aadTenantId, TableName,EqualityColumns,InequalityColumns,IncludeColumns, companyName\n| summarize NumberOfCompanies=count() by bin(timestamp, 1d),TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| order by NumberOfCompanies\n| project timestamp, TableName,EqualityColumns,InequalityColumns,IncludeColumns, NumberOfCompanies;\nlet MissingIndexesPerDay =\nMissingIndexesBase\n| summarize by bin(timestamp, 1d), aadTenantId, TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| summarize Occurences=count() by bin(timestamp, 1d),TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| order by Occurences\n| project timestamp, TableName,EqualityColumns,InequalityColumns,IncludeColumns, Occurences;\nMissingIndexesPerDay\n| join kind=leftouter MissingIndexesPerTenantDescription on $left.timestamp == $right.timestamp, $left.TableName == $right.TableName, $left.EqualityColumns == $right.EqualityColumns, $left.InequalityColumns == $right.InequalityColumns, $left.IncludeColumns == $right.IncludeColumns\n| summarize sum(Occurences), avg(NumberOfCompanies) by TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| project TableName,EqualityColumns,InequalityColumns,IncludeColumns, round(avg_NumberOfCompanies,1), sum_Occurences, Priority=round(avg_NumberOfCompanies*sum_Occurences,0)\n| order by Priority desc \n", "id": "1a6861e8-a2cd-4a71-b923-1d608f3cd46e", "usedVariables": [ "_tableFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where timestamp between (_endTime - 1d .. _endTime)\n| where not (customDimensions has_any (\"[Image]\", \"[Picture]\",\"[Data]\")) //No indexes with columns for pictures/blobs\n| where customDimensions contains \"ALIFCTLM0001\"\n| extend TableName = tostring(customDimensions.alTableName)\n , EqualityColumns = tostring(customDimensions.alEqualityColumns)\n , InequalityColumns = tostring(customDimensions.alInequalityColumns)\n , IncludeColumns = tostring(customDimensions.alIncludeColumns)\n| summarize by tenantDescription, TableName,EqualityColumns,InequalityColumns,IncludeColumns\n| summarize count_ = count() by tenantDescription\n| order by count_ desc \n", "id": "600efe89-e821-43e6-8bb0-ad262a5d3b65", "usedVariables": [ "_endTime", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Missing indexes over time\nallTraces\n| where customDimensions.eventId == \"ALIFCTLM0001\"\n| where not (customDimensions has_any (\"[Image]\", \"[Picture]\",\"[Data]\")) //No indexes with columns for pictures/blobs\n| extend TableName = tostring(customDimensions.alTableName)\n , EqualityColumns = tostring(customDimensions.alEqualityColumns)\n , InequalityColumns = tostring(customDimensions.alInequalityColumns)\n , IncludeColumns = tostring(customDimensions.alIncludeColumns)\n| summarize by bin(timestamp, 1d), tenantDescription, TableName,EqualityColumns,InequalityColumns,IncludeColumns //group all per day/tenant\n| summarize count_ = count() by bin(timestamp, 1d), tenantDescription //count all per day/tenant\n| order by count_ desc ", "id": "3cf21d55-fb49-4aa1-a6c0-8568daf7cad5", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Many Joins - base query\nallTraces\n| where isnotempty(customDimensions.sqlStatement) // I need to analyze SQL Statement\n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> 'Microsoft'\n| extend numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") //numberOfJoins\n| where not(customDimensions.alObjectType in (\"Page\")) \n| where customDimensions.sqlStatement startswith \"SELECT\" \n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1 //NumberOfColumns\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionName = customDimensions.extensionName\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = customDimensions.componentVersion\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n| project aadTenantId, tenantDescription, companyName, componentVersion, extensionPublisher, extensionName, numberOfColumnsSelected, numberOfJoins, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, extensionIdsFromJOIN\n| order by numberOfColumnsSelected, numberOfJoins desc\n| take 1000\n", "id": "6d6a812f-0956-4a64-a235-8dd24298387e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Many Joins - By Table\nallTraces\n| where isnotempty(customDimensions.sqlStatement)\n| where isnotempty(customDimensions.alStackTrace)\n| extend numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n| where not(customDimensions.alObjectType in (\"Page\"))\n| where customDimensions.sqlStatement startswith \"SELECT\"\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n // , \n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| where numberOfColumnsSelected > 20\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n// | project TenantId, extensionPublisher, extensionName, companyName, numberOfColumnsSelected, numberOfJoins, executionTimeInMS, ObjectType, ObjectId, ObjectName, clientType, StackTrace, eventId, message, tablename, sqlStatement, extensionIdsFromJOIN, componentVersion\n| summarize avgExecutionTime = toint(avg(executionTimeInMS)), avgnumberOfColumns = toint(avg(numberOfColumnsSelected)), count = count() by aadTenantId, tenantDescription, componentVersion, extensionName\n| order by avgnumberOfColumns desc \n\n", "id": "885767e4-1f73-45b7-a6bc-d34b344b7dbc", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Many Joins - By Table\nallTraces\n| where isnotempty(customDimensions.sqlStatement)\n| where isnotempty(customDimensions.alStackTrace)\n| extend numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n| where not(customDimensions.alObjectType in (\"Page\"))\n| where customDimensions.sqlStatement startswith \"SELECT\"\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , TenantId = strcat(customDimensions.aadTenantId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n| project TenantId, extensionPublisher, extensionName, companyName, numberOfColumnsSelected, numberOfJoins, executionTimeInMS, ObjectType, ObjectId, ObjectName, clientType, StackTrace, eventId, message, tablename, sqlStatement, extensionIdsFromJOIN\n| summarize avgExecutionTime = toint(avg(executionTimeInMS)), avgnumberOfColumns = toint(avg(numberOfColumnsSelected)), count = count() by tablename\n| order by ['count'] desc \n| take 1000\n", "id": "a65356d1-831a-4ccf-a5c2-a8ccf3135dbb", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT TOP 1 NULL\" //IsEmpty\n and customDimensions.sqlStatement contains \"UPDLOCK\" //Which is locking\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n| project aadTenantId, companyName, componentVersion, extensionPublisher, extensionName\n , executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement,customDimensions\n| take 1000\n", "id": "1705eabe-f7b5-4305-974f-fcc52aa15996", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": " // Any IsEmpty that we can find in Telemetry that is locking\n // By ExtensionName\n\nallTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT TOP 1 NULL\"\n and customDimensions.sqlStatement contains \"UPDLOCK\"\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n// | project TenantId, extensionPublisher, extensionName, companyName, numberOfColumnsSelected, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, extensionIdsFromJOIN\n| summarize count = count() by tenantDescription, tostring(extensionName), componentVersion\n| order by count desc \n", "id": "0cf9db9d-1796-42ca-93b5-0cbe8cd9aab3", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT SUM\" //Calcsums\n and customDimensions.sqlStatement contains \"UPDLOCK\" //Which is locking\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n| project aadTenantId, companyName, componentVersion, extensionName, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, customDimensions\n| take 1000\n", "id": "ba569803-4d86-409a-b516-2921e178ce5e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": " // Any IsEmpty that we can find in Telemetry that is locking\n // By ExtensionName\n\nallTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT SUM\"\n and customDimensions.sqlStatement contains \"UPDLOCK\"\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n// | project TenantId, extensionPublisher, extensionName, companyName, numberOfColumnsSelected, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, extensionIdsFromJOIN\n| summarize count = count() by tenantDescription, tostring(extensionName), componentVersion\n| order by count desc \n", "id": "db160dcd-c19d-4eb7-b458-2624fd3fc3d4", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT COUNT\" //.Count\n and customDimensions.sqlStatement contains \"UPDLOCK\" //Which is locking\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend extensionIdsFromJOIN = tostring( extract_all(\"JOIN \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY\\\\$.+?\\\\$(\\\\S+?)\\\"\", sqlStatement))\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n| project aadTenantId, componentVersion, extensionName, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, extensionIdsFromJOIN, customDimensions\n| take 1000\n", "id": "4f86cd2a-e770-4f42-8a0f-c95f4a4044d6", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": " // Any IsEmpty that we can find in Telemetry that is locking\n // By ExtensionName\n\nallTraces\n| where isnotempty(customDimensions.sqlStatement) \n| where isnotempty(customDimensions.alStackTrace) // Actionable\n| where customDimensions.extensionPublisher <> \"Microsoft\"\n| where customDimensions.sqlStatement contains \"SELECT COUNT\"\n and customDimensions.sqlStatement contains \"UPDLOCK\"\n and customDimensions.sqlStatement startswith \"SELECT\"\n| where not(customDimensions.alObjectType in (\"Page\"))\n| parse kind=regex tostring(customDimensions.sqlStatement) with selectPart: string \"FROM\" rest: string\n| extend numberOfColumnsSelected = countof(selectPart, \",\") + 1\n , eventId = tostring(customDimensions.eventId)\n , userId = user_Id\n , ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , clientType = tostring(customDimensions.clientType)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , executionTime = customDimensions.executionTime\n , executionTimeInMS = toreal(totimespan(customDimensions.executionTime))/10000\n , extensionId = customDimensions.extensionId\n , extensionPublisher = customDimensions.extensionPublisher\n , componentVersion = tostring(customDimensions.componentVersion)\n| extend tablename = tostring( extract_all(\"FROM \\\"SQLDATABASE\\\"\\\\.dbo\\\\.\\\"CURRENTCOMPANY(\\\\$.+?)\\\\$\\\\S+?\\\"\", sqlStatement)[0])\n// | project TenantId, extensionPublisher, extensionName, companyName, numberOfColumnsSelected, executionTimeInMS, ObjectType, ObjectId, ObjectName, StackTrace, eventId, message, clientType, tablename, sqlStatement, extensionIdsFromJOIN\n| summarize count = count() by tenantDescription, tostring(extensionName), componentVersion\n| order by count desc \n", "id": "3da41e67-704f-4615-bf68-4e3374cd958b", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - Last ones\r\nallTraces\r\n| where eventId == 'RT0028'\r\n| where customDimensions.alObjectId != '0' //Actionable\r\n| where isnotempty(customDimensions.alObjectId)\r\n| extend ObjectType = tostring(customDimensions.alObjectType)\r\n , ObjectId = tostring(customDimensions.alObjectId)\r\n , ObjectName = tostring(customDimensions.alObjectName)\r\n , sqlStatement = tostring(customDimensions.sqlStatement)\r\n // , \r\n , userId = user_Id\r\n| extend operationType = case(\r\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\r\n , sqlStatement startswith \"DELETE\", \"DELETE\"\r\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\r\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\r\n , sqlStatement startswith \"SELECT\", \"SELECT\"\r\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\r\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\r\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\r\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\r\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\r\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\r\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \r\n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\r\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\r\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\r\n , \"UNKNOWN\"\r\n ) \r\n//Get tablename with regex\r\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\r\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\r\n| extend lengthStacktrace = array_length(splitStacktrace)\r\n| extend\r\n LockingObject = splitStacktrace[0],\r\n SourceProcess = splitStacktrace[lengthStacktrace - 1]\r\n| where SourceProcess contains _sourceObjectFilter\r\n| where LockingObject contains _SlowObjectFilter\r\n| project\r\n timestamp,\r\n tenantDescription,\r\n // companyName,\r\n userId,\r\n ObjectType,\r\n ObjectId,\r\n ObjectName,\r\n LockingObject,\r\n SourceProcess,\r\n operationType,\r\n sqlStatement,\r\n splitStacktrace,\r\n customDimensions\r\n| order by timestamp desc \r\n", "id": "b700bc43-0173-48ad-94fc-4062bbd134e1", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - By Customer\n\nallTraces\n| where eventId == 'RT0028'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n , stackTrace = tostring(customDimensions.alStackTrace)\n , componentVersion = tostring(customDimensions.componentVersion)\n , userId = user_Id\n| where ObjectName contains _sourceObjectFilter\n| parse kind=regex sqlStatement with selectPart: string \"FROM \" tablename: string\n| project timestamp, tenantDescription, companyName, componentVersion, ObjectType, ObjectId, ObjectName, numberOfJoins, stackTrace, sqlStatement, tablename, customDimensions\n| summarize count = count() by tenantDescription, componentVersion, companyName\n| project count, tenantDescription, companyName, componentVersion\n| order by count desc \n\n", "id": "64ad1976-19d2-4e8f-8d57-9b2907eb8396", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - By Day\n\nallTraces\n| where customDimensions has 'RT0028'\n| where customDimensions.eventId == 'RT0028'\n| where isnotempty(customDimensions.aadTenantId) // filter away signal from Docker sandboxes\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n    , ObjectId = tostring(customDimensions.alObjectId)\n    , ObjectName = tostring(customDimensions.alObjectName)\n    , sqlStatement = tostring(customDimensions.sqlStatement)\n    , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n    , stackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| where ObjectName contains _sourceObjectFilter\n| parse kind=regex sqlStatement with selectPart: string \"FROM \" tablename: string\n| summarize count = count() by bin(timestamp, 1d), tenantDescription\n", "id": "c7237d4c-bee5-406e-8b1e-9e3ab4029335", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0028'\n| where isnotempty(customDimensions.aadTenantId) // filter away signal from Docker sandboxes\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , componentVersion = tostring(customDimensions.componentVersion)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n tenantDescription,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension,\n topOfStackPublisher,\n SourceProcess,\n StackTrace,\n customDimensions,\n componentVersion,\n extensionName,\n sqlStatement\n| summarize count = count() by componentVersion, tostring(SourceProcess), tostring(tenantDescription), tostring(extensionName), tostring(LockingObject), tostring(LockingObjectId), tostring(LockingObjectMethod),tostring(operationType)\n| project count, tenantDescription, componentVersion, SourceProcess, LockingObject, operationType, extensionName\n| order by ['count'],SourceProcess desc \n\n\n", "id": "b14a2eb2-9921-4e06-8d9b-1c347a0b697e", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0028'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n companyName,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension, \n SourceProcess,\n StackTrace,\n customDimensions\n| summarize count = count() by tostring(LockingObject)\n| order by ['count'],LockingObject desc \n\n\n", "id": "2260eaac-bc82-4f44-83ec-9a52ae54e3b7", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0028'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n tenantDescription,\n companyName,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension, \n SourceProcess,\n StackTrace,\n customDimensions\n| summarize count = count() by tostring(SourceProcess)\n| order by ['count'],SourceProcess desc \n\n\n", "id": "1f25df10-8c61-4450-bafe-e5447014ba06", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// Lock Timeouts - Last ones\r\nallTraces\r\n| where eventId == 'RT0012'\r\n| where customDimensions.alObjectId != '0' \r\n| where isnotempty(customDimensions.alObjectId)\r\n| extend ObjectType = tostring(customDimensions.alObjectType)\r\n , ObjectId = tostring(customDimensions.alObjectId)\r\n , ObjectName = tostring(customDimensions.alObjectName)\r\n , sqlStatement = tostring(customDimensions.sqlStatement)\r\n // , \r\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \r\n , userId = user_Id\r\n| extend operationType = case(\r\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\r\n , sqlStatement startswith \"DELETE\", \"DELETE\"\r\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\r\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\r\n , sqlStatement startswith \"SELECT\", \"SELECT\"\r\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\r\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\r\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\r\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\r\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\r\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\r\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \r\n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\r\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\r\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\r\n , \"UNKNOWN\"\r\n ) \r\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\r\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\r\n| extend lengthStacktrace = array_length(splitStacktrace)\r\n| extend\r\n LockingObject = splitStacktrace[0],\r\n SourceProcess = splitStacktrace[lengthStacktrace - 1]\r\n| where SourceProcess contains _sourceObjectFilter\r\n| where LockingObject contains _SlowObjectFilter\r\n| project\r\n timestamp,\r\n tenantDescription,\r\n userId,\r\n // companyName,\r\n ObjectType,\r\n ObjectId,\r\n ObjectName,\r\n numberOfJoins,\r\n LockingObject,\r\n SourceProcess,\r\n operationType,\r\n sqlStatement,\r\n splitStacktrace,\r\n customDimensions\r\n| order by timestamp desc \r\n| take 100\r\n\r\n", "id": "bde82600-5be6-4e68-a44c-de60b58b693b", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0012'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n , stackTrace = tostring(customDimensions.alStackTrace)\n , componentVersion = tostring(customDimensions.componentVersion)\n , userId = user_Id\n| parse kind=regex sqlStatement with selectPart: string \"FROM \" tablename: string\n | extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n | extend lengthStacktrace = array_length(splitStacktrace)\n | extend\n LockingObject = splitStacktrace[0],\n SourceProcess = splitStacktrace[lengthStacktrace - 1]\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project timestamp, tenantDescription, componentVersion, ObjectType, ObjectId, ObjectName, numberOfJoins, stackTrace, sqlStatement, tablename, customDimensions\n| summarize count = count() by tenantDescription, componentVersion\n| project count, tenantDescription, componentVersion\n| order by count desc \n\n", "id": "4e84039d-555f-4ce4-aa87-efec7f29420f", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// Lock Timeouts - By Day\n\nallTraces\n| where eventId == 'RT0012'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n    , ObjectId = tostring(customDimensions.alObjectId)\n    , ObjectName = tostring(customDimensions.alObjectName)\n    , sqlStatement = tostring(customDimensions.sqlStatement)\n//     ,         \n    , stackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| where ObjectName contains _sourceObjectFilter\n| summarize count = count() by bin(timestamp, 1d), tenantDescription, ObjectName\n", "id": "acdcccd3-7d0b-4454-b7ed-3c264a66b326", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// Lock Timeouts - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0012'\n| where isnotempty(customDimensions.aadTenantId) // filter away signal from Docker sandboxes\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n companyName,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension, \n SourceProcess,\n StackTrace,\n customDimensions\n| summarize count = count() by tostring(SourceProcess)\n| order by ['count'],SourceProcess desc \n\n\n", "id": "0804cc9e-9770-4af1-bdd7-9be06dd7412d", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0012'\n| where isnotempty(customDimensions.aadTenantId) // filter away signal from Docker sandboxes\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n companyName,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension, \n SourceProcess,\n StackTrace,\n customDimensions\n| summarize count = count() by tostring(LockingObject)\n| order by ['count'],LockingObject desc \n\n\n", "id": "a14a9a82-dc6a-42c1-8b04-907b83b2b6e7", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend endpoint = tostring(customDimensions.endpoint)\n , eventId = tostring(customDimensions.eventId)\n| summarize count(), avgTime = toint(avg(elapsedTimeInMS)), totalTime = toint(sum(elapsedTimeInMS)) by tenantDescription, companyName\n| order by totalTime desc \n", "id": "edba34e4-103f-41ac-a20d-79ddb726db11", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend totalTime = toint(totimespan(customDimensions.totalTime)/10000)\n , endpoint = tostring(customDimensions.endpoint)\n , eventId = tostring(customDimensions.eventId)\n| summarize count(), avgTime = toint(avg(totalTime)), totalTime = sum(totalTime) by bin(timestamp,1d), tenantDescription\n| take 10", "id": "2abdf7a3-da30-40bf-b448-62c957d9cfee", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces //we don't want to have the default filters, therefore NO base query\n| where timestamp between (_endTime - 30d .. _endTime)\n| extend eventId = tostring(customDimensions.eventId)\n , aadTenantId = tostring(customDimensions.aadTenantId)\n , extensionName = tostring(customDimensions.extensionName)\n| where eventId has_any (_eventId)\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| summarize count() by bin(timestamp,1d)\n", "id": "cb86eaee-df0e-4222-b1a4-ee3d495e0304", "usedVariables": [ "_TenantDescription", "_endTime", "_eventId", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008' //Incoming webservice Calls\n| extend endpoint = tostring(customDimensions.endpoint) \n , ObjectName = tostring(customDimensions.alObjectName)\n , serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n , totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n , queryFilter = tostring(customDimensions.queryFilter)\n , category = tostring(customDimensions.category)\n| where ObjectName contains _sourceObjectFilter\n| summarize count = count(), avgServerExecutionTimeInMS = avg(serverExecutionTimeInMS), avgTotalTimeInMs = avg(totalTimeInMS) by endpoint, category, queryFilter, ObjectName\n| project \n endpoint\n , queryFilter\n , category\n , ObjectName\n , ['count']\n , avgServerExecutionTimeInMS = round(avgServerExecutionTimeInMS,0)\n , avgTotalTimeInMs = round(avgTotalTimeInMs, 0)\n , ApproxTime = round(['count'] * avgServerExecutionTimeInMS,0)\n| order by ApproxTime desc ", "id": "6f40df88-d3b3-4c23-9746-1a8c4eb1077d", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where aadTenantId <> 'common' //Not possible to report OnPrem customers decently in this query (need to look at companyName)\n| summarize count() by tenantDescription\n| order by count_ desc \n| take 10 //Top 10", "id": "b30eac30-447a-470e-a07e-b0babb422fa2", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let TracesPlusPageviews = \n traces \n | union pageViews \n | where timestamp between (_startTime .. _endTime)\n | count \n | extend Desc = 'traces + pageViews'; \nlet BaseCustomers = \n allTraces \n | count \n | extend Desc = 'allTraces';\nTracesPlusPageviews\n| union BaseCustomers", "id": "0196f1fe-7f58-44b9-97fc-8e64c3f39e53", "usedVariables": [ "_endTime", "_startTime", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let TempAllTraces = \n traces\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , componentVersion = tostring(customDimensions.componentVersion)\n , environmentType = tostring(customDimensions.environmentType)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , extensionVersion = tostring(customDimensions.extensionVersion)\n | where isnotempty( componentVersion)\n | where isnotempty( environmentType)\n | where environmentType <> 'Sandbox'\n | where extensionPublisher == 'Microsoft'\n | summarize componentVersion = max(componentVersion), appVersion = max(extensionVersion) by aadTenantId, environmentType\n ;\nentraTenantIdDescriptions\n| join kind=leftouter TempAllTraces on $left.entraTenantId == $right.aadTenantId\n| project aadTenantId, tenantDescription, componentVersion, appVersion", "id": "4e8d2e2b-15d8-462d-b2e4-1e525eb95e4a", "usedVariables": [ "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( companyName)\n| where isnotempty( elapsedTimeInMS)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n| where ObjectId contains _sourceObjectFilter\n| summarize toint(avg(elapsedTimeInMS)), count() by tenantDescription, eventDescription, eventId\n| order by avg_elapsedTimeInMS desc\n| take 10\n", "id": "ae13b940-6175-4d6a-b155-83fdac0bf648", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend endpoint = tostring(customDimensions.endpoint)\n, ObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n| where ObjectName contains _sourceObjectFilter\n| summarize count() by bin(timestamp, 1h), endpoint, tenantDescription //put endpoint and customer in the graph\n", "id": "c1e124dd-1af6-467a-abd6-ea3ffaedc760", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend endpoint = tostring(customDimensions.endpoint)\n, alObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTimeInMS = toint(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTimeInMS = toint(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n, queryFilter = tostring(customDimensions.queryFilter)\n, category = tostring(customDimensions.category)\n| where alObjectName contains _sourceObjectFilter\n| order by timestamp desc \n| project \n tenantDescription\n , timestamp \n , alObjectName\n , endpoint\n , category\n , queryFilter\n , serverExecutionTimeInMS\n , customDimensions\n| order by timestamp desc \n| take 1000", "id": "798ec149-4911-4e89-8577-53bf2c7dbe05", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionName = tostring(customDimensions.extensionName)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| order by timestamp desc \n| take 100", "id": "5557b35e-e902-4c32-8f2b-040a5435d58c", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement)\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend SourceProcess = strcat(bottomOfStackline)\n , SlowObject = split(replace_string(topOfStackline,'AL CallStack: ',''),'line')[0]\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n // , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , SourceProcess\n , SlowObject\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| summarize count(), avg(elapsedTimeInMS) by SlowObject", "id": "cb28ebf5-5d02-43e0-b736-1404e21b4c4f", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement)\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend SourceProcess = strcat(bottomOfStackline)\n , SlowObject = split(replace_string(topOfStackline,'AL CallStack: ',''),'line')[0]\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize count(), toint(avg(elapsedTimeInMS)) by SlowObject\n| order by count_ desc ", "id": "2b7d4cc1-a871-49d4-b915-2b3db3f99815", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp >= ago(30d)\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.alTag has_any (_BCPTTag)\n| where customDimensions has _codeunitName\n| where customDimensions.alOperation == 'Scenario'\n| where customDimensions.alStatus == 'Success'\n| extend RunId = tostring(customDimensions.alRunID)\n , Suite = tostring(customDimensions.alCode)\n , CodeunitName = tostring(customDimensions.alCodeunitName)\n , Operation = tostring(customDimensions.alOperation)\n , Tag = iif(customDimensions.alTag contains_cs \"PTE\", \"PTE\", \n iif(customDimensions.alTag contains \"Focus\", \"CustSpecific\"\n , tostring(customDimensions.alTag)))\n , Version = tostring(customDimensions.alVersion)\n , DurationInMs = toint(customDimensions.alDurationInMs)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSqlStatements)\n , alStatus = tostring(customDimensions.alStatus)\n , alMessage = tostring(customDimensions.alMessage)\n , Week = strcat(format_datetime(timestamp, \"yyyy\"),'-',week_of_year(timestamp))\n| order by timestamp desc\n| summarize count = count(), avgNoOfSqlStatements = toint(avg(NoOfSqlStatements)), avgDuration = toint(avg(DurationInMs)) by bin(timestamp, 1d), CodeunitName, Tag\n| order by timestamp, Tag, CodeunitName\n", "id": "63e17c65-a174-4ab4-a710-dd2a9884c97b", "usedVariables": [ "_BCPTTag", "_codeunitName" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp >= ago(30d)\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.alTag has_any (_BCPTTag)\n| where customDimensions has _codeunitName\n| where customDimensions.alOperation == 'Scenario'\n| where customDimensions.alStatus == 'Success'\n| extend RunId = tostring(customDimensions.alRunID)\n , Suite = tostring(customDimensions.alCode)\n , CodeunitName = tostring(customDimensions.alCodeunitName)\n , Operation = tostring(customDimensions.alOperation) \n , Tag = iif(customDimensions.alTag contains_cs \"PTE\", \"PTE\", \n iif(customDimensions.alTag contains \"Focus\", \"CustSpecific\"\n , tostring(customDimensions.alTag)))\n , Version = tostring(customDimensions.alVersion)\n , DurationInMs = toint(customDimensions.alDurationInMs)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSqlStatements)\n , alStatus = tostring(customDimensions.alStatus)\n , alMessage = tostring(customDimensions.alMessage)\n , Week = strcat(format_datetime(timestamp, \"yyyy\"),'-',week_of_year(timestamp))\n| order by timestamp desc\n| summarize count = count(), avgDuration = toint(avg(DurationInMs)) by bin(timestamp, 1d), CodeunitName, Tag\n| order by timestamp, Tag, CodeunitName\n", "id": "1a13ae89-57f0-4163-aa0b-56e633177fa5", "usedVariables": [ "_BCPTTag", "_codeunitName" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime)\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.alTag has_any (_BCPTTag)\n| where customDimensions has _codeunitName\n| where customDimensions.alOperation == 'Scenario'\n| where customDimensions.alStatus == 'Error'\n| extend RunId = tostring(customDimensions.alRunID)\n , Suite = tostring(customDimensions.alCode)\n , CodeunitName = tostring(customDimensions.alCodeunitName)\n , Operation = tostring(customDimensions.alOperation)\n , Tag = iif(customDimensions.alTag contains_cs \"PTE\", \"PTE\", \n iif(customDimensions.alTag contains \"Focus\", \"CustSpecific\"\n , tostring(customDimensions.alTag)))\n , Version = tostring(customDimensions.alVersion)\n , DurationInMs = toint(customDimensions.alDurationInMs)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSqlStatements)\n , alStatus = tostring(customDimensions.alStatus)\n , alMessage = tostring(customDimensions.alMessage)\n , Week = strcat(format_datetime(timestamp, \"yyyy\"),'-',week_of_year(timestamp))\n| order by timestamp desc\n| summarize count = count(), avgNoOfSqlStatements = toint(avg(NoOfSqlStatements)), avgDuration = toint(avg(DurationInMs)) by bin(timestamp, 1d), CodeunitName, Tag\n| order by timestamp, Tag, CodeunitName\n", "id": "be6b924f-0baf-470b-bf9c-e588034ba173", "usedVariables": [ "_BCPTTag", "_codeunitName", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime)\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.alTag has_any (_BCPTTag)\n| where customDimensions has _codeunitName\n| where customDimensions.alOperation == 'Scenario'\n| where customDimensions.alStatus == 'Error'\n| extend RunId = tostring(customDimensions.alRunID)\n , Suite = tostring(customDimensions.alCode)\n , CodeunitName = tostring(customDimensions.alCodeunitName)\n , Operation = tostring(customDimensions.alOperation)\n , Tag = iif(customDimensions.alTag contains_cs \"PTE\", \"PTE\", \n iif(customDimensions.alTag contains \"Focus\", \"CustSpecific\"\n , tostring(customDimensions.alTag)))\n , Version = tostring(customDimensions.alVersion)\n , DurationInMs = toint(customDimensions.alDurationInMs)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSqlStatements)\n , alStatus = tostring(customDimensions.alStatus)\n , alMessage = tostring(customDimensions.alMessage)\n , Week = strcat(format_datetime(timestamp, \"yyyy\"),'-',week_of_year(timestamp))\n| order by timestamp desc\n| project Tag, CodeunitName, alMessage, DurationInMs, NoOfSqlStatements", "id": "0195295a-7522-4600-9f66-984061f75c40", "usedVariables": [ "_BCPTTag", "_codeunitName", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where timestamp between (_endTime - 24h .. _endTime)\n| summarize count() by bin(timestamp,15m)", "id": "32efd14b-f002-488f-ae2b-b152e96c5433", "usedVariables": [ "_endTime", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend decentMessage = iif(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))\n, endpoint = tostring(customDimensions.endpoint)\n, alObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTime = tostring(customDimensions.serverExecutionTime)\n, serverExecutionTimeInMS = toint(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTime = tostring(customDimensions.totalTime)\n, totalTimeInMS = toint(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n, queryFilter = tostring(customDimensions.queryFilter)\n, category = tostring(customDimensions.category)\n| where alObjectName contains _sourceObjectFilter\n| summarize count = count() by tenantDescription\n", "id": "5ec01173-50fe-4eb3-8b13-4a37b42b9dbb", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend decentMessage = iif(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))\n, endpoint = tostring(customDimensions.endpoint)\n, alObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTime = tostring(customDimensions.serverExecutionTime)\n, serverExecutionTimeInMS = toint(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTime = tostring(customDimensions.totalTime)\n, totalTimeInMS = toint(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n, queryFilter = tostring(customDimensions.queryFilter)\n, category = tostring(customDimensions.category)\n| where alObjectName contains _sourceObjectFilter\n| summarize count = count() by endpoint\n", "id": "476519af-517d-4781-b9e9-4fc5403de69c", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Thanks for the idea, Stefano Demiliani!\n\nallTraces\n| where eventId == 'RT0008'\n and customDimensions.category == 'ODataV4'\n| where customDimensions contains \"DynamicsOfficeApp\"\n| extend httpHeadersTmp = tostring( customDimensions.httpHeaders)\n| extend httpHeadersJSON = parse_json(httpHeadersTmp)\n| where httpHeadersJSON.['ms-dyn-useragent'] contains \"DynamicsOfficeApp\"\n| extend httpStatusCode = customDimensions.httpStatusCode\n , environmentName = customDimensions.environmentName\n , environmentType = customDimensions.environmentType\n , alObjectId = customDimensions.alObjectId\n , alObjectName = customDimensions.alObjectName\n , endpoint = customDimensions.endpoint\n| project timestamp, tenantDescription, alObjectId, alObjectName, totalTime, httpStatusCode, environmentName, environmentType, endpoint, message, customDimensions\n| order by timestamp desc \n", "id": "35cd8ec8-33c4-4c21-9da8-5e2c697b0095", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\r\n| order by timestamp desc \r\n| take 1000", "id": "b0978deb-57be-4dbc-b046-99270661f15c", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend endpoint = tostring(customDimensions.endpoint)\n, ObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n| where ObjectName contains _sourceObjectFilter\n| summarize avgTotalTime = avg(totalTimeInMS) by bin(timestamp, 1h), endpoint, tenantDescription //put endpoint and customer in the graph\n", "id": "59b040d0-366a-442b-b022-4515411d3791", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = message\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, tenantDescription, message ", "id": "6c5526da-adf9-414e-9a45-500d811c0fb6", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n // , \n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend SourceProcess = replace_string(bottomOfStackline,'AL CallStack: ','')\n , SlowObject = split(replace_string(topOfStackline,'AL CallStack: ',''),'line')[0]\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize avgElapsedtime = avg(elapsedTimeInMS) by SourceProcess", "id": "5c947609-8f50-4cd5-840a-511cc0c33b41", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n // , \n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend SourceProcess = replace_string(bottomOfStackline,'AL CallStack: ','')\n , SlowObject = split(replace_string(topOfStackline,'AL CallStack: ',''),'line')[0]\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize avgElapsedtime = avg(elapsedTimeInMS) by SlowObject", "id": "2c87ced3-5ea0-4e8c-936b-fd1f015e7e28", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| summarize avg(elapsedTimeInMS) by bin(timestamp, 1d), tenantDescription", "id": "5fbdc066-e7ff-49e8-9523-e4affafac505", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "externaldata(eventId :string, eventArea:string, eventDescription:string)\n [h@'https://raw.githubusercontent.com/waldo1001/waldo.BCTelemetry/master/Azure%20Data%20Explorer/ExternalData/Signals.json']\n with(format='multijson')\n| where eventDescription contains _MessageFilter\n| where eventArea has_any (_Area);", "id": "08a39dde-2d8a-452f-9474-8c94898696e6", "usedVariables": [ "_Area", "_MessageFilter" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isempty(customDimensions.sqlStatement) //Anything without sqlStatement\n| where isnotempty( elapsedTimeInMS)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n| where ObjectName contains _sourceObjectFilter\n| summarize toint(avg(elapsedTimeInMS)), count() by tenantDescription, eventDescription, eventId\n| order by avg_elapsedTimeInMS desc\n| take 1000\n", "id": "9a1c368a-24e2-4cfd-a789-7e2386c4ca64", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n//SourceProcess = bottom, SlowObject = Top\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n // , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , SourceProcess\n , SlowObject\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| order by timestamp desc \n| take 2000", "id": "4b0ba2cd-8808-4ee0-8643-3d7731814f4c", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n // , extensionName = tostring(customDimensions.extensionName)\n // , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n//SourceProcess = bottom, SlowObject = Top\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n // , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , SourceProcess\n , SlowObject\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| order by timestamp desc \n| take 1000", "id": "ee7ab34c-3abb-47e2-b32c-51de991bc03b", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n // , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , SourceProcess\n , SlowObject\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| summarize count(), avg(elapsedTimeInMS) by SlowObject", "id": "184c1352-001d-4aeb-b082-02daf4255171", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize count(), toint(avg(elapsedTimeInMS)) by SlowObject\n| order by count_ desc ", "id": "e893f0a3-a1a7-4824-8130-3cf05ff47158", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n // , \n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n//SourceProcess = bottom, SlowObject = Top\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize avgElapsedtime = avg(elapsedTimeInMS) by SourceProcess", "id": "e0f2725b-f8da-46b5-b22e-e7fb2b9e59e6", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n // , \n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n//SourceProcess = bottom, SlowObject = Top\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize avgElapsedtime = avg(elapsedTimeInMS) by SlowObject", "id": "38566e27-4224-4013-91e6-d0e9dc6e4fb5", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n//from Microsoft: analyze the stacktrace, eventually to get top and bottom line\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n//SourceProcess = bottom, SlowObject = Top\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| project timestamp\n , eventId\n , message\n , componentVersion\n , tenantDescription\n // , companyName\n , extensionName\n , extensionPublisher\n , splitStacktrace\n , SourceProcess\n , SlowObject\n , alObjectType\n , alObjectName\n , alObjectId\n , elapsedTimeInMS\n , customDimensions\n , sqlStatement\n| summarize avg(elapsedTimeInMS) by bin(timestamp, 1d), tenantDescription", "id": "3a64cf04-d932-481d-bb3f-90713092011c", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where itemType == 'pageView'\n| where name !in (\"Dialog\")\n| summarize count(), avgDuration = toint(avg(duration)) by name\n| project Page = name, count_, avgDuration, totalWaitTime = count_ * avgDuration\n| order by totalWaitTime desc ", "id": "dcb18e21-c6f8-40ab-b956-9736735aecba", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where tenantDescription <> 'common' // \"common\" = alle OnPrem customers, which don't make sense in this graph\n| where itemType == 'pageView'\n| where name !in (\"Dialog\")\n| summarize count(), avgDuration = toint(avg(duration)) by tenantDescription, name\n| project Page = name, tenantDescription, count_, avgDuration, totalWaitTime = count_ * avgDuration\n| order by totalWaitTime desc \n| take 50", "id": "5ece6560-e041-40bf-8a32-93b13b5977be", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.environmentType)\n| where timestamp >= ago(10d)\n| where isnotempty(companyName)\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n| extend environmentName = tostring(customDimensions.environmentName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| extend environmentType = iff(tobool(IsSaas),tostring(customDimensions.environmentType), \n iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),'OnPrem','SaaS'))\n| where environmentType == 'Production'\n or (environmentName !contains 'TEST'\n and environmentName !contains 'QA'\n and environmentName !contains 'TRAINING')\n| summarize NoOfSignals = count() by aadTenantId, tenantDescription, companyName, environmentName, environmentType, IsSaas, componentVersion, callerAppVersion\n| project aadTenantId, tenantDescription, companyName, environmentName, environmentType, IsSaas, NoOfSignals, componentVersion, callerAppVersion\n", "id": "a4acfc3e-612c-4cd1-9c5e-39a8488d654e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize count(), toint(avg(elapsedTimeInMS)) by bin(timestamp, 1h), SourceProcess\n| extend totalTime = count_ * avg_elapsedTimeInMS\n| project timestamp, SourceProcess, totalTime\n| order by totalTime\n| take 75\n", "id": "203c8600-6d93-4b21-8ecf-bc5965159486", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by tenantDescription, bin(timestamp, 1d)", "id": "65ea0def-f60a-4dec-ab9d-a1316c857e33", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0005\") //Slow running SQL\n| where isnotempty( elapsedTimeInMS)\n| where isnotempty( componentVersion)\n| extend componentVersion = extract(\"^(\\\\d+\\\\.\\\\d+)\",1,componentVersion)\n| summarize toint(avg(elapsedTimeInMS)) by version = strcat(\"Server: \", componentVersion)", "id": "16f9a04e-f4a3-4665-861c-01e6dcb5fbcb", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0018\") //Slow running AL\n| where isnotempty( elapsedTimeInMS)\n| where isnotempty( extensionName) \n| summarize toint(avg(elapsedTimeInMS)) by extensionName\n| order by avg_elapsedTimeInMS desc\n| take 10", "id": "753ad640-abe1-4180-b1d4-cec31ba78d5d", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( clientType)\n| summarize count() by bin(timestamp, 1h), clientType", "id": "77ded84f-1318-411c-b1e3-73bd722fa76a", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0005\") //Slow running SQL\n| where isnotempty( elapsedTimeInMS)\n| summarize toint(avg(elapsedTimeInMS)) by tenantDescription\n| order by avg_elapsedTimeInMS desc ", "id": "e023f51c-b809-417f-a9e4-8985b59c5d00", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0018\") //Slow running AL\n| where isnotempty( elapsedTimeInMS)\n| summarize toint(avg(elapsedTimeInMS)) by tenantDescription\n| order by avg_elapsedTimeInMS desc ", "id": "bb3a8aaa-77e5-4354-900f-4e58f3ce98e8", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0005\") //Slow running SQL\n| where isnotempty( elapsedTimeInMS)\n| where isnotempty( extensionName) \n| summarize toint(avg(elapsedTimeInMS)) by extensionName\n| order by avg_elapsedTimeInMS desc\n| take 10", "id": "84c1c737-6214-4be8-9094-2e0e43919fa7", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\"RT0018\") //Slow running AL\n| where isnotempty( elapsedTimeInMS)\n| where isnotempty( componentVersion)\n| extend componentVersion = extract(\"^(\\\\d+\\\\.\\\\d+)\",1,componentVersion)\n| summarize toint(avg(elapsedTimeInMS)) by version = strcat(\"Server: \", componentVersion)\n", "id": "9637a68b-91a7-4796-bbdd-60de93217d9d", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Get CodeunitNames\nlet codeunitNames = \n traces\n | where timestamp between (_startTime .. _endTime)\n | where customDimensions has 'ALIFCTST0002' //Full Codeunit Run\n | extend codeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n | summarize by codeunitId, codeunitName;\n//Take first 2 days of the period\nlet BeginningOfPeriod = \n traces\n | where timestamp between (_startTime .. _startTime + 2d)\n | where tostring(customDimensions.eventId) == \"ALIFCTST0003\" //One function (method)\n | extend CodeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n , DurationMs = toint(customDimensions.alDurationMs)\n | join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n | extend FQMethod = strcat(codeunitName,'.',MethodName)\n | where FQMethod contains _MessageFilter or message contains _MessageFilter\n | summarize avgDurationMs=avg(DurationMs) by FQMethod;\n//Then take last 2 days of the period\nlet EndOfPeriod = \n traces\n | where timestamp between (_endTime - 2d .. _endTime)\n | where tostring(customDimensions.eventId) == \"ALIFCTST0003\"\n | extend CodeunitName = tostring(customDimensions.alName)\n , codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n , DurationMs = toint(customDimensions.alDurationMs)\n | join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n | extend FQMethod = strcat(codeunitName,'.',MethodName)\n | where FQMethod contains _MessageFilter or message contains _MessageFilter\n | summarize avgDurationMs=avg(DurationMs) by FQMethod;\n//calculate difference, and take top 10 of the methods\nlet Difference = \n BeginningOfPeriod\n | join kind=leftouter EndOfPeriod on $left.FQMethod == $right.FQMethod\n | extend Difference = avgDurationMs1 - avgDurationMs\n | order by Difference desc\n | take 10;\n//Result, getting methods only\ntraces\n| where timestamp between (_startTime .. _endTime)\n| where tostring(customDimensions.eventId) == \"ALIFCTST0003\"\n| extend\n codeunitId = tostring(customDimensions.alCodeunitId)\n , MethodName = tostring(customDimensions.alMethodName)\n , NoOfSqlStatements = toint(customDimensions.alNoOfSQLStatements)\n , DurationMs = toint(customDimensions.alDurationMs)\n| join kind = leftouter codeunitNames on $left.codeunitId == $right.codeunitId\n| extend FQMethod = strcat(codeunitName,'.',MethodName)\n| join kind=rightouter Difference on $left.FQMethod == $right.FQMethod\n| project timestamp, FQMethod, DurationMs\n| summarize avgDurationMs=avg(DurationMs) by bin(timestamp, 1d), FQMethod\n| order by FQMethod", "id": "25f17751-f5dc-4dab-bd5a-d7d1b2245651", "usedVariables": [ "_MessageFilter", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by MeasuredFunction, bin(timestamp, 1d)", "id": "90dd1926-a783-4791-a3e7-4cda1259a880", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, bin(timestamp, 1d)", "id": "5b074ac6-c466-4861-b238-3388d109d8be", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by tenantDescription, bin(timestamp, 1d)", "id": "e7e68af4-d123-422e-a977-629abd62c220", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by MeasuredFunction, bin(timestamp, 1d)", "id": "1a035615-d4c2-4b6b-96f2-95e1e468d97a", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, bin(timestamp, 1h)", "id": "2f0d93be-6d44-4c00-be29-4e9a3c05996e", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by tenantDescription, bin(timestamp, 1h)", "id": "e63b92e0-e264-4640-89c8-85853a80d6c2", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = message\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by tenantDescription ", "id": "c2be5383-6dd7-4c76-bdf4-975db41f0aa2", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, bin(timestamp, 1h)", "id": "3a380f88-461e-4780-9c1f-560b2eec5f47", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where timestamp between (_endTime - 24h .. _endTime)\n| where itemType == 'pageView'\n| where name !in (\"Dialog\")\n| where customDimensions has \"Item List\"\n| summarize toint(avg(duration)) by bin(timestamp, 1h), tenantDescription\n// | project Page = name, count_, avgDuration, totalWaitTime = count_ * avgDuration", "id": "382e0f83-65de-48a6-8066-fad07605c186", "usedVariables": [ "_endTime", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - by Source Process\n\nallTraces\n| where customDimensions.eventId == 'RT0028'\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n , ObjectId = tostring(customDimensions.alObjectId)\n , ObjectName = tostring(customDimensions.alObjectName)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\")\n , EventId = tostring(customDimensions.eventId)\n , StackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| extend operationType = case(\n sqlStatement startswith \"UPDATE\", \"UPDATE\"\n , sqlStatement startswith \"DELETE\", \"DELETE\"\n , sqlStatement startswith \"BeginTransaction\", \"BEGIN_TRANS\"\n , sqlStatement matches regex \"INSERT INTO\", \"INSERT\"\n , sqlStatement startswith \"SELECT\", \"SELECT\"\n , sqlStatement matches regex \"IF EXISTS \\\\(SELECT (.*)\\\\) SELECT\", \"SELECT'\"\n , sqlStatement has \"SELECT NEXT VALUE FOR\", \"SELECT_SEQUENCE_VALUE\"\n , sqlStatement has \"SELECT @@SPID\", \"SELECT_SPID\"\n , sqlStatement matches regex \"(.*)WITH\", \"SELECT\"\n , sqlStatement startswith \"CREATE TABLE\", \"CREATE_TABLE\"\n , sqlStatement startswith \"ALTER TABLE\", \"ALTER_TABLE\"\n , sqlStatement startswith \"exec sp_rename\", \"RENAME_TABLE\" \n , sqlStatement matches regex \"(.*)DROP TABLE\", \"DROP_TABLE\"\n , sqlStatement startswith \"SET LOCK_TIMEOUT\", \"SET_LOCK_TIMEOUT\"\n , sqlStatement has \"sp_getapplock\", \"GET_APP_LOCK\"\n , \"UNKNOWN\"\n ) \n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = tostring(splitStacktrace[0]),\n bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , LockingObject = strcat(topOfStackObjectType, \" '\", topOfStackObjectName,\"'\")\n , LockingObjectId = tostring(topOfStackObjectId)\n , LockingObjectMethod = tostring(topOfStackWhatWasCalled)\n , LockingObjectExtension = tostring(topOfStackExtensionName)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| project\n timestamp,\n aadTenantId,\n companyName,\n ObjectType,\n ObjectId,\n ObjectName,\n operationType,\n numberOfJoins,\n LockingObject,\n LockingObjectId,\n LockingObjectMethod,\n LockingObjectExtension, \n SourceProcess,\n StackTrace,\n customDimensions,\n componentVersion, \n tenantDescription\n| extend componentVersion = extract(\"^(\\\\d+\\\\.\\\\d+)\",1,componentVersion)\n| summarize count = count() by companyName, componentVersion\n| summarize toint(avg(count)) by componentVersion\n| order by componentVersion\n\n\n", "id": "464393ec-8e6b-4075-826a-c917af96f9b5", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( componentVersion)\n| where isnotempty( environmentType)\n| where isnotempty( companyName)\n| where companyName contains _CompanyFilter\n| where environmentType <> 'Sandbox'\n| where extensionPublisher == 'Microsoft'\n| summarize count(), componentVersion = max(componentVersion), appVersion = max(extensionVersion) by aadTenantId,tenantDescription, environmentType, companyName\n| project companyName, tenantDescription, componentVersion, appVersion, aadTenantId, count_", "id": "3b6ea8da-80f3-428e-b95d-8f3cfe5412f1", "usedVariables": [ "_CompanyFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( extensionPublisher)\n| summarize by tenantDescription, extensionName, extensionPublisher, extensionVersion, componentVersion\n", "id": "2305c046-8d01-4ae0-894b-ed480558fb55", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(extensionPublisher)\n| summarize by tenantDescription, extensionPublisher\n| summarize count() by extensionPublisher\n| order by count_ desc ", "id": "49fbf399-72a3-4621-a134-305a10e5f93f", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(extensionName)\n| summarize by tenantDescription, extensionName\n| summarize count() by extensionName\n| order by count_ desc ", "id": "66011cc7-10e0-4c13-a431-3f19d5348460", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventArea == 'Extension Lifecycle'\n| extend extensionDestinationVersion = tostring(customDimensions.extensionDestinationVersion)\n| extend status = iif(message contains \"fail\",\"Fail\",\"Success\")\n| order by timestamp desc \n| project timestamp, tenantDescription, eventDescription, status, extensionName, extensionPublisher, extensionDestinationVersion, customDimensions\n| take 1000\n\n", "id": "6f51e34f-3605-4dcb-90c5-e86bc0de8ac6", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventArea == 'Extension Lifecycle'\n| extend extensionDestinationVersion = tostring(customDimensions.extensionDestinationVersion)\n| extend status = iif(message contains \"fail\",\"Fail\",\"Success\")\n| order by timestamp desc \n| summarize count() by tenantDescription, eventId, status\n\n", "id": "62f1a28d-0550-49a5-8d6d-bb3400508200", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventArea == 'Extension Lifecycle'\n| extend extensionDestinationVersion = tostring(customDimensions.extensionDestinationVersion)\n| extend status = iif(message contains \"fail\",\"Fail\",\"Success\")\n| where status == \"Fail\"\n| order by timestamp desc \n| project timestamp, tenantDescription, eventDescription, status, extensionName, extensionPublisher, extensionDestinationVersion, customDimensions\n| take 1000\n\n", "id": "3708a55c-05f0-4c85-82b1-e8f5304567a0", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventArea == 'Extension Lifecycle'\n| extend status = iif(message contains \"fail\",\"Fail\",\"Success\")\n| summarize count() by bin(timestamp,12h), eventDescription, status, tenantDescription\n\n", "id": "b634fa6e-6e9e-4d4f-9d38-6e21d18e04ff", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.sqlStatement) //Anything with sqlStatement\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| summarize avg(elapsedTimeInMS) by bin(timestamp, 3h), tenantDescription", "id": "53e53c0a-81f9-40e6-8647-9ab885987397", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(customDimensions.eventId)\n| extend eventId = tostring(customDimensions.eventId)\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", //String manipulation \n iif(eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend status = //String manipulation \n iif(shortMessage has_any (\"called\",\"executed\",\"succeeded\",\"rendered\",\"successfully\",\"success\",\"opened\", \"added\", \"started\", \"finished\", \"Used\",\"enqueued\"),\"success\",\n iif(shortMessage has_any (\"error\",\"fail\",\"failed\",\"deadlock\",\"timed out\"), \"error\",\n iif(shortMessage has_any (\"exceeded\"),'too slow',\n \"unknown\")))\n| summarize count = count() by tostring(eventId), tostring(shortMessage), status\n| order by ['count'] desc\n", "id": "e3ec6fd6-07b8-45ed-8f2b-9e46c1803354", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// DeadLocks - By Day\n\nallTraces\n| where customDimensions has 'RT0028'\n| where customDimensions.eventId == 'RT0028'\n| where isnotempty(customDimensions.aadTenantId) // filter away signal from Docker sandboxes\n| where customDimensions.alObjectId != '0' \n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n    , ObjectId = tostring(customDimensions.alObjectId)\n    , ObjectName = tostring(customDimensions.alObjectName)\n    , sqlStatement = tostring(customDimensions.sqlStatement)\n    , numberOfJoins = countof(tostring(customDimensions.sqlStatement), \"JOIN\") \n    , stackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| where ObjectName contains _sourceObjectFilter\n| parse kind=regex sqlStatement with selectPart: string \"FROM \" tablename: string\n| summarize count = count() by bin(timestamp, 1d), companyName\n", "id": "267372af-e439-4e58-aa3d-43c1b0735787", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n| project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| order by timestamp desc\n| take 1000\n", "id": "d857e211-942a-48a9-a052-43aef3fad405", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n// | project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count(), toint(avg(elapsedTimeInMS)) by tenantDescription, extensionName, endpoint\n", "id": "02117133-7e01-4a58-acc6-c75a81367208", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n// | project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count(), toint(avg(elapsedTimeInMS)) by extensionName\n", "id": "9b3dc971-a821-4ebc-bab4-ef5aca1dbc17", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n// | project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count(), toint(avg(elapsedTimeInMS)) by extensionName\n", "id": "241a37dc-18da-493a-bf21-20cd0feb11df", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n// | project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count(), toint(avg(elapsedTimeInMS)) by companyName = strcat(tenantDescription, \".\", companyName)\n| order by avg_elapsedTimeInMS desc \n| take 15\n", "id": "2ecf90e4-fda9-430e-8e98-4d9c43a41f62", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n// | project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count(), toint(avg(elapsedTimeInMS)) by companyName = strcat(tenantDescription, \".\", companyName)\n| order by count_ desc \n| take 15\n", "id": "e66504a7-fa3e-4b22-ac91-ee67d4f90f84", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions has 'RT0013'\n| where customDimensions.eventId == 'RT0013'\n| project timestamp\n, aadTenantId = customDimensions.aadTenantId\n, environmentType = customDimensions.environmentType\n, environmentName = customDimensions.environmentName\n, companyName = customDimensions.companyName\n, snapshotId = customDimensions.snapshotId\n, clientTypeHoldingLock = customDimensions.clientType\n, alObjectTypeHoldingLock = customDimensions.alObjectType\n, alObjectIdHoldingLock = customDimensions.alObjectId\n, alObjectNameHoldingLock = customDimensions.alObjectName\n, alStackTraceHoldingLock = customDimensions.alStackTrace\n, extensionNameHoldingLock = customDimensions.extensionName\n, extensionIdHoldingLock = customDimensions.extensionId\n, extensionVersionHoldingLock = customDimensions.extensionVersion\n, extensionPublisherHoldingLock = customDimensions.extensionPublisher\n, sqlTableLocked = customDimensions.sqlTableName\n, sqlLockResourceType = customDimensions.sqlLockResourceType\n, sqlLockRequestMode = customDimensions.sqlLockRequestMode\n, sqlLockRequestStatus = customDimensions.sqlLockRequestStatus\n, sqlServerSessionId = customDimensions.sqlServerSessionId\n, alSessionIdHoldingLock = customDimensions.sessionId\n| summarize count() by tostring(sqlTableLocked), tostring(sqlLockResourceType), tostring(sqlLockRequestMode), tostring(sqlLockRequestStatus)", "id": "df666476-98c2-4ffd-a3ec-0d3e9d4eacd3", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions has \"Error\" or message has \"Error\"\n| order by timestamp desc \n| project\n timestamp\n , tenantDescription\n , aadTenantId\n , companyName\n , message\n , customDimensions", "id": "d9349cf1-5256-4343-b09e-2541ffa76a97", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions contains \"fail\" \n or customDimensions contains \"error\"\n or customDimensions contains \"not succ\"\n| where message !startswith \"Task\"\n| extend ErrorMessage = tostring(customDimensions.alErrorMessage)\n| summarize count() by tenantDescription, companyName, eventId, message, ErrorMessage\n", "id": "0db3c8d9-eadb-4514-921e-57ee7ab0a89a", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions contains \"fail\" \n or customDimensions contains \"error\"\n or customDimensions contains \"not succ\"\n| where message !startswith \"Task\"\n// | project customDimensions\n| summarize count() by bin(timestamp, 1d), tenantDescription, companyName\n", "id": "fbb87685-34b5-4d59-bebf-ec6709696787", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Orphans Problems!\n\nallTraces\n| where timestamp between (_endTime - 1d .. _endTime)\n| where environmentName !contains \"QA\"\n| where environmentName !contains \"TRAINING\"\n| where tostring(customDimensions.eventId) in (\"ALIFCTLM0003\", \"ALIFCTLM0005\")\n| extend NoOfOrphans = toint(customDimensions.alNoOfOrphans)\n| summarize NoOfOrphans = toint(avg(NoOfOrphans)) by bin(timestamp, 1d), tenantDescription , companyName, message, environmentName\n| project NoOfOrphans, tenantDescription, message, companyName,environmentName\n| order by NoOfOrphans desc \n", "id": "47aab107-a91a-4afa-bb28-4f80c2a6ca37", "usedVariables": [ "_endTime", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Orphans Problems!\n\nallTraces\n| where tostring(customDimensions.eventId) in (\"ALIFCTLM0003\", \"ALIFCTLM0005\")\n| extend NoOfOrphans = toint(customDimensions.alNoOfOrphans)\n| project timestamp, tenantDescription, message, NoOfOrphans\n| summarize NoOfOrphans = toint(avg(NoOfOrphans)) by bin(timestamp, 1d), tenantDescription, message\n| order by timestamp desc\n", "id": "d7c9ee94-2105-422c-a132-680d2d03ca5e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "//Orphans\n\nallTraces\n| where tostring(customDimensions.eventId) in (\"ALIFCTLM0003\", \"ALIFCTLM0004\", \"ALIFCTLM0005\", \"ALIFCTLM0006\")\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n| project timestamp, tenantDescription, environmentName, companyName, message\n| order by timestamp desc\n", "id": "ae0c55e3-b8ba-4828-8f92-735a469c4783", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId contains \"ALIFCTLM0011\"\n| extend ApplyToAllRecords = customDimensions.alRetentionApplyToAllRecords\n| extend Manual = customDimensions.alRetentionManual\n| extend Enabled = customDimensions.alRetentionEnabled\n| extend DateFieldName = customDimensions.alRetentionDateFieldName\n| extend TableName = customDimensions.alRetentionTableName\n| extend TableId = customDimensions.alRetentionTableId\n| extend DateFieldNo = customDimensions.alRetentionDateFieldNo\n| project timestamp\n , aadTenantId\n , tenantDescription\n , companyName\n , TableId\n , TableName\n , Enabled\n , Manual\n , DateFieldNo\n , DateFieldName\n , ApplyToAllRecords", "id": "6edf2a9a-0436-4169-b825-5630c8f819fd", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| where IsSaas in (_IsSaaS)\n| where message contains _MessageFilter\n| where aadTenantId has_any (_entraTenantId)\n| where customDimensions has _customDimensionsContains\n| where environmentName in (_environmentName)\n| where companyName contains _CompanyFilter\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| where timestamp >= ago(10d)\n| where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n| extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n| where AppName has_any (_extensionName)\n| where AppPublisher has_any (_extensionPublisher)\n| where AppPublisher startswith _componentVersionFilter\n| summarize max(AppVersion) by tenantDescription, aadTenantId, AppId, AppPublisher, AppName\n| project tenantDescription, aadTenantId, AppName, AppPublisher, max_AppVersion, AppId\n| order by tenantDescription, aadTenantId, AppPublisher, AppName asc \n ", "id": "92d795de-d0d3-4e33-b884-2bb1292b9609", "usedVariables": [ "_CompanyFilter", "_IsSaaS", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_entraTenantId", "_environmentName", "_extensionName", "_extensionPublisher", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let MaxVersionPerAppSaaS=\n traces\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n, companyName = tostring(customDimensions.companyName)\n | where IsSaas == true\n | where message contains _MessageFilter\n | where aadTenantId has_any (_entraTenantId)\n | where customDimensions has _customDimensionsContains\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | where tenantDescription has_any (_TenantDescription)\n | where timestamp >= ago(10d)\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n | where AppName has_any (_extensionName)\n | where AppPublisher has_any (_extensionPublisher)\n | where AppPublisher startswith _componentVersionFilter\n | summarize max(AppVersion) by AppId, AppPublisher, AppName\n | project AppName, AppPublisher, MaxVersionSaaS = max_AppVersion, AppId;\nlet MaxVersionPerAppOnPrem=\n traces\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n, companyName = tostring(customDimensions.companyName)\n | where IsSaas == false\n | where message contains _MessageFilter\n | where aadTenantId has_any (_entraTenantId)\n | where customDimensions has _customDimensionsContains\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | where tenantDescription has_any (_TenantDescription)\n | where timestamp >= ago(10d)\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n | where AppName has_any (_extensionName)\n | where AppPublisher has_any (_extensionPublisher)\n | where AppPublisher startswith _componentVersionFilter\n | summarize max(AppVersion) by AppId, AppPublisher, AppName\n | project AppName, AppPublisher, MaxVersionOnPrem = max_AppVersion, AppId;\nMaxVersionPerAppSaaS\n| join kind=fullouter MaxVersionPerAppOnPrem on $left.AppId == $right.AppId\n| project AppName, AppPublisher, MaxVersionSaaS, MaxVersionOnPrem, AppId;\n\n\n", "id": "156dccee-adfc-4517-b239-fdf1c22964e2", "usedVariables": [ "_CompanyFilter", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_entraTenantId", "_environmentName", "_extensionName", "_extensionPublisher", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let MaxVersionPerAppSaaS=\n traces\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas == true\n | where message contains _MessageFilter\n | where aadTenantId has_any (_entraTenantId)\n | where customDimensions has _customDimensionsContains\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | where tenantDescription has_any (_TenantDescription)\n | where timestamp >= ago(10d)\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n | where AppName has_any (_extensionName)\n | where AppPublisher has_any (_extensionPublisher)\n | where AppPublisher startswith _componentVersionFilter\n | summarize max(AppVersion) by AppId, AppPublisher, AppName, IsSaas\n | project AppName, AppPublisher, max_AppVersion, AppId, IsSaas;\nlet MaxVersionPerAppOnPrem=\n traces\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas == false\n | where message contains _MessageFilter\n | where aadTenantId has_any (_entraTenantId)\n | where customDimensions has _customDimensionsContains\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | where tenantDescription has_any (_TenantDescription)\n | where timestamp >= ago(10d)\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n | where AppName has_any (_extensionName)\n | where AppPublisher has_any (_extensionPublisher)\n | where AppPublisher startswith _componentVersionFilter\n | summarize max(AppVersion) by AppId, AppPublisher, AppName, IsSaas\n | project AppName, AppPublisher, max_AppVersion, AppId, IsSaas;\nlet AllAppsMaxVersion =\n MaxVersionPerAppSaaS\n | union MaxVersionPerAppOnPrem\n | project AppName, AppPublisher, max_AppVersion, AppId, IsSaas;\ntraces\n| where timestamp >= ago(10d)\n| where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n| extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n ,environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| where IsSaas in (_IsSaaS)\n| join kind=leftouter AllAppsMaxVersion on $left.AppId == $right.AppId, $left.IsSaas == $right.IsSaas\n| where tostring(AppVersion) != tostring(max_AppVersion)\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n| where message contains _MessageFilter\n| where aadTenantId has_any (_entraTenantId)\n| where customDimensions has _customDimensionsContains\n| where environmentName in (_environmentName)\n| where companyName contains _CompanyFilter\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| where AppName has_any (_extensionName)\n| where AppPublisher has_any (_extensionPublisher)\n| where AppPublisher startswith _componentVersionFilter\n| summarize AppVersion = max(AppVersion) by tenantDescription, AppId, AppPublisher, AppName, max_AppVersion, IsSaas\n| project tenantDescription, AppName, AppPublisher, AppVersion, max_AppVersion, AppId, IsSaas\n// | order by tenantDescription, AppPublisher, AppName asc \n ", "id": "e1d2b7c2-213c-44fc-8db9-659267a34a73", "usedVariables": [ "_CompanyFilter", "_IsSaaS", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_entraTenantId", "_environmentName", "_extensionName", "_extensionPublisher", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let AllAppsMaxVersion =\ntraces\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where message contains _MessageFilter\n | where aadTenantId has_any (_entraTenantId)\n | where customDimensions has _customDimensionsContains\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | where timestamp >= ago(10d)\n | extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n | where AppName has_any (_extensionName)\n | where AppPublisher has_any (_extensionPublisher)\n | where AppPublisher startswith _componentVersionFilter\n | summarize max(AppVersion) by AppId, AppPublisher, AppName\n | project AppName, AppPublisher, max_AppVersion, AppId\n | order by AppPublisher, AppName asc\n;\ntraces\n| where timestamp >= ago(10d)\n| where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n| extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| where IsSaas in (_IsSaaS)\n| join kind=leftouter AllAppsMaxVersion on $left.AppId == $right.AppId\n| where tostring(AppVersion) != tostring(max_AppVersion)\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n| where message contains _MessageFilter\n| where aadTenantId has_any (_entraTenantId)\n| where customDimensions has _customDimensionsContains\n| where environmentName in (_environmentName)\n| where companyName contains _CompanyFilter\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| where AppName has_any (_extensionName)\n| where AppPublisher has_any (_extensionPublisher)\n| where AppPublisher startswith _componentVersionFilter\n| summarize AppVersion = max(AppVersion) by tenantDescription, AppId, AppPublisher, AppName, max_AppVersion, IsSaas\n| summarize count() by tenantDescription, IsSaas\n// | project tenantDescription, AppName, AppPublisher, AppVersion, max_AppVersion, AppId\n// | order by tenantDescription, AppPublisher, AppName asc \n ", "id": "409d4287-a850-4837-a336-7549d34569bb", "usedVariables": [ "_CompanyFilter", "_IsSaaS", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_entraTenantId", "_environmentName", "_extensionName", "_extensionPublisher", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let period = ago(10d);\nlet allCompanies = \n traces\n | where timestamp >= period\n | extend \n aadTenantId = tostring(customDimensions.aadTenantId),\n componentVersion = tostring(customDimensions.componentVersion),\n environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n | extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where isnotempty(companyName) and isnotempty(aadTenantId) and isnotempty( componentVersion)\n | summarize by companyName, aadTenantId, componentVersion, IsSaas\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | project tenantDescription, companyName, aadTenantId, IsSaas, componentVersion;\nlet allCompaniesWithAppInfo = \n traces\n | where timestamp >= period\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n aadTenantId = tostring(customDimensions.aadTenantId),\n componentVersion = tostring(customDimensions.componentVersion),\n environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n | extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where isnotempty(companyName) and isnotempty(aadTenantId)and isnotempty( componentVersion)\n | summarize by companyName, aadTenantId, componentVersion, IsSaas\n | extend HasAppInfo = true;\nallCompanies\n| join kind=fullouter allCompaniesWithAppInfo on $left.aadTenantId == $right.aadTenantId\n| where isempty(HasAppInfo)\n| summarize max(componentVersion) by tenantDescription, companyName, IsSaas\n| order by tenantDescription, companyName asc \n", "id": "c5a6167f-4a6d-4563-bb73-31fb1e13d401", "usedVariables": [ "_IsSaaS", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let period = ago(10d);\nlet allCompanies = \n traces\n | where timestamp >= period\n | extend \n aadTenantId = tostring(customDimensions.aadTenantId),\n componentVersion = tostring(customDimensions.componentVersion),\n environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n | extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where isnotempty(companyName) and isnotempty(aadTenantId) and isnotempty( componentVersion)\n | summarize by companyName, aadTenantId, componentVersion, IsSaas\n | join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n | project tenantDescription, companyName, aadTenantId, componentVersion, IsSaas;\nlet allCompaniesWithAppInfo = \n traces\n | where timestamp >= period\n | where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n | extend \n aadTenantId = tostring(customDimensions.aadTenantId),\n componentVersion = tostring(customDimensions.componentVersion),\n environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n | extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where isnotempty(companyName) and isnotempty(aadTenantId)and isnotempty( componentVersion)\n | summarize by companyName, aadTenantId, componentVersion, IsSaas\n | extend HasAppInfo = true;\nallCompanies\n| join kind=fullouter allCompaniesWithAppInfo on $left.aadTenantId == $right.aadTenantId\n| where isempty(HasAppInfo)\n| summarize max(componentVersion) by tenantDescription, IsSaas\n| order by tenantDescription asc \n", "id": "ccbe9f52-76c1-4d5f-b704-0b28da2e56b6", "usedVariables": [ "_IsSaaS", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions has 'RT0013'\n| where customDimensions.eventId == 'RT0013'\n| project timestamp\n, aadTenantId = tostring(customDimensions.aadTenantId)\n, environmentType = tostring(customDimensions.environmentType)\n, environmentName = tostring(customDimensions.environmentName)\n, snapshotId = tostring(customDimensions.snapshotId)\n, clientTypeHoldingLock = tostring(customDimensions.clientType)\n, alObjectTypeHoldingLock = tostring(customDimensions.alObjectType)\n, alObjectIdHoldingLock = tostring(customDimensions.alObjectId)\n, alObjectNameHoldingLock = tostring(customDimensions.alObjectName)\n, alStackTraceHoldingLock = tostring(customDimensions.alStackTrace)\n, extensionNameHoldingLock = tostring(customDimensions.extensionName)\n, extensionIdHoldingLock = tostring(customDimensions.extensionId)\n, extensionVersionHoldingLock = tostring(customDimensions.extensionVersion)\n, extensionPublisherHoldingLock = tostring(customDimensions.extensionPublisher)\n, sqlTableLocked = tostring(customDimensions.sqlTableName)\n, sqlLockResourceType = tostring(customDimensions.sqlLockResourceType)\n, sqlLockRequestMode = tostring(customDimensions.sqlLockRequestMode)\n, sqlLockRequestStatus = tostring(customDimensions.sqlLockRequestStatus)\n, sqlServerSessionId = tostring(customDimensions.sqlServerSessionId)\n, alSessionIdHoldingLock = tostring(customDimensions.sessionId)\n| summarize by snapshotId, alObjectTypeHoldingLock, alObjectNameHoldingLock, alStackTraceHoldingLock\n| summarize count() by alStackTraceHoldingLock \n| order by count_ desc ", "id": "36ae9368-3592-4b87-a4ec-bbc26b0d2af0", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId contains \"ALIFCTLM0011\"\n| extend ApplyToAllRecords = customDimensions.alRetentionApplyToAllRecords\n| extend Manual = customDimensions.alRetentionManual\n| extend Enabled = tobool(customDimensions.alRetentionEnabled)\n| extend DateFieldName = customDimensions.alRetentionDateFieldName\n| extend TableName = tostring(customDimensions.alRetentionTableName)\n| extend TableId = toint(customDimensions.alRetentionTableId)\n| extend DateFieldNo = customDimensions.alRetentionDateFieldNo\n| project timestamp\n , aadTenantId\n , tenantDescription\n , companyName\n , TableId\n , TableName\n , Enabled\n , Manual\n , DateFieldNo\n , DateFieldName\n , ApplyToAllRecords\n| summarize count() by TableId, TableName, Enabled", "id": "f936020b-21fc-4347-b261-bffd0b89445a", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId contains \"ALIFCTLM0010\"\n| extend FeatureCompanyStatus = customDimensions.alFeatureCompanyStatus\n| extend FeatureEnabled = customDimensions.alFeatureEnabled\n| extend FeatureID = customDimensions.alFeatureID\n| extend FeatureIsOneWay = customDimensions.alFeatureIsOneWay\n| extend FeatureMandatoryByVersion = customDimensions.alFeatureMandatoryByVersion\n| extend FeatureLearnMoreLink = customDimensions.alFeatureLearnMoreLink\n| extend FeatureDataUpdateRequired = customDimensions.alFeatureDataUpdateRequired\n| extend FeatureDescription = customDimensions.alFeatureDescription\n| extend FeatureMandatoryBy = customDimensions.alFeatureMandatoryBy\n| extend FeatureIsFullyEnabled = iif(FeatureCompanyStatus has_any (\"Uitgeschakeld\",\"Disabled\"),\"false\",\"true\")\n| project timestamp\n , aadTenantId\n , tenantDescription\n , FeatureEnabled\n , FeatureIsFullyEnabled\n , FeatureID\n , FeatureIsOneWay\n , FeatureMandatoryByVersion\n , FeatureLearnMoreLink\n , FeatureDataUpdateRequired\n , FeatureDescription\n , FeatureMandatoryBy\n , FeatureCompanyStatus\n\n\n\n\n\n\n\n", "id": "5a0b60c0-d61a-446b-90aa-b3079133be0e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\n \"LC0028\", //AppSource submission validation request started: {validationRequestId}\n \"LC0038\", //Diagnostic reported on AppSource submission validation request: {validationRequestId}\n \"LC0030\", //(Version, country-region) validation started: version {version}, country/region {countryRegion}\n \"LC0032\", //Extension validation started: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0034\", //Validation diagnostic reported: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0033\", //Extension validation completed successfully: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0037\", //Extension validation completed with failures: version {version}, country-region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0031\", //(Version, country-region) validation completed successfully: version {version}, country/region {countryRegion}\n \"LC0036\", //(Version, country-region) validation completed with failures: version {version}, country-region {countryRegion}\n \"LC0029\", //AppSource submission validation request completed successfully: {validationRequestId}\n \"LC0035\") //AppSource submission validation request completed with failures: {validationRequestId}\n| order by timestamp desc \n| take 1000\n| project\n timestamp\n , eventId\n , status = iif(message has_any (\"successfully\", \"started\"),\"Success\",\"Fail\")\n , message = substring(eventDescription, 0, indexof(eventDescription,\":\"))\n , extensionName\n , extensionPublisher\n , extensionVersion\n , customDimensions", "id": "3a68fe02-c46f-4f3e-8874-8e0ac0bd31fc", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\n \"LC0038\", //Diagnostic reported on AppSource submission validation request: {validationRequestId}\n \"LC0034\", //Validation diagnostic reported: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0037\", //Extension validation completed with failures: version {version}, country-region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0036\", //(Version, country-region) validation completed with failures: version {version}, country-region {countryRegion}\n \"LC0035\") //AppSource submission validation request completed with failures: {validationRequestId}\n| order by timestamp desc \n| take 1000\n| project\n timestamp\n , eventId\n , status = iif(message has_any (\"successfully\", \"started\"),\"Success\",\"Fail\")\n , message = substring(eventDescription, 0, indexof(eventDescription,\":\"))\n , extensionName\n , extensionPublisher\n , extensionVersion\n , customDimensions", "id": "a58ea2b4-7587-43e8-b641-9a2e4ae52537", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\n \"LC0038\", //Diagnostic reported on AppSource submission validation request: {validationRequestId}\n \"LC0034\") //Validation diagnostic reported: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n| order by timestamp desc \n| take 1000\n| project\n timestamp\n , eventId\n , extensionName\n , extensionPublisher\n , extensionVersion\n , diagnosticCode = tostring(customDimensions.diagnosticCode)\n , countryRegion = tostring(customDimensions.countryRegion)\n , version = tostring(customDimensions.version)\n , diagnosticSourceLocation = tostring(customDimensions.diagnosticSourceLocation)\n , diagnosticMessage = tostring(customDimensions.diagnosticMessage)\n , customDimensions\n\n\n", "id": "ebf4f780-c6e8-40c0-92a9-eb60e342c5b5", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId in (\n \"LC0028\", //AppSource submission validation request started: {validationRequestId}\n \"LC0038\", //Diagnostic reported on AppSource submission validation request: {validationRequestId}\n \"LC0030\", //(Version, country-region) validation started: version {version}, country/region {countryRegion}\n \"LC0032\", //Extension validation started: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0034\", //Validation diagnostic reported: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0033\", //Extension validation completed successfully: version {version}, country/region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0037\", //Extension validation completed with failures: version {version}, country-region {countryRegion} for extension {extensionName} version {extensionVersion} by {extensionPublisher} ({extensionId})\n \"LC0031\", //(Version, country-region) validation completed successfully: version {version}, country/region {countryRegion}\n \"LC0036\", //(Version, country-region) validation completed with failures: version {version}, country-region {countryRegion}\n \"LC0029\", //AppSource submission validation request completed successfully: {validationRequestId}\n \"LC0035\") //AppSource submission validation request completed with failures: {validationRequestId}\n| order by timestamp desc \n| take 1000\n| project\n timestamp\n , eventId\n , status = iif(message has_any (\"successfully\", \"started\"),\"Success\",\"Fail\")\n , message = substring(eventDescription, 0, indexof(eventDescription,\":\"))\n , extensionName\n , extensionPublisher\n , extensionVersion\n , customDimensions\n| summarize count() by eventId, message", "id": "7c4ebec2-e163-48b3-968d-31f065e36747", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0008'\n| extend endpoint = tostring(customDimensions.endpoint)\n, ObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 //the datatype for executionTime is timespan \n, totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 //the datatype for executionTime is timespan \n| where ObjectName contains _sourceObjectFilter\n| summarize avg(serverExecutionTimeInMS) by bin(timestamp, 1h), endpoint, tenantDescription //put endpoint and customer in the graph\n", "id": "b12fb281-9fac-4881-a19e-15af69700849", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize count(), toint(avg(elapsedTimeInMS)) by bin(timestamp, 1h), SourceProcess\n| extend totalTime = count_ * avg_elapsedTimeInMS\n| project timestamp, SourceProcess, count_\n| order by count_\n| take 75\n", "id": "35e1ae29-3692-48b1-ab2e-8c639eac7104", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n , componentVersion = tostring(customDimensions.componentVersion)\n| parse kind=regex sqlStatement with selectPart: string \"FROM \\\"SQLDATABASE\\\".dbo.\\\"CURRENTCOMPANY\\\\$\" tablename: string \"\\\\$\" space: string\n| extend splitStacktrace = split(customDimensions.alStackTrace, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend topOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, topOfStackline)\n| extend topOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, topOfStackline)\n| extend topOfStackLineNumber = extract(' line (\\\\d+)', 1, topOfStackline)\n| extend topOfStackExtensionName = case (\n isnotempty(topOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, topOfStackline),\n extract(' - (.+) by', 1, topOfStackline)\n )\n| extend topOfStackPublisher = extract('.+ by (.+)', 1, topOfStackline)\n| extend topOfStackWhatWasCalled = case(\n isnotempty(topOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, topOfStackline),\n isnotempty(topOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, topOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, topOfStackline)\n )\n| extend bottomOfStackObjectName = extract('\\\\\\\"?([^\\\\\\\"]+)\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectType = extract('\\\\(([a-zA-Z]+) \\\\d+\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackObjectId = extract('\\\\([a-zA-Z]+ (\\\\d+)\\\\)', 1, bottomOfStackline)\n| extend bottomOfStackLineNumber = extract(' line (\\\\d+)', 1, bottomOfStackline)\n| extend bottomOfStackExtensionName = case (\n isnotempty(bottomOfStackLineNumber), extract('line \\\\d+ - (.+) by', 1, bottomOfStackline),\n extract(' - (.+) by', 1, bottomOfStackline)\n )\n| extend bottomOfStackPublisher = extract('.+ by (.+)', 1, bottomOfStackline)\n| extend bottomOfStackWhatWasCalled = case(\n isnotempty(bottomOfStackLineNumber), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) line', 1, bottomOfStackline),\n isnotempty(bottomOfStackExtensionName), extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+) -(.+) by (.+)', 1, bottomOfStackline),\n extract('\\\\\\\"?[^\\\\\\\"]+\\\\\\\"?\\\\([a-zA-Z]+ \\\\d+\\\\).(.+)', 1, bottomOfStackline)\n )\n| extend SourceProcess = strcat(bottomOfStackWhatWasCalled , \" - \", bottomOfStackObjectType, \" \", bottomOfStackObjectId, \" \", bottomOfStackObjectName, \" (\", bottomOfStackExtensionName, \")\")\n , SlowObject = strcat(topOfStackWhatWasCalled , \" - \", topOfStackObjectType, \" \", topOfStackObjectId, \" \", topOfStackObjectName, \" (\", topOfStackExtensionName, \")\")\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend SlowObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where SlowObject contains _SlowObjectFilter\n| summarize count(), toint(avg(elapsedTimeInMS)) by bin(timestamp, 1h), SourceProcess\n| project timestamp, SourceProcess, avg_elapsedTimeInMS\n| order by avg_elapsedTimeInMS\n| take 75\n", "id": "5942b83f-de64-4960-b3c0-471170339111", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty(extensionName)\n| summarize by aadTenantId, extensionName, extensionPublisher\n| summarize count() by extensionName, extensionPublisher\n| order by count_ desc ", "id": "1e0bb7a9-5441-4e88-8365-913d8027e73d", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n , environmentName = tostring(customDimensions.environmentName)\n , companyName = tostring(customDimensions.companyName)\n| extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n| where message contains _MessageFilter\n| where aadTenantId has_any (_entraTenantId)\n| where customDimensions has _customDimensionsContains\n| where environmentName in (_environmentName)\n| where companyName contains _CompanyFilter\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| where timestamp >= ago(10d)\n| where customDimensions.eventId == \"ALIFCTLM0007\" //Daily Installed app report\n| extend \n AppVersion = tostring(customDimensions.alAppVersion)\n ,UserRole = tostring(customDimensions.alUserRole)\n ,AppId = tostring(customDimensions.alAppId)\n ,AppName = tostring(customDimensions.alAppName)\n ,AppPublisher = tostring(customDimensions.alAppPublisher)\n| where AppName has_any (_extensionName)\n| where AppPublisher has_any (_extensionPublisher)\n| where AppPublisher startswith _componentVersionFilter\n| order by timestamp desc \n| project timestamp, tenantDescription, companyName, AppName, AppPublisher, AppVersion, customDimensions\n\n\n\n", "id": "bbc5099c-b14d-4e54-aaa3-f9b679d9603e", "usedVariables": [ "_CompanyFilter", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_entraTenantId", "_environmentName", "_extensionName", "_extensionPublisher", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces \n| where message contains \"Job queue entry\"\n| extend eventId = tostring(customDimensions.eventId)\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", \n iif(eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend status = case(\n eventId == \"AL0000E25\", \"Started\",\n eventId == \"AL0000E24\", \"Enqueued\",\n eventId == \"AL0000E26\", \"Finished\",\n eventId == \"AL0000KZV\", \"Canceled\",\n eventId == \"AL0000HE7\", \"Failed\",\n eventId == \"AL0000JRG\", \"Failed\",\n \"Unknown\"\n)\n| summarize count() by eventId, status, shortMessage", "id": "8145cc87-908c-4657-af3f-5c8a738a951e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let allJobQueuesPreviousWeek = \ntraces //we don't want to have the default filters, therefore NO base query\n| where timestamp between (_endTime - 30d .. _endTime)\n| extend eventId = tostring(customDimensions.eventId)\n , aadTenantId = tostring(customDimensions.aadTenantId)\n , extensionName = tostring(customDimensions.extensionName)\n| where eventId has_any (_eventId)\n| join kind=leftouter entraTenantIdDescriptions on $left.aadTenantId == $right.entraTenantId\n| where tenantDescription has_any (_TenantDescription)\n| where customDimensions.eventId in ('AL0000E25', 'AL0000E24', 'AL0000I49')\n| summarize by jobQueueNamePreviously = tostring(customDimensions.alJobQueueObjectName)\n;\nlet allJobQueuesCurrentWeek = \nallTraces\n| summarize by jobQueueNameCurrent = tostring(customDimensions.alJobQueueObjectName)\n;\nallJobQueuesPreviousWeek\n| join kind=leftouter allJobQueuesCurrentWeek on $left.jobQueueNamePreviously == $right.jobQueueNameCurrent\n| where isempty(jobQueueNameCurrent)\n| project NotRunningJobQueue = tostring(jobQueueNamePreviously)", "id": "87b7d2f8-dde0-41b2-83e7-c4ab117d232f", "usedVariables": [ "_TenantDescription", "_endTime", "_eventId", "allTraces", "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces \n| where eventId in ('AL0000E25', 'AL0000E26')\n| where tostring(customDimensions.alJobQueueIsRecurring) == \"Yes\"\n| extend jobTaskId = tostring(customDimensions.alJobQueueScheduledTaskId), \n JobQueueObjectDescription = tostring(customDimensions.alJobQueueObjectDescription)\n| summarize startTime = minif(timestamp, customDimensions.eventId == \"AL0000E25\"), endTime = maxif(timestamp, customDimensions.eventId == \"AL0000E26\") by jobTaskId, JobQueueObjectDescription\n| extend processingTime = endTime - startTime\n| summarize avgProcessingTime = avg(processingTime) by JobQueueObjectDescription\n| order by avgProcessingTime desc \n| where isnotempty(JobQueueObjectDescription)", "id": "cf42eed6-133d-4402-96ba-c4be86292877", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let job_queue_errors = \nallTraces\n| where customDimensions has_any ('AL0000HE7','AL0000FNY','AL0000JRG')\n| project timestamp\n, tenantDescription\n, ObjectName = customDimensions.alJobQueueObjectName\n, ObjectDescription = customDimensions.alJobQueueObjectDescription\n, TaskId = tostring( customDimensions.alJobQueueScheduledTaskId )\n, stackTrace = customDimensions.alJobQueueStacktrace\n;\nlet task_scheduler_errors = \nallTraces\n| where customDimensions.eventId == 'LC0045'\n| project TaskId = tostring( customDimensions.taskId )\n, failureReason = tostring(customDimensions.failureReason)\n;\njob_queue_errors\n| join kind=leftouter task_scheduler_errors on $left.TaskId == $right.TaskId\n| summarize count = count() by tostring(ObjectDescription), tostring(ObjectName), tostring(failureReason), tostring(stackTrace)\n| where isnotempty(ObjectDescription)\n| order by count desc \n", "id": "285cd3d0-0d8f-4bd2-9b17-d6277545cb54", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let allLastOccurences = \nallTraces\n| where customDimensions contains 'LC0101'\n| summarize max(timestamp) by tenantDescription, environmentType, environmentName\n;\nallTraces\n| where customDimensions contains 'LC0101'\n| join kind=inner allLastOccurences \n\ton $left.timestamp == $right.max_timestamp, \n\t\t$left.tenantDescription == $right.tenantDescription, \n\t\t$left.environmentType == $right.environmentType, \n\t\t$left.environmentName == $right.environmentName\n| project \n timestamp,\n\ttenantDescription,\n environmentType = tostring(customDimensions.environmentType),\n\tenvironmentName = tostring(customDimensions.environmentName),\n\tenvironmentVersion = tostring(customDimensions.environmentVersion),\n\tcountryCode = tostring(customDimensions.countryCode),\n\tregisteredForUpdateOnOrAfterDateUtc = format_datetime(todatetime(customDimensions.registeredForUpdateOnOrAfterDateUtc),\"dd-MM-yyyy\"),\n\tsourceVersion = tostring(customDimensions.sourceVersion),\n\tdestinationVersion = tostring(customDimensions.destinationVersion),\n\tupdatePeriodStartDateUtc = format_datetime(todatetime(customDimensions.updatePeriodStartDateUtc),\"dd-MM-yyyy\"),\n\tupdatePeriodEndDateUtc = format_datetime(todatetime(customDimensions.updatePeriodEndDateUtc),\"dd-MM-yyyy\"),\n\tupdateWindowStartTimeUtc = customDimensions.updateWindowStartTimeUtc,\n\tupdateWindowEndTimeUtc = customDimensions.updateWindowEndTimeUtc,\n\tignoreUpdateWindow = tostring(customDimensions.ignoreUpdateWindow),\n\tupdateDateSelectedByPartner = tostring(customDimensions.updateDateSelectedByPartner),\n\tcanPartnerReschedule = tostring(customDimensions.canPartnerReschedule),\n\tcustomDimensions", "id": "2abb5755-ccc2-46b0-b322-fa0fdc04ecfb", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == \"RT0019\"\n| extend authenticationMethod = tostring(customDimensions.alAuthenticationMethod)\n, httpTimeout = tostring(customDimensions.alHttpTimeout)\n, endpoint = tostring(customDimensions.endpoint)\n, objectName = tostring(customDimensions.alObjectName)\n| project timestamp,tenantDescription, companyName, extensionName, extensionVersion, extensionPublisher, endpoint, objectName, toint(elapsedTimeInMS), authenticationMethod, httpTimeout, customDimensions\n| summarize count() by bin(timestamp, 1h), endpoint\n| order by timestamp desc\n| take 1000\n", "id": "c286083d-559b-4e83-a6ec-99144997f030", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId == 'ALIFCTLM0002'\n| extend Duration = toint(customDimensions.alDuration)\n , NoOfSqlStatements = toint(customDimensions.alNoSqlStatements)\n , MeasuredFunction = tostring(message)\n , TenantMeasuredFunction = strcat(tenantDescription,\".\",message)\n| where MeasuredFunction contains _MeasuredFunction\n| summarize count(), avgDuration = toint(avg(Duration)), avgNoSqlStatements = toint(avg(NoOfSqlStatements)) by TenantMeasuredFunction, bin(timestamp, 1h)", "id": "29bc714e-918a-48fd-aed2-419402e575ad", "usedVariables": [ "_MeasuredFunction", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "// Lock Timeouts - By Day\n\nallTraces\n| where eventId == 'RT0012'\n| where customDimensions.alObjectId != '0'\n| where isnotempty(customDimensions.alObjectId)\n| extend ObjectType = tostring(customDimensions.alObjectType)\n    , ObjectId = tostring(customDimensions.alObjectId)\n    , ObjectName = tostring(customDimensions.alObjectName)\n    , sqlStatement = tostring(customDimensions.sqlStatement)\n    , stackTrace = tostring(customDimensions.alStackTrace)\n , userId = user_Id\n| where ObjectName contains _sourceObjectFilter\n| summarize count = count() by bin(timestamp, 1h), tenantDescription\n", "id": "ded4b26f-83e2-4bc8-9956-655b5e3300b7", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions.eventId contains \"ALIFCTLM0011\"\n| extend ApplyToAllRecords = tostring(customDimensions.alRetentionApplyToAllRecords)\n| extend Manual = tostring(customDimensions.alRetentionManual)\n| extend Enabled = tostring(customDimensions.alRetentionEnabled)\n| extend DateFieldName = tostring(customDimensions.alRetentionDateFieldName)\n| extend TableName = tostring(customDimensions.alRetentionTableName)\n| extend TableId = tostring(customDimensions.alRetentionTableId)\n| extend DateFieldNo = tostring(customDimensions.alRetentionDateFieldNo)\n| project timestamp\n , aadTenantId\n , tenantDescription\n , companyName\n , TableId\n , TableName\n , Enabled\n , Manual\n , DateFieldNo\n , DateFieldName\n , ApplyToAllRecords\n| summarize by tenantDescription, companyName, TableName, Enabled, Manual, DateFieldName, ApplyToAllRecords\n| order by tenantDescription, companyName, TableName", "id": "08e7cacf-71ac-4927-ac9c-438d55bfd12a", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions has 'RT0013'\n| where customDimensions.eventId == 'RT0013'\n| project timestamp\n, aadTenantId = tostring(customDimensions.aadTenantId)\n, environmentType = tostring(customDimensions.environmentType)\n, snapshotId = tostring(customDimensions.snapshotId)\n, clientTypeHoldingLock = tostring(customDimensions.clientType)\n, alObjectTypeHoldingLock = tostring(customDimensions.alObjectType)\n, alObjectIdHoldingLock = tostring(customDimensions.alObjectId)\n, alObjectNameHoldingLock = tostring(customDimensions.alObjectName)\n, alStackTraceHoldingLock = tostring(customDimensions.alStackTrace)\n, extensionNameHoldingLock = tostring(customDimensions.extensionName)\n, extensionIdHoldingLock = tostring(customDimensions.extensionId)\n, extensionVersionHoldingLock = tostring(customDimensions.extensionVersion)\n, extensionPublisherHoldingLock = tostring(customDimensions.extensionPublisher)\n, sqlTableLocked = tostring(customDimensions.sqlTableName)\n, sqlLockResourceType = tostring(customDimensions.sqlLockResourceType)\n, sqlLockRequestMode = tostring(customDimensions.sqlLockRequestMode)\n, sqlLockRequestStatus = tostring(customDimensions.sqlLockRequestStatus)\n, sqlServerSessionId = tostring(customDimensions.sqlServerSessionId)\n, alSessionIdHoldingLock = tostring(customDimensions.sessionId)\n, customDimensions\n// | summarize by snapshotId, bin(timestamp,1h), sqlServerSessionId, alObjectTypeHoldingLock, alObjectNameHoldingLock, alStackTraceHoldingLock\n// | summarize count() by alObjectTypeHoldingLock, alObjectNameHoldingLock, alStackTraceHoldingLock \n| order by timestamp desc \n| take 100", "id": "9b006a62-69d4-4c4d-a6b2-943cb7895561", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( customDimensions.requestQueueTime)\n| extend endpoint = tostring(customDimensions.endpoint)\n, ObjectName = tostring(customDimensions.alObjectName)\n, serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 \n, totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 \n, requestQueueTimeInMS = toreal(totimespan(customDimensions.requestQueueTime))/10000\n| where requestQueueTimeInMS > 0\n| where ObjectName contains _sourceObjectFilter\n| summarize count(), avg(requestQueueTimeInMS) by bin(timestamp, 1h), endpoint, tenantDescription //put endpoint and customer in the graph\n\n\n// traces\n// | where isnotempty( customDimensions.requestQueueTime)\n// | extend decentMessage = iif(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))\n// , endpoint = tostring(customDimensions.endpoint)\n// , alObjectName = tostring(customDimensions.alObjectName)\n// , serverExecutionTime = tostring(customDimensions.serverExecutionTime)\n// , serverExecutionTimeInMS = toreal(totimespan(customDimensions.serverExecutionTime))/10000 \n// , totalTime = tostring(customDimensions.totalTime)\n// , totalTimeInMS = toreal(totimespan(customDimensions.totalTime))/10000 \n// , requestQueueTimeInMS = toreal(totimespan(customDimensions.requestQueueTime))/10000\n// | summarize count = count(), avgServerExecutionTimeInMS = avg(serverExecutionTimeInMS), avgTotalTimeInMs = avg(totalTimeInMS), avgRequestQueueTimeInMS = avg(requestQueueTimeInMS) by alObjectName \n// | project \n// alObjectName\n// , ['count']\n// , avgServerExecutionTimeInMS = round(avgServerExecutionTimeInMS,0)\n// , avgTotalTimeInMs = round(avgTotalTimeInMs, 0)\n// , ApproxTime = round(['count'] * avgServerExecutionTimeInMS,0)\n// | order by ApproxTime desc \n// | take 100", "id": "fec3e770-e41e-4fc1-a287-d738d4e563ce", "usedVariables": [ "_sourceObjectFilter", "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces \n| where message contains \"Job queue entry\"\n| extend eventId = tostring(customDimensions.eventId)\n| extend shortMessage = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", \n iif(eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend status = case(\n eventId == \"AL0000E25\", \"Started\",\n eventId == \"AL0000E24\", \"Enqueued\",\n eventId == \"AL0000E26\", \"Finished\",\n eventId == \"AL0000KZV\", \"Canceled\",\n eventId == \"AL0000HE7\", \"Failed\",\n eventId == \"AL0000JRG\", \"Failed\",\n \"Unknown\"\n)\n| summarize count() by bin(timestamp, 1h), eventId, status, shortMessage", "id": "6cf67486-f9a4-47c6-b8ba-0bf27e37d861", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces \n| where eventId in ('AL0000E25', 'AL0000E26')\n| where tostring(customDimensions.alJobQueueIsRecurring) == \"Yes\"\n| extend jobTaskId = tostring(customDimensions.alJobQueueScheduledTaskId), \n JobQueueObjectDescription = tostring(customDimensions.alJobQueueObjectDescription)\n| summarize startTime = minif(timestamp, customDimensions.eventId == \"AL0000E25\"), endTime = maxif(timestamp, customDimensions.eventId == \"AL0000E26\") by jobTaskId, JobQueueObjectDescription\n| extend processingTimeInMS = toreal(totimespan(endTime - startTime))/10000\n| where isnotempty( startTime)\n| summarize avgProcessingTimeInMS = avg(processingTimeInMS) by bin(startTime, 1h), JobQueueObjectDescription\n// | order by avgProcessingTime desc \n// | where isnotempty(JobQueueObjectDescription)", "id": "1f8c63b9-4045-40ae-b34d-77fb3ff4dcf9", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where eventId == 'RT0018'\n| where isnotempty( customDimensions.alStackTrace) //Anything with a stacktrace (Actionable)\n| where isnotempty( elapsedTimeInMS)\n| extend alObjectName = tostring(customDimensions.alObjectName)\n , alObjectType = tostring(customDimensions.alObjectType)\n , alObjectId = tostring(customDimensions.alObjectId)\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , sqlStatement = tostring(customDimensions.sqlStatement)\n| summarize avg(elapsedTimeInMS) by bin(timestamp, 3h), tenantDescription", "id": "695ba804-52f3-49f8-b5cd-e9f41bf3c6d9", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where isnotempty( clientType)\n| summarize by bin(timestamp, 1h), session_Id, clientType\n| summarize count() by bin(timestamp, 1h), clientType", "id": "43af85e9-b3d0-44ac-a125-89c684f6b07e", "usedVariables": [ "allTraces" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "allTraces\n| where customDimensions has 'RT0013'\n| where customDimensions.eventId == 'RT0013' //Look into the snapshot of the lock\n| project timestamp\n, operation_Id\n, session_Id\n, user_Id\n, aadTenantId = tostring(customDimensions.aadTenantId)\n, environmentType = tostring(customDimensions.environmentType)\n, environmentName = tostring(customDimensions.environmentName)\n, snapshotId = tostring(customDimensions.snapshotId)\n, clientTypeHoldingLock = tostring(customDimensions.clientType)\n, alObjectTypeHoldingLock = tostring(customDimensions.alObjectType)\n, alObjectIdHoldingLock = tostring(customDimensions.alObjectId)\n, alObjectNameHoldingLock = tostring(customDimensions.alObjectName)\n, alStackTraceHoldingLock = tostring(customDimensions.alStackTrace)\n, extensionNameHoldingLock = tostring(customDimensions.extensionName)\n, extensionIdHoldingLock = tostring(customDimensions.extensionId)\n, extensionVersionHoldingLock = tostring(customDimensions.extensionVersion)\n, extensionPublisherHoldingLock = tostring(customDimensions.extensionPublisher)\n, sqlTableLocked = tostring(customDimensions.sqlTableName)\n, sqlLockResourceType = tostring(customDimensions.sqlLockResourceType)\n, sqlLockRequestMode = tostring(customDimensions.sqlLockRequestMode)\n, sqlLockRequestStatus = tostring(customDimensions.sqlLockRequestStatus)\n, sqlServerSessionId = tostring(customDimensions.sqlServerSessionId)\n, alSessionIdHoldingLock = tostring(customDimensions.sessionId)\n, customDimensions\n| where isnotempty( alStackTraceHoldingLock)\n| extend splitStacktrace = split(alStackTraceHoldingLock, \"\\n\")\n| extend lengthStacktrace = array_length(splitStacktrace)\n| extend\n topOfStackline = iif(tostring(splitStacktrace[0]) contains \"ObjectType\", tostring(splitStacktrace[2]), tostring(splitStacktrace[0]))\n , bottomOfStackline = tostring(splitStacktrace[lengthStacktrace - 1])\n| extend SourceProcess = replace_string(bottomOfStackline,'AL CallStack: ','')\n , SlowObject = split(replace_string(topOfStackline,'AL CallStack: ',''),'line')[0]\n| extend SourceProcess = iif(strlen( SourceProcess) >= 10, SourceProcess, trim(@\"[^\\w]+\",strcat(splitStacktrace[0], \" \", splitStacktrace[1])))\n| extend LockingObject = iif(strlen( SlowObject) >= 10, SlowObject, SourceProcess)\n| where SourceProcess contains _sourceObjectFilter\n| where LockingObject contains _SlowObjectFilter\n| summarize count() by SourceProcess, LockingObject", "id": "a1a55452-a416-48af-887b-3edb086faba2", "usedVariables": [ "_SlowObjectFilter", "_sourceObjectFilter", "allTraces" ] }, { "id": "b19a2b7f-6d08-4f7f-b3ed-ce290cb93d82", "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "let SignalDefinitions = externaldata(eventId :string, eventArea:string, eventDescription:string)\n [h@'https://raw.githubusercontent.com/waldo1001/waldo.BCTelemetry/master/Azure%20Data%20Explorer/ExternalData/Signals.json']\n with(format='multijson')\n | where eventId has_any (_eventId); //Filter as soon as possible\nlet TempAllTraces = \ntraces\n | union pageViews //union\n | where timestamp between (_startTime .. _endTime) //take the parameters by default\n | where customDimensions has_any (_eventId)\n | where message contains _MessageFilter\n | where customDimensions has _customDimensionsContains\n | extend eventId = tostring(customDimensions.eventId) //extend fields that you would extend anyway\n , aadTenantId = tostring(customDimensions.aadTenantId)\n , extensionName = tostring(customDimensions.extensionName)\n , executionTime = customDimensions.executionTime\n , serverExecutionTime = customDimensions.serverExecutionTime\n , totalTime = customDimensions.totalTime\n , durations = customMeasurements.durations\n , alJobQueueExecutionTimeInMs = customDimensions.alJobQueueExecutionTimeInMs\n , extensionPublisher = tostring(customDimensions.extensionPublisher)\n , componentVersion = tostring(customDimensions.componentVersion)\n , companyName = tostring(customDimensions.companyName)\n // , companyName = strcat(tostring(hash(tostring(customDimensions.companyName))),'(obfuscated)')\n , callerAppVersion = tostring(customDimensions.alCallerAppVersion)\n , callerPublisher = tostring(customDimensions.alCallerPublisher)\n , callerAppName = tostring(customDimensions.alCallerAppName)\n , clientType = tostring(customDimensions.clientType)\n , extensionVersion = tostring(customDimensions.extensionVersion)\n , environmentName = tostring(customDimensions.environmentName)\n , environmentType = tostring(customDimensions.environmentType)\n | extend IsSaas = iff(isempty(environmentName) or environmentName in ('common','null','default','undefined'),false,true)\n | where IsSaas in (_IsSaaS)\n | where aadTenantId has_any (_entraTenantId)\n | where environmentName in (_environmentName)\n | where companyName contains _CompanyFilter\n | where extensionName has_any (_extensionName)\n | where extensionPublisher has_any (_extensionPublisher)\n | where eventId has_any (_eventId) //Filter as soon as possible\n | where componentVersion startswith _componentVersionFilter\n//New field: elapsedTimeInMS\n | extend elapsedTimeInMS = \n iif(isnotempty(executionTime), toreal(totimespan(executionTime))/10000\n , iif(isnotempty(serverExecutionTime), toreal(totimespan(serverExecutionTime))/10000\n , iif(isnotempty(totalTime), toreal(totimespan(totalTime))/10000\n , iif(isnotempty(durations), durations\n , iif(isnotempty( alJobQueueExecutionTimeInMs), alJobQueueExecutionTimeInMs\n , dynamic(null))))));\n//Join first 2 (small table on the left)\nlet TempAllTraces2 = \nentraTenantIdDescriptions\n| join kind=rightouter TempAllTraces on $left.entraTenantId == $right.aadTenantId;\n//Join next 2 (small table on the left)\nSignalDefinitions\n| join kind=rightouter TempAllTraces2 on $left.eventId == $right.eventId\n| extend tenantDescription = iif(isempty( tenantDescription),tostring(aadTenantId),tenantDescription)\n| where tenantDescription has_any (_TenantDescription)\n| where eventId has_any (_eventId) //Just in case\n| extend entraTenantId = tostring(aadTenantId)\n| extend message = iif(isnotempty( message), message, eventDescription)\n| extend eventId = iif(isempty(eventId), eventId1, eventId)\n| extend eventDescription = iif(isempty( eventDescription),message, eventDescription )", "usedVariables": [ "_CompanyFilter", "_IsSaaS", "_MessageFilter", "_TenantDescription", "_componentVersionFilter", "_customDimensionsContains", "_endTime", "_entraTenantId", "_environmentName", "_eventId", "_extensionName", "_extensionPublisher", "_startTime", "entraTenantIdDescriptions" ] }, { "id": "ba39f166-a4d3-48ea-bad0-db65876a054f", "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "datatable(entraTenantId :string, tenantDescription:string)\r\n[\r\n \"\",\"\" \r\n]", "usedVariables": [] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "externaldata(eventId :string, eventArea:string, eventDescription:string)\n [h@'https://raw.githubusercontent.com/waldo1001/waldo.BCTelemetry/master/Azure%20Data%20Explorer/ExternalData/Signals.json']\n with(format='multijson')\n| where eventDescription contains _MessageFilter\n| summarize by eventArea;", "id": "f5fbe50d-0893-4b88-9d18-0a9a40874da0", "usedVariables": [ "_MessageFilter" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where customDimensions.extensionPublisher <> 'Microsoft'\n| where isnotempty(customDimensions.extensionName)\n| extend extensionName = tostring(customDimensions.extensionName)\n| summarize by extensionName", "id": "2fdf22eb-61c7-4964-bc7e-49c7eb81c9c8", "usedVariables": [] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where isnotempty(customDimensions.extensionPublisher)\n| extend extensionPublisher = tostring(customDimensions.extensionPublisher)\n| summarize by extensionPublisher", "id": "79f1960d-e4a0-4ed3-8aca-fc0ec2aa2399", "usedVariables": [] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime)\n| where isnotempty(customDimensions.aadTenantId)\n| extend entraTenantId = tostring(customDimensions.aadTenantId)\n| summarize by entraTenantId\n| project entraTenantId", "id": "1af6d35a-92af-4520-a929-26af2d29ea09", "usedVariables": [ "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "entraTenantIdDescriptions", "id": "18cf1613-ca57-4d94-9d30-c2ffcafe5245", "usedVariables": [ "entraTenantIdDescriptions" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime)\n| extend aadTenantId = tostring(customDimensions.aadTenantId)\n| extend environmentName = tostring(customDimensions.environmentName)\n| summarize by environmentName;", "id": "a4426a6f-dfd5-43a4-b8fb-68c8cbb6da83", "usedVariables": [ "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where timestamp between (_startTime .. _endTime)\n| where isnotempty(customDimensions.eventId)\n| extend submsg = iif(substring(message, 0, 4) == \"Task\", \"Task Executed\", \n iif(customDimensions.eventId == \"AL0000JRG\", \"Job Queue Error\",\n iff(indexof(message, \":\") <= 0, message, substring(message, 0, indexof(message, \":\")))))\n| extend eventId = customDimensions.eventId\n , status = iif(submsg has \"called\" \n or submsg has \"executed\"\n or submsg has 'executed'\n or submsg has 'succeeded'\n or submsg has 'rendered'\n or submsg has 'successfully'\n or submsg has 'taken', \"success\",\n iif(submsg has \"error\"\n or submsg has 'fail'\n or submsg has 'failed'\n or submsg has 'deadlock'\n or submsg has 'timed out',\"error\",\n iif(message has 'exceeded', 'too slow',\n \"unknown\")))\n| where submsg contains _MessageFilter\n| extend eventDescription = strcat(\"(\",eventId,\") \",submsg)\n| summarize count = count() by tostring(eventId), tostring(eventDescription)\n| order by ['count'] desc\n", "id": "5793a15e-c4ad-4db1-9bca-0a3d11ea48cd", "usedVariables": [ "_MessageFilter", "_endTime", "_startTime" ] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.eventId == 'AL0000DGF'\n| where customDimensions.alOperation == 'Scenario'\n| extend CodeunitName = tostring(customDimensions.alCodeunitName)\n| summarize by CodeunitName\n", "id": "4c19c0ce-09a4-47c7-8c4d-a348af93b96a", "usedVariables": [] }, { "dataSource": { "kind": "inline", "dataSourceId": "05ae5610-5603-45ac-9458-616539c1c150" }, "text": "traces\n| where customDimensions has 'AL0000DGF'\n| where customDimensions.eventId == 'AL0000DGF'\n| extend tag = iif(customDimensions.alTag contains_cs \"PTE\", \"PTE\", \n iif(customDimensions.alTag contains \"Focus\", \"CustSpecific\"\n , tostring(customDimensions.alTag)))\n| summarize by tag", "id": "131192bf-b588-4e2a-95f1-851f8c5b2686", "usedVariables": [] } ] }