針對 Summarize 及 Join 運算子的 Log Analytics 查詢語言建議
發佈日期: 五月 29, 2018
此更新的內容為針對 Summarize 及 Join 運算子的 Azure Log Analytics 與 Application Insights 查詢語言語法建議。 現有語法仍會予以支援,但強烈建議修改已儲存搜尋及警示中適用的查詢語法,以免結果不明確。
如果對這些建議有任何疑問,請連絡我們。
Summarize 運算子中的每小時自動間隔
依日期時間索引鍵彙總的資料目前會自動分成以小時為單位的間隔。在此範例中,在 Summarize 運算子中使用的 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 運算子中的等號比較運算式
語言語法目前允許使用不明確的相等運算式作為 Join 屬性 (例如 key1 == key2),這會產生不需要的結果。建議變更不明確的相等運算式來避免此行為。
下列為不明確 Join 運算式的範例 (加總每部電腦的每日工作階段持續時間):
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
建議動作:
- 如果您無論已儲存搜尋或警示中,皆不會於 Join 運算子中使用相等運算式:
- 不需執行任何動作。
- 如果您在 Join 運算子中使用了相等運算式:
- 請修正 Join 運算子語法。
- 請修正您的查詢。欄位名稱應使用透過
$left
及$right
標記法表示的適用擁有者資料表加以限定。範例:
| join … on $left.Col1 == $right.Col2
| join … on X (equivalent to: | join … on $left.X == $right.X)