如何根据自定义图表中天蓝色仪表板的选定时间段计算时间粒度

问题描述

在编写Kusto查询以在我的Azure仪表板上创建自定义图表时,我希望能够根据用户在仪表板上选择的时间段来计算时间粒度。

例如:过去4h =>时间间隔2分钟,过去24h => 10分钟

我尝试了以下方法来计算时间段,因为我们仍然无法访问它(据我在互联网上可以找到的范围)。

let timeGrain = traces
| summarize min_time = min(timestamp),max_time = max(timestamp)
| extend timeWindow = max_time - min_time   // days / hrs/ min / seconds
| project timeWindow
| extend timeGrain = case(timeWindow <= 4h,"2m",timeWindow <= 12h,"5m",timeWindow <= 24h,"10m","2h")
                       | project timeGrain;      

查询返回的时间是我想要达到的,但是我无法在其他查询中使用此变量。

traces
...
| summarize percentile(DurationInMs,50) by bin(timestamp,timeGrain),CommandType
| render areachart with (ytitle = "Duration In Ms",xtitle = "Timestamp");

(我知道跟踪不是存储有关持续时间的最佳数据,我们将其更改为指标,但这不是问题的范围)

这给了我以下错误:'summarize'运算符:无法解析名为'timeGrain'的标量表达式

是否有解决错误方法,或者有更好的方法来创建动态时间粒度?

解决方法

很明显,跟踪中没有相同的字段,但是您应该使用时间跨度而不是字符串来定义timeGrain

此外,要将查询结果timeGrain用作变量,请使用toscalardocs):

let timeGrain = toscalar(traces
| summarize min_time = min(timestamp),max_time = max(timestamp)
| extend timeWindow = max_time - min_time   // days / hrs/ min / seconds
| project timeWindow
| extend timeGrain = case(timeWindow <= 4h,2m,timeWindow <= 12h,5m,timeWindow <= 24h,10m,2h)
                       | project timeGrain);  
traces
| summarize count() by bin(timestamp,timeGrain)
| order by timestamp desc       

这很好用。

,

这可能不是问题的直接答案,但对于不想创建逻辑以从时间范围推断时间粒度​​的其他人可能有用。

使用工作簿根据应用洞察查询创建图表。添加时间范围参数,参考查询中的参数。 {TimeRange:grain} 将为您提供与所选时间范围相对应的粒度。现在将查询部分固定到仪表板,瞧!您的图表已准备好使用仪表板上选择的时间范围、自动刷新参数。

创建工作簿并将部件固定到仪表板:https://docs.microsoft.com/en-us/azure/azure-monitor/visualize/workbooks-overview 时间范围参数:https://docs.microsoft.com/en-us/azure/azure-monitor/visualize/workbooks-time

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...