Azure Log Analytics查询SQL数据库存储指标时出现重复条目问题咨询
Azure Log Analytics查询SQL数据库存储指标时出现重复条目问题咨询
嗨,我来帮你拆解下这个问题的原因,以及对应的解决办法~
为什么会出现重复条目?
你当前的查询里用了 summarize MaxMB = max(AverageMB) by bin(TimeGenerated, 1h), Resource,这里的核心是按1小时时间桶和数据库(Resource)共同分组。
举个例子:假设现在是上午10:30,你的查询范围是过去1小时(9:30-10:30),bin(TimeGenerated,1h) 会把这段时间分成两个时间桶:
- 9:00-10:00(包含9:30-10:00的数据)
- 10:00-11:00(包含10:00-10:30的数据)
如果某个数据库在这两个时间桶里都有存储指标数据,就会被统计两次,自然就出现了同一个数据库的多条条目。
怎么解决重复问题?
根据你的需求,如果你只想得到过去1小时内每个数据库的最大存储值,可以去掉时间桶的分组,或者用arg_max来获取最新时间点的最大值,这里给你两个方案:
方案1:只按数据库分组,取过去1小时内的最大值
AzureMetrics | where ResourceProvider == "MICROSOFT.SQL" and Resource != "MASTER" | where TimeGenerated > ago(1h) | where MetricName == "storage" | extend AverageMB = Average / 1000000 | summarize MaxMB = max(AverageMB) by Resource | project Resource, MaxMB
方案2:保留时间维度,但只取每个数据库的最新时间桶数据
如果你还是想保留时间信息,但不想重复显示同一个数据库,可以用arg_max来获取每个数据库对应的最新时间点的最大值:
AzureMetrics | where ResourceProvider == "MICROSOFT.SQL" and Resource != "MASTER" | where TimeGenerated > ago(1h) | where MetricName == "storage" | extend AverageMB = Average / 1000000 | summarize MaxMB = max(AverageMB), LatestTime = max(TimeGenerated) by Resource | project LatestTime, Resource, MaxMB
或者如果你确实需要按小时分桶,但只想看完整的小时数据,可以调整时间范围,比如取过去整1小时的数据:
AzureMetrics | where ResourceProvider == "MICROSOFT.SQL" and Resource != "MASTER" | where TimeGenerated >= startofhour(ago(1h)) and TimeGenerated < startofhour(now()) | where MetricName == "storage" | extend AverageMB = Average / 1000000 | summarize MaxMB = max(AverageMB) by bin(TimeGenerated, 1h), Resource | project TimeGenerated, Resource, MaxMB
备注:内容来源于stack exchange,提问作者Francesco Mantovani
相关产品推荐
相关产品推荐

