Kusto 查詢語言概觀

使用 版本 下拉選單切換服務。 了解更多關於導航的資訊
適用於:✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure 監視器 ✅ Microsoft Sentinel

Kusto 查詢語言(KQL)是一款強大的工具,能用來探索資料、發現模式、識別異常與異常值、建立統計模型等。

KQL 是一種簡單但功能強大的語言,可查詢結構化、半結構化和非結構化數據。 語言具有表達性、易於閱讀和瞭解查詢意圖,並已針對撰寫體驗進行優化。 KQL 最適合用於查詢遙測、計量和記錄,並深入支援文字搜尋和剖析、時間序列運算符和函式、分析和匯總、地理空間、向量相似度搜尋,以及許多其他語言建構,以提供最理想的數據分析語言。 查詢使用結構實體,組織方式類似 SQL:資料庫、資料表與欄位。

如果您有腳本或使用資料庫的背景,本文的大部分內容都應該很熟悉。 如果沒有,別擔心,因為語言的直覺本質可讓您快速開始撰寫自己的查詢,並為組織創造價值。

本文提供查詢語言的說明,並提供實際練習,讓您開始撰寫查詢。 若要存取查詢環境,請使用 Azure 資料總管 Web UI。 若要瞭解如何使用 KQL,請參閱 教學課程:瞭解常見的運算子

本文提供查詢語言的說明,並提供實際練習,讓您開始撰寫查詢。 若要存取查詢環境,請使用 KQL 查詢集。 若要瞭解如何使用 KQL,請參閱 教學課程:瞭解常見的運算子

KQL 也是您用來處理和作 Sentinel Microsoft數據的語言。 如果您無法分析匯入工作區的記錄,並從那些資料中擷取出隱藏的重要資訊,這些記錄就沒有多大價值。 KQL 不僅具備取得該資訊的強大功能和彈性,而且能協助您快速開始使用的簡單性。

本文介紹 KQL 的基本概念,涵蓋一些最常用的函式和運算符,該函式和運算符應該處理 75 到 80% 的使用者每天撰寫的查詢。 當您需要更深入或執行更進階的查詢時,您可以利用 進階 KQL for Microsoft Sentinel 活頁簿

為什麼要在 Microsoft Sentinel 中使用 KQL?

Microsoft Sentinel 建置於 Azure 監視器服務之上,並使用 Azure 監視器的 Log Analytics 工作區來儲存其所有資料。 此資料包括下列任一項:

  • 使用 Microsoft Sentinel 資料連接器,將來自外部來源的資料匯入預先定義的資料表中。
  • 使用自訂建立的資料連接器和某些類型的內建連接器,從外部來源匯入到使用者自訂的自訂資料表中的資料。
  • 由 Microsoft Sentinel 本身所建立的資料,源自其建立並執行的分析結果,例如警示、事件及 UEBA 相關資訊。
  • 上傳至 Microsoft Sentinel 以協助偵測和分析的資料,例如,威脅情報摘要和關注清單。

KQL 是作為 Azure Data Explorer 服務的一部分而開發,因此已針對搜尋雲端環境中的巨量資料存放區進行最佳化。 其設計目的是協助您深入探討您的數據,並探索其隱藏的寶藏。

KQL 也用於 Azure 監視器,並支援額外的 Azure 監視器功能,可讓您擷取、可視化、分析和剖析 Log Analytics 數據存放區中的數據。 在 Microsoft Sentinel 中,每當您可視化和分析數據並搜捕威脅、無論是在現有規則和活頁簿中,還是在建置您自己的時,您都使用以 KQL 為基礎的工具。

由於 KQL 是您Microsoft Sentinel 中幾乎所做的一切的一部分,因此清楚瞭解其運作方式可協助您從 SIEM 中取得更多功能。

什麼是 Kusto 查詢?

Kusto 查詢是處理數據和傳回結果的唯讀要求。 要求會以純文本表示,其使用易於讀取、撰寫及自動化的數據流模型。 Kusto 查詢是由一或多個查詢語句所組成。

Kusto 查詢不會寫入任何數據。 查詢會針對組織為資料庫資料表資料行階層的資料進行操作,類似於 SQL。

什麼是查詢語句?

使用者 查詢語句有三種

所有查詢語句都會以 ; 分隔(分號),而且只會影響手邊的查詢。

附註

如需應用程式查詢語句的相關信息,請參閱 應用程式查詢語句

最常見的查詢語句類型是表格式表達式 語句,這表示其輸入和輸出是由數據表或表格式數據集所組成。 表格式語句包含零個或多個 運算子,每個運算元都是以表格式輸入開頭,並傳回表格式輸出。 運算子會依 | (pipe) 排序。 資料會流動,或透過管線從一個運算子傳送到下一個運算子。 數據會在每個步驟進行篩選或操作,然後饋送至下列步驟。

這就像漏斗一樣,一開始會先有一整個資料表。 每次數據通過另一個運算符時,都會經過篩選、重新排列或摘要。 由於從一個運算符到另一個運算子的資訊管線是循序的,因此查詢運算符順序很重要,而且可能會影響結果和效能。 在漏斗的末端,最後會得到精煉的輸出結果。

讓我們看看範例查詢。

StormEvents
| where StartTime between (datetime(2007-11-01) .. datetime(2007-12-01))
| where State == "FLORIDA"
| count
計數
28

附註

KQL 對所有項目皆區分大小寫,包括資料表名稱、資料表資料行名稱、運算子、函式等等。 關鍵詞可以用括弧和引號括住它們來做為標識碼([''][""])。 例如,['where']。 如需詳細資訊,請參閱 標識符命名規則

此查詢具有單一表格式表達式語句。 此語句開頭會參照名為 StormEvents 的資料表,並包含數個運算子、wherecount,各自以管線符號分隔。 源數據表的數據列會依 StartTime 數據行的值進行篩選,然後依 [State] 數據行的值進行篩選。 在最後一行中,查詢會傳回含有單一數據行的數據表,以及包含其餘數據列計數的單一數據列。

若要嘗試更多 Kusto 查詢,請參閱 教學課程:撰寫 Kusto 查詢

管理命令

相較於 Kusto 查詢,Management 命令 是 Kusto 處理或修改資料或元數據的要求。 例如,下列管理命令會建立具有兩個數據行的新 Kusto 數據表,LevelText

.create table Logs (Level:string, Text:string)

管理命令有自己的語法,這不是 KQL 語法的一部分,但兩者共用許多概念。 特別是,管理命令與查詢的區別是命令文字中的第一個字元是點 (.) 字元 (無法啟動查詢)。 這種區別可防止許多種類的安全性攻擊,只是因為它會防止將管理命令內嵌在查詢中。

並非所有管理命令都會修改數據或元數據。 以 .show開頭的大型命令類別是用來顯示元數據或數據。 例如,.show tables 命令會傳回目前資料庫中所有數據表的清單。

如需管理命令的詳細資訊,請參閱 管理命令概觀

其他服務中的 KQL

其他許多Microsoft服務都會使用 KQL。 如需在這些環境中使用 KQL 的特定資訊,請參閱下列連結: