Log Analytics 查询语言对汇总和联接运算符的建议
发布日期:五月 29, 2018
此更新介绍了 Azure Log Analytics 和 Application Insights 查询语言对汇总和联接运算符的语法建议。 现有语法仍然受支持,但强烈建议你在保存的搜索和警报中的适当位置修改查询语法,以避免结果产生歧义。
有关这些建议的问题,请与我们联系。
汇总运算符中的每小时自动分箱
目前,按日期/时间键汇总的数据会自动分组给每小时箱。在此示例中,汇总运算符中使用的“TimeGenerated”列已自动舍入为每小时箱:
SecurityEvent
| where TimeGenerated > ago(1d)
| where EventID == 4625
| summarize count() by TimeGenerated
以下是查询结果:
TimeGenerated [UTC] |
count_ |
2018-02-04T09:00:00.000 2018-02-04T10:00:00.000 2018-02-04T11:00:00.000 2018-02-04T12:00:00.000 2018-02-04T13:00:00.000 2018-02-04T14:00:00.000 2018-02-04T15:00:00.000 2018-02-04T16:00:00.000 2018-02-04T17:00:00.000 2018-02-04T18:00:00.000 |
1,205 1,268 1,234 1,173 1,007 1,042 1,041 1,049 1,090 1,113 |
建议的操作:
- 如果你不依赖于自动分箱功能,无论是在已保存的搜索中还是在警报中(例如,按“TimeGenerated”进行汇总):
- 无需执行任何操作。
- 如果你不了解自动分箱功能,则查询可能会无意识地返回每小时聚合的结果:
- 验证是否按日期/时间键使用聚合数据(例如,按“TimeGenerated”进行汇总)。如果是,请更正查询以使用显式分箱;例如,按“bin(TimeGenerated, 1h)”进行汇总。
- 如果你已了解自动分箱功能并依赖此功能:
- 请更正查询以使用显式分箱;例如,按“bin(TimeGenerated, 1h)”进行汇总。
联接运算符中的相等表达式
目前,计算机语言语法允许使用不明确的相等表达式作为“Join”属性(例如,“key1 == key2”),这会产生不希望的结果。建议更改不明确的相等表达式,以避免此行为。
以下是不明确的联接表达式的示例(每台计算机每日会话持续时间之和):
SecurityEvent
| where EventID == 4624
| join kind= inner (
SecurityEvent
| where EventID == 4634
) on TargetLogonId == TargetLogonId
| extend Duration = LogoffTime - LogonTime
| summarize sum(Duration) by bin(LogonTime, 1d), Computer
建议的操作:
- 如果在联接运算符中不使用相等表达式,则在已保存或警报中:
- 无需执行任何操作。
- 如果在联接运算符中使用相等表达式:
- 请更正联接运算符语法。
- 请更正查询。列名应使用由
$left
和$right
表示法表示的适用所有者表进行限定。示例:
| join … on $left.Col1 == $right.Col2
| join … on X (equivalent to: | join … on $left.X == $right.X)