应用程序见解提取嵌套的CustomDimensions

时间:2017-09-11 22:07:05

标签: azure-application-insights ms-app-analytics

我在Application Insights Analytics中有一些数据,它将动态对象作为自定义维度的属性。例如:

|        timestamp        |  name   | customDimensions                 | etc |
|-------------------------|---------|----------------------------------|-----|
| 2017-09-11T19:56:20.000 | Spinner | {                                | ... |
                                         MyCustomDimension: "hi"
                                         Properties:
                                             context: "ABC"
                                             userMessage: "Some other"
                                      }

这有意义吗?所以customDimensions中的键/值对。

我正在尝试将context属性调出为结果中的正确列。所以预期会是:

|        timestamp        |  name   | customDimensions                 | context| etc |
|-------------------------|---------|----------------------------------|--------|-----|
| 2017-09-11T19:56:20.000 | Spinner | {                                | ABC    | ...
                                         MyCustomDimension: "hi"
                                         Properties:
                                             context: "ABC"
                                             userMessage: "Some other"
                                      }

我试过这个:

customEvents | where name == "Spinner" | extend Context = customDimensions.Properties["context"]

和此:

customEvents | where name == "Spinner"  | extend Context = customDimensions.Properties.context

但似乎都不起作用。他们给我一个名为“上下文”的列,但列是空的 - 没有值。

有什么想法吗?

修改

添加了一张图片,用于说明数据的格式:

Application Insights Data

2 个答案:

答案 0 :(得分:14)

已修改为工作回答

customEvents
 | where name == "Spinner"
 | extend Properties = todynamic(tostring(customDimensions.Properties))
 | extend Context = Properties.context

您需要额外的tostringtodynamic来获得您的期望(以及期望的内容!)

给出的解释是:

  

动态字段“承诺”您上/外级别的键/值访问权限(这是您访问customDimensions.Properties的方式)。

     

访问该json的内部结构取决于customDimensions.Properties内容的确切格式。它本身不一定是json。即使它看起来像一个结构良好的json,它仍然可能只是一个不完全格式化json的字符串。

所以基本上,它默认不会尝试解析动态/ json块内的字符串,因为他们不想花费大量时间尝试并且无法将嵌套内容无限地转换为json。

我仍然认为在那里不应该要求 extra tostring,因为todynamic应该已经有效地允许字符串和动态,所以我正在检查查看拥有查询内容的团队是否可以更好地完成这一步骤。

答案 1 :(得分:3)

非常感谢..只是为了扩展约翰的答案。我们需要使用自定义事件来绘制终点的持续时间。此查询使我们可以将持续时间指定为图表中的Y轴:

'address'