跳到主内容

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)

 

  • Log Analytics
  • Azure Monitor
  • Services

相关产品