Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/gallery.json",
"galleryItems": [
{
"name": "Executive Performance & Failure Analysis",
"version": "1.0",
"description": "An executive-level dashboard for analyzing failures, performance trends, and baseline deviations across API operations.",
"templatePath": "workbook.json",
"author": "Kranthi Kumar Kharidu",
"tags": [
"Performance",
"Failures",
"Executive Dashboard",
"Application Insights",
"Azure Monitor"
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Executive Performance & Failure Analysis",
"description": "Executive dashboard for high-level analysis of failures, response times, and baseline deviations.",
"author": "Kranthi Kumar Kharidu",
"type": "Workbooks",
"category": "Failures"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,333 @@
{
"version": "Notebook/1.0",
"items": [
{
"type": 1,
"content": {
"json": "<h1 style='font-size:24px; font-weight:bold; text-align:center;'>{YOUR-APPNAME}_Executive_Performance_and_Failure_Analysis_Dashboard</h1><br>"
},
"name": "text - 0"
},
{
"type": 9,
"content": {
"version": "KqlParameterItem/1.0",
"parameters": [
{
"id": "84caf619-7585-48e0-a9c3-85c364aaa13b",
"version": "KqlParameterItem/1.0",
"name": "Show",
"type": 2,
"description": null,
"isRequired": true,
"query": "datatable(x:string, y:string)[\r\n\"['New Failure Rate (%)'], ['Existing Failure Rate (%)']\", 'New and Existing Failures',\r\n\"['New Failure Rate (%)']\", 'Only New Failures',\r\n\"['Existing Failure Rate (%)']\", 'Only Existing Failures',\r\n]",
"value": "['New Failure Rate (%)']",
"resourceType": "microsoft.insights/components"
},
{
"id": "6ab5c1cb-bad0-4d96-8e63-d439d0681c6e",
"version": "KqlParameterItem/1.0",
"name": "In",
"type": 2,
"description": null,
"isRequired": true,
"multiSelect": true,
"quote": "'",
"delimiter": ",",
"query": "requests\n| where timestamp >= ago(1d)\n| summarize Count = count() by operation_Name\n| order by Count desc\n| project v = operation_Name, t = operation_Name, s = false\n| union (datatable(v:string, t:string, s:boolean)[\n'*', 'All Operations', true\n])",
"resourceType": "microsoft.insights/components",
"value": [
"*"
]
},
{
"id": "eac9cbf1-6364-4f28-9c61-a9b038c035d7",
"version": "KqlParameterItem/1.0",
"name": "OverTimeRange",
"type": 4,
"isRequired": true,
"value": {
"durationMs": 86400000
},
"typeSettings": {
"selectableValues": [
{
"durationMs": 86400000
},
{
"durationMs": 259200000
},
{
"durationMs": 604800000
},
{
"durationMs": 1209600000
},
{
"durationMs": 2419200000
},
{
"durationMs": 2592000000
}
],
"allowCustom": true
}
},
{
"id": "6f0de137-0136-48f0-b463-640de7109c05",
"version": "KqlParameterItem/1.0",
"name": "UseComparisonTimeRangeOf",
"type": 1,
"isRequired": true,
"query": "let t = {OverTimeRange:seconds};\r\nlet w = case(t <= 86400, '7d', t <= 259200, '14d', t <= 120960, '28d', '60d');\r\nrange i from 1 to 1 step 1\r\n| project x = w",
"queryType": 0,
"resourceType": "microsoft.insights/components",
"value": "31d"
}
],
"style": "pills",
"queryType": 0,
"resourceType": "microsoft.insights/components"
},
"name": "parameters - 1"
},
{
"type": 1,
"content": {
"json": "\n# Application Failures Analysis\n"
},
"name": "text - 2"
},
{
"type": 9,
"content": {
"version": "KqlParameterItem/1.0",
"parameters": [
{
"id": "7a6716e6-3b5d-426b-a091-76e25325563a",
"version": "KqlParameterItem/1.0",
"name": "RequestFilters",
"type": 2,
"isRequired": true,
"multiSelect": true,
"quote": "'",
"delimiter": ",",
"query": "requests\r\n| where timestamp {OverTimeRange}\r\n| where operation_Name in ({In}) or '*' in ({In})\r\n| summarize Count = count(), Users = dcount(user_Id) by name\r\n| project v = name, t = name, s=false\r\n| union (datatable(v:string, t:string, s:boolean)[\r\n'*', 'All Requests', true\r\n])",
"typeSettings": {
"additionalResourceOptions": []
},
"queryType": 0,
"resourceType": "microsoft.insights/components",
"value": [
"*"
]
},
{
"id": "fa3ae272-8e65-4b87-a5a6-ef256a8a1956",
"version": "KqlParameterItem/1.0",
"name": "IncludeResultCodes",
"type": 2,
"isRequired": true,
"multiSelect": true,
"quote": "'",
"delimiter": ",",
"query": "datatable(x:string, y:string, z:boolean)[\r\n'@', 'All 500s', false,\r\n'#', 'All 400s', false\r\n]\r\n| union (requests\r\n| where timestamp {OverTimeRange}\r\n| where success == false\r\n| summarize by resultCode\r\n| order by resultCode asc\r\n| project x = resultCode, y = resultCode, z = false)",
"typeSettings": {
"additionalResourceOptions": [
"value::all"
],
"selectAllValue": "*",
"showDefault": false
},
"defaultValue": "value::all",
"queryType": 0,
"resourceType": "microsoft.insights/components",
"value": [
"value::all"
]
}
],
"style": "pills",
"queryType": 0,
"resourceType": "microsoft.insights/components"
},
"name": "parameters - 3"
},
{
"type": 1,
"content": {
"json": "# Failed Requests Volume - Trend Chart\nThis chart displays the total number of failed requests over time.\nIt differentiates between existing and newly observed failures within the last 24 hours, compared against the selected baseline period (e.g., 7 days).\n\n**Note: The numbers shown represent the total volume of failed requests, including repeated occurrences of the same issue.**\n"
},
"customWidth": "50",
"name": "text - 6"
},
{
"type": 1,
"content": {
"json": "# Request Details\r\n\r\nThis table highlights only the unique failure patterns detected in the last 24 hours.\r\nEach row represents a distinct combination of request name and result code that did not appear in the baseline period.\r\n\r\n**Note: While the chart counts every individual failure, this table focuses solely on newly observed failure types β€” resulting in a smaller, more focused list.**\r\n\r\nπŸ”Έ New Failure πŸ”Ή Existing Failure"
},
"customWidth": "50",
"name": "text - 21"
},
{
"type": 3,
"content": {
"version": "KqlItem/1.0",
"query": "let startTime = {OverTimeRange:start};\nlet grain = {OverTimeRange:grain};\nlet bigWindowTimeRange = {UseComparisonTimeRangeOf};\n\nlet existingFailures = requests\n| where timestamp >= ago(bigWindowTimeRange) and timestamp < bin(startTime, grain)\n| where operation_Name in ({In}) or '*' in ({In})\n| where name in ({RequestFilters}) or '*' in ({RequestFilters})\n| extend Key = strcat(name, '-', resultCode)\n| summarize makeset(Key, 10000);\n\nrequests\n| where timestamp >= bin(startTime, grain)\n| where operation_Name in ({In}) or '*' in ({In})\n| where name in ({RequestFilters}) or '*' in ({RequestFilters})\n| extend IncludeAsFailure = resultCode in ({IncludeResultCodes}) or '*' in ({IncludeResultCodes}) or iff('@' in ({IncludeResultCodes}), resultCode startswith '5', false) or iff('#' in ({IncludeResultCodes}), resultCode startswith '4', false)\n| extend Key = strcat(name, '-', resultCode)\n| summarize \n NewFailures = countif(success == false and Key !in (existingFailures) and IncludeAsFailure == true), \n ExistingFailures = countif(success == false and Key in (existingFailures) and IncludeAsFailure) \nby bin(timestamp, grain)\n| project timestamp, ['Existing Failures'] = ExistingFailures, ['New Failures'] = NewFailures\n",
"size": 0,
"showAnnotations": true,
"queryType": 0,
"resourceType": "microsoft.insights/components",
"visualization": "linechart"
},
"customWidth": "50",
"name": "query - 7"
},
{
"type": 3,
"content": {
"version": "KqlItem/1.0",
"query": "let startTime = {OverTimeRange:start};\nlet grain = {OverTimeRange:grain};\nlet bigWindowTimeRange = {UseComparisonTimeRangeOf};\nlet bigWindow = requests\n| where timestamp >= ago(bigWindowTimeRange) and timestamp < bin(startTime, grain)\n| where success == false\n| where operation_Name in ({In}) or '*' in ({In})\n| where name in ({RequestFilters}) or '*' in ({RequestFilters})\n| where resultCode in ({IncludeResultCodes}) or '*' in ({IncludeResultCodes}) or iff('@' in ({IncludeResultCodes}), resultCode startswith '5', false) or iff('#' in ({IncludeResultCodes}), resultCode startswith '4', false)\n| summarize by name, resultCode\n| summarize makelist(strcat(name, '-', resultCode), 10000);\nrequests\n| where timestamp {OverTimeRange}\n| where operation_Name in ({In}) or '*' in ({In})\n| where name in ({RequestFilters}) or '*' in ({RequestFilters})\n| where resultCode in ({IncludeResultCodes}) or '*' in ({IncludeResultCodes}) or iff('@' in ({IncludeResultCodes}), resultCode startswith '5', false) or iff('#' in ({IncludeResultCodes}), resultCode startswith '4', false)\n| where success == false\n| summarize Count = count() by name, resultCode\n| extend IsNew = strcat(name, '-', resultCode) !in (bigWindow)\n| where \"{Show}\" == \"['New Failure Rate (%)'], ['Existing Failure Rate (%)']\" or IsNew == true\n| order by Count desc, name asc\n| project ['Request Name'] = iff(IsNew, strcat('πŸ”Έ ', name), strcat('πŸ”Ή ', name)), ['Result Code'] = resultCode\n",
"size": 0,
"aggregation": 2,
"queryType": 0,
"resourceType": "microsoft.insights/components",
"visualization": "table",
"gridSettings": {
"sortBy": [
{
"itemKey": "Result Code",
"sortOrder": 1
}
]
},
"sortBy": [
{
"itemKey": "Result Code",
"sortOrder": 1
}
]
},
"customWidth": "50",
"name": "query - 10"
},
{
"type": 1,
"content": {
"json": "# Overall Response Times Trend ( In MilliSeconds)\n"
},
"name": "text - 0"
},
{
"type": 9,
"content": {
"version": "KqlParameterItem/1.0",
"parameters": [
{
"id": "response_time_filter",
"version": "KqlParameterItem/1.0",
"name": "OverTimeRange",
"type": 4,
"isRequired": true,
"value": {
"durationMs": 86400000
},
"typeSettings": {
"selectableValues": [
{
"durationMs": 86400000
},
{
"durationMs": 259200000
},
{
"durationMs": 604800000
},
{
"durationMs": 1209600000
},
{
"durationMs": 2419200000
},
{
"durationMs": 2592000000
}
],
"allowCustom": true
}
},
{
"id": "comparison_time_filter",
"version": "KqlParameterItem/1.0",
"name": "UseComparisonTimeRangeOf",
"type": 1,
"isRequired": true,
"query": "let t = {OverTimeRange:seconds};\nlet w = case(t <= 86400, '7d', t <= 259200, '14d', t <= 1209600, '28d', '60d');\nrange i from 1 to 1 step 1\n| project x = w",
"queryType": 0,
"resourceType": "microsoft.insights/components"
}
],
"style": "pills",
"queryType": 0,
"resourceType": "microsoft.insights/components"
},
"name": "parameters - response_time"
},
{
"type": 3,
"content": {
"version": "KqlItem/1.0",
"query": "// ---- get the two windows from the pills -----------------------\nlet nowWindowSeconds = {OverTimeRange:seconds}; // e.g. 86400\nlet compareWindowText = '{UseComparisonTimeRangeOf}'; // '7d' | '14d' | '28d' | '60d'\n\n// map the text to a timespan literal\nlet compareWindow =\n case(compareWindowText == '7d', 7d,\n compareWindowText == '14d', 14d,\n compareWindowText == '28d', 28d,\n compareWindowText == '60d', 60d,\n 7d); // fallback\n\nlet grain = {OverTimeRange:grain};\n// ----------------------------------------------------------------\n\n// baseline (older) window\nlet comparisonData =\nrequests\n| where timestamp >= ago(compareWindow)\n| summarize AvgRT_Baseline = avg(duration)\n by bin(timestamp, grain);\n\n// current (now) window\nlet currentData =\nrequests\n| where timestamp >= ago(nowWindowSeconds * 1s)\n| summarize AvgRT_Now = avg(duration)\n by bin(timestamp, grain);\n\n// stitch the two series together\ncomparisonData\n| join kind=fullouter (currentData) on timestamp\n| project timestamp, AvgRT_Baseline, AvgRT_Now\n",
"size": 0,
"aggregation": 3,
"exportParameterName": "Operation",
"queryType": 0,
"resourceType": "microsoft.insights/components",
"visualization": "linechart",
"gridSettings": {
"formatters": [
{
"columnMatch": "Mean|Median|p80|p95|p99",
"formatter": 8,
"formatOptions": {
"min": 0,
"max": null,
"palette": "red"
}
},
{
"columnMatch": "Count",
"formatter": 8,
"formatOptions": {
"min": 0,
"max": null,
"palette": "blue"
}
},
{
"columnMatch": "Users",
"formatter": 8,
"formatOptions": {
"min": 0,
"max": null,
"palette": "blueDark"
}
}
]
},
"graphSettings": {
"type": 0
},
"chartSettings": {
"showDataPoints": true
}
},
"name": "query - 2"
}
],
"fallbackResourceIds": [
"/subscriptions/{YOUR-SUBSCRIPTIONID}/resourcegroups/{YOUR-RESOURCEGROUPNAME}/providers/microsoft.insights/components/{YOUR-RESOURCENAME}"
],
"fromTemplateId": "community-Workbooks/Failures/New Failures Analysis",
"$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/gallery.json",
"galleryItems": [
{
"name": "Detailed Performance & Failure Analysis",
"version": "1.0",
"description": "A deep-dive engineering workbook for analyzing failures, exceptions, dependencies, and latency insights.",
"templatePath": "workbook.json",
"author": "Kranthi Kumar Kharidu",
"tags": [
"Performance",
"Failures",
"Dependencies",
"Latency",
"Application Insights",
"Azure Monitor"
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"name": "Detailed Performance & Failure Analysis",
"description": "Engineering-level performance insights with failures, exceptions, dependencies, and latency insights.",
"author": "Kranthi Kumar Kharidu",
"type": "Workbooks",
"category": "Performance"
}
Loading