如何根据自定义图表中 azure 仪表板的选定时间段计算时间粒度
How to calculate time grain based on selected period from azure dashboard in a custom chart
在编写 kusto 查询以在我的 Azure 仪表板上创建自定义图表时,我希望能够根据用户在仪表板上选择的时间段来计算时间粒度。
例如:最后 4 小时 => 时间颗粒 2 分钟,最后 24 小时 => 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;
查询 returns 我想要实现的时间粒度,但我无法在其他查询中使用此变量。
traces
...
| summarize percentile(DurationInMs, 50) by bin(timestamp, timeGrain), CommandType
| render areachart with (ytitle = "Duration In Ms", xtitle = "Timestamp");
(我知道痕迹不是存储有关持续时间的数据的最佳位置,我们将把它更改为指标,但这不是问题的范围)
这给了我以下错误:'summarize' 运算符:无法解析名为 'timeGrain'
的标量表达式
有没有办法修复这个错误,或者有更好的方法来创建动态时间颗粒?
显然我的跟踪中没有相同的字段,但您应该使用时间跨度而不是字符串来定义 timeGrain
。
此外,要将查询结果timeGrain
用作变量,请使用toscalar
(docs):
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
在编写 kusto 查询以在我的 Azure 仪表板上创建自定义图表时,我希望能够根据用户在仪表板上选择的时间段来计算时间粒度。
例如:最后 4 小时 => 时间颗粒 2 分钟,最后 24 小时 => 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;
查询 returns 我想要实现的时间粒度,但我无法在其他查询中使用此变量。
traces
...
| summarize percentile(DurationInMs, 50) by bin(timestamp, timeGrain), CommandType
| render areachart with (ytitle = "Duration In Ms", xtitle = "Timestamp");
(我知道痕迹不是存储有关持续时间的数据的最佳位置,我们将把它更改为指标,但这不是问题的范围)
这给了我以下错误:'summarize' 运算符:无法解析名为 'timeGrain'
的标量表达式有没有办法修复这个错误,或者有更好的方法来创建动态时间颗粒?
显然我的跟踪中没有相同的字段,但您应该使用时间跨度而不是字符串来定义 timeGrain
。
此外,要将查询结果timeGrain
用作变量,请使用toscalar
(docs):
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