Skip to content

Commit 2c88061

Browse files
fix: Replace tiles visualization with table to fix workbook import error
Changed 'tiles' visualization to 'table' for summary and percentiles items to resolve 'undefined (Unknown)' error in workbook Advanced Editor. Kept fallbackResourceIds as 'Azure Monitor' for portability. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 0a1436e commit 2c88061

1 file changed

Lines changed: 30 additions & 20 deletions

File tree

infra/dashboards/token-usage-workbook.json

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,23 @@
5151
"type": 3,
5252
"content": {
5353
"version": "KqlItem/1.0",
54-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n TotalDocuments = count(),\r\n TotalInputTokens = sum(input_tokens),\r\n TotalOutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDocument = round(avg(total_tokens), 0)",
55-
"size": 4,
54+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n TotalDocuments = count(),\r\n TotalInputTokens = sum(input_tokens),\r\n TotalOutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDocument = round(avg(total_tokens), 0)",
55+
"size": 3,
5656
"title": "Overall Token Usage Summary",
5757
"timeContext": {
5858
"durationMs": 604800000
5959
},
6060
"timeContextFromParameter": "TimeRange",
6161
"queryType": 0,
6262
"resourceType": "microsoft.insights/components",
63-
"visualization": "tiles",
64-
"tileSettings": {
65-
"showBorder": true
63+
"visualization": "table",
64+
"gridSettings": {
65+
"formatters": [
66+
{
67+
"columnMatch": "TotalTokens",
68+
"formatter": 1
69+
}
70+
]
6671
}
6772
},
6873
"name": "overall-summary"
@@ -71,7 +76,7 @@
7176
"type": 3,
7277
"content": {
7378
"version": "KqlItem/1.0",
74-
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Step = agent\r\n| order by TotalTokens desc",
79+
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| where timestamp > ago(7d)\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Step = agent\r\n| order by TotalTokens desc",
7580
"size": 0,
7681
"title": "Token Usage by Pipeline Step",
7782
"timeContext": {
@@ -88,7 +93,7 @@
8893
"type": 3,
8994
"content": {
9095
"version": "KqlItem/1.0",
91-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| summarize InputTokens = sum(input_tokens), OutputTokens = sum(output_tokens) by bin(timestamp, 1h)\r\n| order by timestamp asc",
96+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| summarize InputTokens = sum(input_tokens), OutputTokens = sum(output_tokens) by bin(timestamp, 1h)\r\n| order by timestamp asc",
9297
"size": 0,
9398
"title": "Token Usage Over Time (Hourly)",
9499
"timeContext": {
@@ -105,7 +110,7 @@
105110
"type": 3,
106111
"content": {
107112
"version": "KqlItem/1.0",
108-
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize TotalTokens = sum(total_tokens) by agent",
113+
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| where timestamp > ago(7d)\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize TotalTokens = sum(total_tokens) by agent",
109114
"size": 0,
110115
"title": "Token Distribution by Agent",
111116
"timeContext": {
@@ -129,7 +134,7 @@
129134
"type": 3,
130135
"content": {
131136
"version": "KqlItem/1.0",
132-
"query": "let input_price_per_million = 2.50;\r\nlet output_price_per_million = 10.00;\r\ncustomEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| summarize TotalInput = sum(input_tokens), TotalOutput = sum(output_tokens) by bin(timestamp, 1d)\r\n| extend InputCost = round(TotalInput * input_price_per_million / 1000000.0, 4)\r\n| extend OutputCost = round(TotalOutput * output_price_per_million / 1000000.0, 4)\r\n| extend TotalCost = InputCost + OutputCost\r\n| project Day = timestamp, TotalInput, TotalOutput, InputCost, OutputCost, TotalCost\r\n| order by Day desc",
137+
"query": "let input_price_per_million = 2.50;\r\nlet output_price_per_million = 10.00;\r\ncustomEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| summarize TotalInput = sum(input_tokens), TotalOutput = sum(output_tokens) by bin(timestamp, 1d)\r\n| extend InputCost = round(TotalInput * input_price_per_million / 1000000.0, 4)\r\n| extend OutputCost = round(TotalOutput * output_price_per_million / 1000000.0, 4)\r\n| extend TotalCost = InputCost + OutputCost\r\n| project Day = timestamp, TotalInput, TotalOutput, InputCost, OutputCost, TotalCost\r\n| order by Day desc",
133138
"size": 0,
134139
"title": "Estimated Daily Cost (GPT-4o Pricing: $2.50/1M input, $10.00/1M output)",
135140
"timeContext": {
@@ -146,7 +151,7 @@
146151
"type": 3,
147152
"content": {
148153
"version": "KqlItem/1.0",
149-
"query": "let gpt4o_input = 2.50;\r\nlet gpt4o_output = 10.00;\r\nlet gpt4o_mini_input = 0.15;\r\nlet gpt4o_mini_output = 0.60;\r\ncustomEvents\r\n| where name == 'LLM_Model_Token_Usage'\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| summarize TotalInput = sum(input_tokens), TotalOutput = sum(output_tokens) by model\r\n| extend InputPrice = case(model has \"mini\", gpt4o_mini_input, gpt4o_input)\r\n| extend OutputPrice = case(model has \"mini\", gpt4o_mini_output, gpt4o_output)\r\n| extend InputCost = round(TotalInput * InputPrice / 1000000.0, 4)\r\n| extend OutputCost = round(TotalOutput * OutputPrice / 1000000.0, 4)\r\n| extend TotalCost = InputCost + OutputCost\r\n| project Model = model, TotalInput, TotalOutput, InputCost, OutputCost, TotalCost\r\n| order by TotalCost desc",
154+
"query": "let gpt4o_input = 2.50;\r\nlet gpt4o_output = 10.00;\r\nlet gpt4o_mini_input = 0.15;\r\nlet gpt4o_mini_output = 0.60;\r\ncustomEvents\r\n| where name == 'LLM_Model_Token_Usage'\r\n| where timestamp > ago(7d)\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| summarize TotalInput = sum(input_tokens), TotalOutput = sum(output_tokens) by model\r\n| extend InputPrice = case(model has \"mini\", gpt4o_mini_input, gpt4o_input)\r\n| extend OutputPrice = case(model has \"mini\", gpt4o_mini_output, gpt4o_output)\r\n| extend InputCost = round(TotalInput * InputPrice / 1000000.0, 4)\r\n| extend OutputCost = round(TotalOutput * OutputPrice / 1000000.0, 4)\r\n| extend TotalCost = InputCost + OutputCost\r\n| project Model = model, TotalInput, TotalOutput, InputCost, OutputCost, TotalCost\r\n| order by TotalCost desc",
150155
"size": 0,
151156
"title": "Estimated Cost by Model",
152157
"timeContext": {
@@ -170,7 +175,7 @@
170175
"type": 3,
171176
"content": {
172177
"version": "KqlItem/1.0",
173-
"query": "customEvents\r\n| where name == 'LLM_Model_Token_Usage'\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Model = model\r\n| order by TotalTokens desc",
178+
"query": "customEvents\r\n| where name == 'LLM_Model_Token_Usage'\r\n| where timestamp > ago(7d)\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Model = model\r\n| order by TotalTokens desc",
174179
"size": 0,
175180
"title": "Token Usage by Model",
176181
"timeContext": {
@@ -187,7 +192,7 @@
187192
"type": 3,
188193
"content": {
189194
"version": "KqlItem/1.0",
190-
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Step = agent, Model = model\r\n| order by TotalTokens desc",
195+
"query": "customEvents\r\n| where name == 'LLM_Agent_Token_Usage'\r\n| where timestamp > ago(7d)\r\n| extend agent = tostring(customDimensions['agent_name'])\r\n| extend model = tostring(customDimensions['model_deployment_name'])\r\n| extend input_tokens = toint(customDimensions['input_tokens'])\r\n| extend output_tokens = toint(customDimensions['output_tokens'])\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n InputTokens = sum(input_tokens),\r\n OutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n Invocations = count()\r\n by Step = agent, Model = model\r\n| order by TotalTokens desc",
191196
"size": 0,
192197
"title": "Step-to-Model Token Mapping",
193198
"timeContext": {
@@ -204,7 +209,7 @@
204209
"type": 3,
205210
"content": {
206211
"version": "KqlItem/1.0",
207-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend process_id = tostring(customDimensions['process_id'])\r\n| extend file_name = tostring(customDimensions['file_name'])\r\n| summarize TotalTokens = sum(total_tokens) by process_id, file_name\r\n| order by TotalTokens desc\r\n| take 20",
212+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend process_id = tostring(customDimensions['process_id'])\r\n| extend file_name = tostring(customDimensions['file_name'])\r\n| summarize TotalTokens = sum(total_tokens) by process_id, file_name\r\n| order by TotalTokens desc\r\n| take 20",
208213
"size": 0,
209214
"title": "Top 20 Token Consumers by Document",
210215
"timeContext": {
@@ -221,7 +226,7 @@
221226
"type": 3,
222227
"content": {
223228
"version": "KqlItem/1.0",
224-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| extend mime_type = tostring(customDimensions['file_mime_type'])\r\n| extend file_type = case(\r\n mime_type has \"pdf\", \"PDF\",\r\n mime_type has \"image\", \"Image\",\r\n mime_type has \"word\" or mime_type has \"docx\", \"Word\",\r\n mime_type has \"excel\" or mime_type has \"xlsx\", \"Excel\",\r\n mime_type has \"text\", \"Text\",\r\n \"Other\")\r\n| summarize\r\n Documents = count(),\r\n TotalInputTokens = sum(input_tokens),\r\n TotalOutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDoc = round(avg(total_tokens), 0)\r\n by FileType = file_type\r\n| order by TotalTokens desc",
229+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend input_tokens = toint(customDimensions['total_input_tokens'])\r\n| extend output_tokens = toint(customDimensions['total_output_tokens'])\r\n| extend mime_type = tostring(customDimensions['file_mime_type'])\r\n| extend file_type = case(\r\n mime_type has \"pdf\", \"PDF\",\r\n mime_type has \"image\", \"Image\",\r\n mime_type has \"word\" or mime_type has \"docx\", \"Word\",\r\n mime_type has \"excel\" or mime_type has \"xlsx\", \"Excel\",\r\n mime_type has \"text\", \"Text\",\r\n \"Other\")\r\n| summarize\r\n Documents = count(),\r\n TotalInputTokens = sum(input_tokens),\r\n TotalOutputTokens = sum(output_tokens),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDoc = round(avg(total_tokens), 0)\r\n by FileType = file_type\r\n| order by TotalTokens desc",
225230
"size": 0,
226231
"title": "Token Usage by File Type",
227232
"timeContext": {
@@ -245,18 +250,23 @@
245250
"type": 3,
246251
"content": {
247252
"version": "KqlItem/1.0",
248-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n p50 = percentile(total_tokens, 50),\r\n p90 = percentile(total_tokens, 90),\r\n p95 = percentile(total_tokens, 95),\r\n p99 = percentile(total_tokens, 99),\r\n Max = max(total_tokens)",
249-
"size": 4,
253+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| summarize\r\n p50 = percentile(total_tokens, 50),\r\n p90 = percentile(total_tokens, 90),\r\n p95 = percentile(total_tokens, 95),\r\n p99 = percentile(total_tokens, 99),\r\n Max = max(total_tokens)",
254+
"size": 3,
250255
"title": "Token Usage Percentiles Per Document",
251256
"timeContext": {
252257
"durationMs": 604800000
253258
},
254259
"timeContextFromParameter": "TimeRange",
255260
"queryType": 0,
256261
"resourceType": "microsoft.insights/components",
257-
"visualization": "tiles",
258-
"tileSettings": {
259-
"showBorder": true
262+
"visualization": "table",
263+
"gridSettings": {
264+
"formatters": [
265+
{
266+
"columnMatch": "p50|p90|p95|p99|Max",
267+
"formatter": 1
268+
}
269+
]
260270
}
261271
},
262272
"name": "token-percentiles"
@@ -265,7 +275,7 @@
265275
"type": 3,
266276
"content": {
267277
"version": "KqlItem/1.0",
268-
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend file_name = tostring(customDimensions['file_name'])\r\n| summarize\r\n DocumentsProcessed = count(),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDoc = round(avg(total_tokens), 0),\r\n MaxTokensPerDoc = max(total_tokens)\r\n by Day = bin(timestamp, 1d)\r\n| order by Day desc",
278+
"query": "customEvents\r\n| where name == 'LLM_Token_Usage_Summary'\r\n| where timestamp > ago(7d)\r\n| extend total_tokens = toint(customDimensions['total_tokens'])\r\n| extend file_name = tostring(customDimensions['file_name'])\r\n| summarize\r\n DocumentsProcessed = count(),\r\n TotalTokens = sum(total_tokens),\r\n AvgTokensPerDoc = round(avg(total_tokens), 0),\r\n MaxTokensPerDoc = max(total_tokens)\r\n by Day = bin(timestamp, 1d)\r\n| order by Day desc",
269279
"size": 0,
270280
"title": "Daily Processing Volume with Token Usage",
271281
"timeContext": {

0 commit comments

Comments
 (0)