Jupyter 筆記本提供互動式環境,可探索、分析和視覺化 Microsoft Sentinel 資料湖中的資料。 透過筆記本,您可以在一個地方編寫和執行程式碼、記錄工作流程以及查看結果。 這使得執行資料探索、建立進階分析解決方案以及與他人分享見解變得容易。 透過在 Visual Studio Code 中利用 Python 和 Apache Spark,筆記本可協助您將原始安全性資料轉換為可操作的情報。
本文說明如何在 Visual Studio Code 中使用 Jupyter 筆記本來探索資料湖資料並與之互動。
先決條件
上線至 Microsoft Sentinel 資料湖
若要在 Microsoft Sentinel 資料湖中使用筆記本,您必須先上線至資料湖。 如果您尚未上線至 Microsoft Sentinel 資料湖,請參閱上線至 Microsoft Sentinel 資料湖。 如果您最近才上線至資料湖,則可能需要一些時間,等到擷取了足夠的資料量之後,才能使用筆記本建立有意義的分析。
權限
Microsoft Entra ID 角色可提供資料湖中所有工作區的廣泛存取權。 或者,您可以使用 Azure RBAC 角色授與個別工作區的存取權。 具有 Microsoft Sentinel 工作區 Azure RBAC 權限的使用者,可以針對資料湖層的這些工作區執行筆記本。 如需詳細資訊,請參閱 Microsoft Sentinel 中的角色和許可權。
若要在分析層中建立新的自訂資料表,必須在 Log Analytics 工作區中為資料湖受控識別指派 Log Analytics 參與者 角色。
若要指派角色,請遵循下列步驟:
- 在 Azure 入口網站中,流覽至您要指派角色的 Log Analytics 工作區。
- 在左側導覽窗格中選取 [存取控制 (IAM)]。
- 點擊新增角色指派。
- 在 [角色] 資料表中,選取 [Log Analytics 參與者],然後選取 [下一步]
- 選取 [受控身分],然後選取 [選取成員]。
- 您的資料湖管理識別是系統指派的管理識別,名為
msg-resources-<guid>。 選取該受控識別,然後選取 [選取]。 - 選取 [檢閱並指派]。
如需將角色指派給受控識別的詳細資訊,請參閱 使用 Azure 入口網站指派 Azure 角色。
安裝 Visual Studio Code 和 Microsoft Sentinel 延伸模組
如果您還沒有 Visual Studio Code,請下載並安裝適用於 Mac、 Linux 或 Windows 的 Visual Studio Code。
適用於 Visual Studio Code (VS Code) 的 Microsoft Sentinel 延伸模組是從延伸模組市集安裝。 若要安裝擴充功能,請依照下列步驟操作:
- 選取左側工具列中的 Extensions Marketplace。
- 搜尋「Sentinel」。
- 選取 Microsoft Sentinel 延伸模組,然後選取 [安裝]。
- 安裝擴充功能之後,Microsoft Sentinel 防護圖示會出現在左側工具列中。
安裝適用於 Visual Studio Code 的 GitHub Copilot 擴充功能,以啟用在程式開發筆記本中的程式碼補全與建議功能。
- 在延伸模組市集中搜尋 GitHub Copilot 並安裝它。
- 安裝之後,請使用您的 GitHub 帳戶登入 GitHub Copilot。
探索資料湖階層資料表
安裝 Microsoft Sentinel 延伸模組之後,您可以開始探索資料湖層資料表,並建立 Jupyter 筆記本來分析資料。
登入到 Microsoft Sentinel 延伸模組
選取左側工具列中的 Microsoft Sentinel 防護圖示。
一個包含以下文字的對話窗口會出現:擴充功能“Microsoft Sentinel”希望使用 Microsoft 登錄。 選取 [允許]。
選取您的帳戶名稱以完成登入。
檢視資料湖的資料表和作業
登入之後,Sentinel 延伸模組會在左窗格中顯示 Lake 資料表 和 作業 的清單。 資料表會依資料庫和類別分組。 選取表格以查看資料行定義。
如需工作的相關資訊,請參閱 工作和排程。
建立新的筆記本
若要建立新的筆記本,請使用下列其中一種方法。
在新的筆記本中,將下列程式碼貼到第一個儲存格中。
from sentinel_lake.providers import MicrosoftSentinelProvider data_provider = MicrosoftSentinelProvider(spark) table_name = "EntraGroups" df = data_provider.read_table(table_name) df.select("displayName", "groupTypes", "mail", "mailNickname", "description", "tenantId").show(100, truncate=False)
編輯器會為資料湖中的 MicrosoftSentinelProvider 類別和資料表名稱提供 IntelliSense 程式碼完成功能。
選取 [中型] 以在中型執行階段集區中執行筆記本。 如需不同執行階段的詳細資訊,請參閱 選取適當的 Microsoft Sentinel 執行階段。
備註
選取核心會啟動 Spark 工作階段,並在筆記本中執行程式碼。 選取集區後,工作階段可能需要 3 到 5 分鐘才會啟動。 後續執行時會較快,因為工作階段已處於作用中狀態。
啟動工作階段時,筆記本中的程式碼會執行,結果會顯示在程式碼儲存格下方的輸出窗格中,例如:
如需示範如何與 Microsoft Sentinel 資料湖互動的範例筆記本,請參閱 Microsoft Sentinel 資料湖的範例筆記本。
狀態列
筆記本底部的狀態列提供筆記本和 Spark 工作階段目前狀態的相關資訊。 狀態列包含下列資訊:
所選 Spark 集區的虛擬核心使用率百分比。 將滑鼠停留在百分比上,以查看使用的虛擬核心數目,以及集區中可用的虛擬核心總數。 這些百分比代表登入帳戶的互動式和任務工作負載的目前使用量。
Spark 工作階段的連線狀態,例如
Connecting、Connected或Not Connected。
設定工作階段逾時
您可以設定互動式筆記本的工作階段逾時和逾時警告。 若要變更逾時,請在筆記本底部的狀態列中選取連線狀態。 從下列選項中選擇:
設定工作階段逾時期間:設定工作階段逾時前的時間(以分鐘為單位)。預設值為 30 分鐘。
重設工作階段逾時期間:將工作階段逾時重設為預設值 30 分鐘。
設定工作階段逾時警告期間:設定在逾時之前顯示工作階段即將逾時的警告的時間(以分鐘為單位)。預設值為 5 分鐘。
重設工作階段逾時警告期間:將工作階段逾時警告重設為預設值 5 分鐘。
在筆記本中使用 GitHub Copilot
使用 GitHub Copilot 協助您在筆記本中撰寫程式碼。 GitHub Copilot 會根據程式碼的內容提供程式碼建議和自動完成。 若要使用 GitHub Copilot,請確定您在 Visual Studio Code 中安裝了 GitHub Copilot 延伸模組 。
從 Microsoft Sentinel 資料湖的範例筆記本 複製程式碼,並將其儲存在您的筆記本資料夾中,以提供 GitHub Copilot 的內容。 然後,GitHub Copilot 將能夠根據筆記本的內容建議程式碼完成。
下列範例顯示 GitHub Copilot 產生程式碼檢閱。
Microsoft Sentinel 提供者類別
若要連線到 Microsoft Sentinel 資料湖,請使用 SentinelLakeProvider 類別。
這個類別是模組的一部分 access_module.data_loader ,提供與資料湖互動的方法。 若要使用此類別,請匯入它,並使用會話建立 spark 類別的實例。
from sentinel_lake.providers import MicrosoftSentinelProvider
data_provider = MicrosoftSentinelProvider(spark)
如需可用方法的詳細資訊,請參閱 Microsoft Sentinel 提供者類別參考。
選擇適當的執行階段集區
有三個運行時資源池可用於在 Microsoft Sentinel 擴充套件中執行 Jupyter 筆記本。 每個集區都是針對不同的工作負載和效能需求而設計的。 執行階段集區的選擇會影響 Spark 任務的效能、成本和執行時間。
| 執行階段集區 | 推薦使用案例 | 特性 |
|---|---|---|
| 小型 | 開發、測試和輕量探勘分析。 具有簡單轉換的小型工作負載。 優先考慮成本效益。 |
適用於小型工作負載 簡單的轉換。 成本更低,執行時間更長。 |
| 中度 | 具有連接、彙總和 ML 模型訓練的 ETL 作業。 中等工作負載涉及複雜的轉換。 |
比小型版改進了性能。 處理平行處理原則和適度的記憶體密集型作業。 |
| 大型 | 深度學習和 ML 工作負載。 廣泛的資料重排、大型連接或即時處理。 關鍵執行時間。 |
高記憶體和運算能力。 最小的延誤。 最適合大型、複雜或對時間要求嚴格的工作負載。 |
備註
首次存取時,核心選項可能需要大約 30 秒的時間才能載入。
選取執行階段集區之後,工作階段可能需要 3 到 5 分鐘的時間才會啟動。
檢視訊息、記錄和錯誤
訊息記錄和錯誤訊息會顯示在 Visual Studio Code 的三個區域中。
隱藏輸出 窗格。
- 在 [輸出] 窗格中,從下拉式清單中選取 [ Microsoft Sentinel ]。
- 選取 [偵錯] 以包含詳細的記錄項目。
筆記本中的行內訊息提供有關程式碼儲存格執行的意見反應和資訊。 這些訊息包括執行狀態更新、進度指示器,以及與前一個儲存格中的程式碼相關的錯誤通知
Visual Studio Code 右下角的通知快顯視窗 (也稱為快顯通知訊息) 提供筆記本和 Spark 工作階段內作業狀態的即時警示和更新。 這些通知包括訊息、警告和錯誤警示,例如成功連線到 Spark 會話,以及逾時警告。
作業和排程
您可以使用適用於 Visual Studio Code 的 Microsoft Sentinel 延伸模組,將作業排程為在特定時間或間隔執行。 作業可讓您將資料處理工作自動化,以摘要、轉換或分析 Microsoft Sentinel 資料湖中的資料。 作業也可用來處理資料,並將結果寫入到資料湖層或分析層中的自訂資料表。 如需建立和管理任務的詳細資訊,請參閱 建立和管理 Jupyter 筆記本任務。
VS Code Notebook 的服務參數和限制
下一節列出使用 VS Code 筆記本時 Microsoft Sentinel 資料湖的服務參數和限制。
| 類別 | 參數/限制 |
|---|---|
| 分析層中的自訂資料表 | 分析層中的自訂資料表無法從筆記本中刪除;使用 Log Analytics 刪除這些資料表。 如需詳細資訊,請參閱 在 Azure 監視器記錄中新增或刪除資料表和資料行 |
| 閘道 Web 通訊端逾時 | 2 小時 |
| Interactive Query 逾時 | 2 小時 |
| 互動工作階段閒置逾時 | 20 分鐘 |
| 語言 | Python |
| 筆記本工作逾時 | 8 小時 |
| 並行筆記本工作數目上限 | 3 個,後續作業會排入佇列 |
| 互動式查詢的並行使用者上限 | 8 到 10 位 (在大型集區上) |
| 工作階段啟動時間 | Spark 計算工作階段大約需要 5-6 分鐘才能啟動。 您可以在 VS Code 筆記本底部檢視會話的狀態。 |
| 支援的程式庫 | 只有 Azure Synapse 程式庫 3.4 和抽象函式的 Microsoft Sentinel 提供者程式庫支援查詢資料湖。 不支援 Pip 安裝或自訂程式庫。 |
| VS Code UX 限制顯示記錄的功能 | 100,000 個資料列 |
故障排除
下表列出您在使用筆記本時可能遇到的常見錯誤、其根本原因,以及解決這些錯誤的建議動作。
| 錯誤類別 | 錯誤名稱 | 錯誤碼 | 錯誤訊息 | 建議的動作 |
|---|---|---|---|---|
| 資料庫錯誤 | 資料庫未找到 | 2001 | 找不到資料庫 {DatabaseName}。 | 確認資料庫存在。 如果資料庫是新的,請等待中繼資料重新整理。 |
| 資料庫錯誤 | 模棱兩可的資料庫名稱 | 2002 | 數個資料庫 (ID: {DatabaseID1}, {DatabaseID2}, ...) 共用名稱 {DatabaseName}。 提供特定的資料庫 ID。 | 當多個資料庫具有相同的名稱時,請指定資料庫識別碼。 |
| 資料庫錯誤 | DatabaseId不相符 | 2003 | 找不到資料庫 ({DatabaseName}, ID {DatabaseID})。 | 檢查資料庫名稱和 ID。 若要取得資料庫 ID,請列出所有資料庫。 |
| 資料庫錯誤 | ListDatabases失敗 | 2004 | 無法擷取資料庫。 重新啟動會話,然後重試。 | 重新啟動工作階段,並在幾分鐘後重試作業。 |
| 表格錯誤 | TableDoesNotExist | 2100 | 在資料庫 {DatabaseName} 中找不到資料表 {TableName}。 | 確認資料表存在於資料庫中。 如果資料表或資料庫是新的,請等待幾分鐘,然後再試一次。 |
| 表格錯誤 | 佈建未完成 | 2101 | 資料表 {TableName} 尚未備妥。 請在重新嘗試之前稍候幾分鐘。 | 正在配置資料表。 請在重新嘗試之前稍候幾分鐘。 |
| 表格錯誤 | DeltaTableMissing | 2102 | 資料表 {TableName} 是空的。 新表格最多可能需要幾個小時才能準備就緒。 | 可能需要幾個小時才能將分析資料表完全同步到資料湖中。 對於僅在資料湖中的資料表,請檢查是否需要載入或還原資料。 |
| 表格錯誤 | 欲刪除的資料表不存在 | 2103 | 無法刪除表格。 找不到資料表 {TableName}。 | 確認資料表存在於資料庫中。 如果資料表或資料庫是新的,請等待幾分鐘,然後再試一次。 |
| 授權失敗 | 缺少SASToken | 2201 | 無法存取表格。 重新啟動會話,然後重試。 | 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。 |
| 授權失敗 | 無效SASToken | 2202 | 無法存取表格。 重新啟動會話,然後重試。 | 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。 |
| 授權失敗 | 代幣已過期 | 2203 | 無法存取表格。 重新啟動會話,然後重試。 | 在嘗試擷取資料表的存取憑證時,授權失敗。 重新啟動會話,然後重試。 |
| 授權失敗 | TableInsufficientPermissions | 2204 | 資料庫 {DatabaseName} 中資料表 {TableName} 所需的存取權。 | 請聯絡管理員,要求存取表格或資料庫 (工作區)。 |
| 授權失敗 | 內部資料表存取被拒 | 2205 | 對資料表 {TableName} 的存取受到限制。 | 只能從筆記本存取系統或使用者定義的表格。 |
| 授權失敗 | 表格驗證失敗 | 2206 | 無法將資料儲存至資料表。 重新啟動會話,然後重試。 | 嘗試將資料儲存至表格時,授權失敗。 重新啟動會話,然後重試。 |
| 組態錯誤 | HadoopConfig失敗 | 2301 | 無法更新工作階段設定。 重新啟動會話,然後重試。 | 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。 |
| 資料錯誤 | JsonParsing失敗 | 2302 | 資料表中繼資料已損毀。 請連絡支援部門以尋求協助。 | 請連絡支援部門以尋求協助。 提供您的租用戶識別碼、資料表名稱和資料庫名稱。 |
| 表格架構錯誤 | TableSchemaMismatch | 2401 | 目標資料表中找不到欄位。 對齊 DataFrame 結構描述和目的地資料表,或使用覆寫模式。 | 更新 DataFrame 結構描述,以符合目標資料庫中的資料表。 您也可以在覆寫模式下完全取代表格。 |
| 表格架構錯誤 | 缺少必要的欄位 | 2402 | DataFrame 中缺少資料行 {ColumnName}。 檢查 DataFrame 結構描述,並將其與目的地資料表對齊。 | 更新 DataFrame 結構描述,以符合目標資料庫中的資料表。 您也可以在覆寫模式下完全取代表格。 |
| 表格架構錯誤 | 不允許更改欄位類型 | 2403 | 無法變更資料行 {ColumnName} 的資料類型。 | 不允許資料行的資料類型變更。 檢查目的地資料表中的現有資料行,並對齊 DataFrame 中的所有資料類型。 |
| 表格架構錯誤 | ColumnNullabilityChangeNotAllowed | 2404 | 無法變更資料行 {ColumnName} 的 Null 性。 | 無法更新資料行的可 NULL 性設定。 檢查目的地表格,並將設定與 DataFrame 對齊。 |
| IngestionError | 資料夾建立失敗 | 2501 | 無法建立資料表 {TableName} 的儲存體。 | 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。 |
| IngestionError | 子任務請求失敗 | 2502 | 無法建立資料表 {TableName} 的匯入作業。 | 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。 |
| IngestionError | 子工作創建失敗 | 2503 | 無法建立資料表 {TableName} 的匯入作業。 | 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。 |
| 輸入錯誤 | 無效寫入模式 | 2601 | 寫入模式無效。 使用附加或覆寫。 | 在儲存 DataFrame 之前,請指定有效的寫入模式 (附加或覆寫) 。 |
| 輸入錯誤 | 不允許分區 | 2602 | 無法分割分析資料表。 | 移除分析資料表中所有欄位的分割區。 |
| 輸入錯誤 | MissingTableSuffixLake | 2603 | 自訂資料表名稱無效。 資料湖中所有自訂資料表的名稱都必須以_SPRK結尾。 | 在將資料表名稱寫入資料湖之前,先將_SPRK作為尾碼新增至資料表名稱。 |
| 輸入錯誤 | MissingTableSuffixLA | 2604 | 自訂資料表名稱無效。 自訂分析資料表的所有名稱都必須以_SPRK_CL結尾。 | 在將資料表名稱寫入分析儲存之前,先將_SPRK_CL作為尾碼新增至資料表名稱。 |
| UnknownError (未知錯誤) | 內部伺服器錯誤 | 2901 | 發生錯誤。 重新啟動會話,然後重試。 | 此問題是暫時性的,可以透過重新啟動會話並重試來解決。 如果此問題仍然存在,請聯絡支援人員。 |