You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Log Analytics工作区每日数据趋势KQL查询优化及天数列添加咨询

关于Log Analytics计费数据查询的问题解答

1. 带bin的union查询是否可行?

这个查询逻辑上可行,但存在效率和实用性问题:

  • 性能瓶颈:union withsource= table *会扫描所有日志表,数据量较大时查询速度极慢,资源消耗高。
  • 逻辑疏漏:原查询中sort by Size按数据量排序,但最终project未保留TimeGenerated,等于丢失了每日时间维度,无法体现趋势。
  • 语法细节:where _IsBillable = true是赋值操作,规范写法应为==(部分环境兼容单等号,但建议统一用双等号)。

修正后的实用版查询(保留时间维度+提前过滤减少计算量):

let timeVal = 31d;
union withsource=TableName *
| where TimeGenerated > ago(timeVal) 
| where _IsBillable == true
| summarize Size = sum(_BilledSize) by bin(TimeGenerated, 1d)
| extend Size2 = format_bytes(Size, 2)
| sort by TimeGenerated asc
| project 日期 = TimeGenerated, 计费数据量 = Size2

2. 如何添加“第1天”“第2天”这类天数列?

可以通过两种方式实现:

方式一:用row_number()生成序号

按时间排序后,直接生成递增的天数标识:

let timeVal = 31d;
union withsource=TableName *
| where TimeGenerated > ago(timeVal)
| where _IsBillable == true
| summarize Size = sum(_BilledSize) by bin(TimeGenerated, 1d)
| extend Size2 = format_bytes(Size, 2)
| sort by TimeGenerated asc
| extend 天数 = strcat("第", row_number(), "天")
| project 天数, 日期 = TimeGenerated, 计费数据量 = Size2

方式二:基于起始日期计算天数差

以查询时间范围的起始点为基准,计算每个日期与起始点的天数差,再加1得到“第N天”:

let timeVal = 31d;
let startDate = ago(timeVal);
union withsource=TableName *
| where TimeGenerated > startDate
| where _IsBillable == true
| summarize Size = sum(_BilledSize) by bin(TimeGenerated, 1d)
| extend Size2 = format_bytes(Size, 2)
| extend 天数 = strcat("第", datetime_diff('day', TimeGenerated, startDate) + 1, "天")
| sort by TimeGenerated asc
| project 天数, 日期 = TimeGenerated, 计费数据量 = Size2

3. 关于Usage表查询的疑问解答

Usage是Log Analytics内置的计费统计系统表,比union所有表的方式高效得多,因为它直接存储了汇总后的用量数据,无需扫描业务日志表。你的查询逻辑正确,但需要明确几个关键点:

  • 单位转换:Quantity的单位是MB,Quantity / 1000转换为GB符合Azure十进制计费规则(1GB=1000MB)。
  • 结果差异原因:
    • Usage表的统计时间按Azure UTC计费日边界计算,可能与union查询的TimeGenerated范围有细微偏移;
    • Usage表包含所有Log Analytics计费项(如数据保留、查询等),若仅需日志摄入数据量,需添加过滤条件。

精准版Usage表查询:

let timeVal = 31d;
Usage 
| where TimeGenerated > ago(timeVal)
| where IsBillable == true 
| where MeterCategory == "Log Analytics" and MeterName == "Data Ingestion" // 仅过滤日志摄入用量
| summarize DataGB = sum(Quantity / 1000) by bin(TimeGenerated,1d)
| sort by TimeGenerated asc
| render timechart title = "每日日志摄入数据量(GB)"

总结:全局计费统计优先用Usage表,性能和准确性更优;union所有表仅适合单表细粒度分析。

内容的提问来源于stack exchange,提问作者user211245

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:43