共用方式為


教學課程:使用 Resource Manager 範本將工作區資料收集規則中的轉換新增至 Azure 監視器

本教學課程會逐步引導您使用 Resource Manager 範本在工作區資料收集規則中設定範例轉換。 Azure 監視器中的轉換可讓您在傳入資料傳送至目的地之前對其進行篩選或修改。 工作區轉換可針對尚未使用 Azure 監視器資料擷取管道的工作流程,提供擷取時間轉換的支援。

工作區轉換會一起儲存在工作區的單一資料收集規則 (DCR) 中,稱為工作區 DCR。 每個轉換都與特定資料表相關聯。 轉換會套用至從任何未使用 DCR 的工作流程傳送至此資料表的所有資料。

注意

本教學課程使用 Resource Manager 範本和 REST API 來設定工作區轉換。 如需使用 Azure 入口網站的相同教學課程,請參閱教學課程:使用 Azure 入口網站,將工作區資料收集規則中的轉換新增至 Azure 監視器

在本教學課程中,您將了解:

  • 設定 Log Analytics 工作區中資料表的工作區轉換
  • 為擷取時間轉換撰寫記錄查詢。

注意

此教學課程會使用來自 Azure Cloud Shell 的 PowerShell,透過 Azure 監視器資料表 API 與 Azure 入口網站進行 REST API 呼叫,以安裝 Resource Manager 範本。 您可以使用任何其他方法來進行這些呼叫。

必要條件

若要完成此教學課程,您需要下列內容:

教學課程概觀

在本教學課程中,您將藉由篩選出特定記錄來減少 LAQueryLogs 資料表的儲存體需求。 您也會在剖析資料行資料時移除資料行的內容,以將資料片段儲存在自訂資料行中。 當您在工作區中啟用記錄查詢稽核時,系統會建立 LAQueryLogs 資料表,但這僅供教學課程示範使用。 您可以使用此相同的基本程序,為 Log Analytics 工作區中任何支援的資料表建立轉換。

啟用查詢稽核記錄

您必須啟用工作區的查詢稽核,才能建立將使用的 LAQueryLogs 資料表。 並非所有擷取時間轉換都需要執行此動作。 其目的只是為了產生此範例轉換將使用的範例資料。

  1. 從 Azure 入口網站的 [Log Analytics 工作區] 功能表,選取 [診斷設定],然後選取 [新增診斷設定]

    螢幕擷取畫面:診斷設定。

  2. 提供診斷設定的名稱並選取工作區,以便將稽核資料儲存在相同的工作區中。 選取 [稽核] 類別,然後按一下 [儲存] 以儲存診斷設定並關閉診斷設定頁面。

    螢幕擷取畫面:新增診斷設定。

  3. 選取 [記錄],然後執行一些查詢以在 LAQueryLogs 中填入一些資料。 這些查詢不需要實際傳回任何資料。

    螢幕擷取畫面:範例記錄查詢。

更新資料表結構描述

您必須先對資料表進行下列兩項變更,才能建立轉換:

  • 資料表必須啟用工作區轉換。 任何具有轉換的資料表都需要執行此動作,即使該轉換未修改資料表的結構描述也一樣。
  • 必須將轉換所填入的任何其他資料行新增至資料表。

使用資料表 - 更新 API,透過下列 PowerShell 程式碼設定資料表。 呼叫此 API 可讓資料表進行工作區轉換,而不論是否已定義自訂資料行。 在此範例中,該資料表包含名為 Resources_CF 的自訂資料行,其中將填入轉換查詢。

重要

新增至內建資料表的任何自訂資料行都必須以 _CF 結尾。 新增至自訂資料表 (名稱結尾是 _CL 的資料表) 的資料行不需要有此尾碼。

  1. 按一下 Azure 入口網站中的 [Cloud Shell] 按鈕,並確保已將環境設定為 [PowerShell]

    開啟 Cloud Shell 的螢幕擷取畫面。

  2. 複製下列 PowerShell 程式碼,並以您工作區的詳細資料取代 Path 參數。

    $tableParams = @'
    {
        "properties": {
            "schema": {
                "name": "LAQueryLogs",
                "columns": [
                    {
                        "name": "Resources_CF",
                        "description": "The list of resources, this query ran against",
                        "type": "string",
                        "isDefaultDisplay": true,
                        "isHidden": false
                    }
                ]
            }
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/LAQueryLogs?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
    
  3. 將程式碼貼至 Cloud Shell 提示中加以執行。

    Cloud Shell 中指令碼的螢幕擷取畫面。

  4. 您可以前往 Azure 入口網站中的 [Log Analytics 工作區] 功能表,確認已新增資料行。 選取 [記錄] 以開啟 Log Analytics,然後展開 LAQueryLogs 資料表以檢視其資料行。

    Log Analytics 與新資料行的螢幕擷取畫面。

定義轉換查詢

使用 Log Analytics 測試轉換查詢,再將其新增至資料收集規則。

  1. 在 Azure 入口網站的 [Log Analytics 工作區] 功能表中開啟您的工作區,然後選取 [記錄] 以開啟 Log Analytics。

  2. 執行下列查詢以檢視 LAQueryLogs 資料表的內容。 注意 RequestContext 資料行的內容。 轉換會從此資料行擷取工作區名稱,並移除其中的其餘資料。

    LAQueryLogs
    | take 10
    

    Log Analytics 中初始查詢的螢幕擷取畫面。

  3. 將查詢修改如下:

    LAQueryLogs
    | where QueryText !contains 'LAQueryLogs'
    | extend Context = parse_json(RequestContext)
    | extend Workspace_CF = tostring(Context['workspaces'][0])
    | project-away RequestContext, Context
    

    這會進行下列變更:

    • 卸除與查詢 LAQueryLogs 資料表本身相關的資料列以節省空間,因為這些記錄項目並沒有用。
    • 新增所查詢工作區名稱的資料行。
    • RequestContext 資料行移除資料以節省空間。

    Log Analytics 中已修改查詢的螢幕擷取畫面。

  4. 對查詢進行下列變更,以在轉換中使用:

    • 不要指定資料表名稱 (在此案例中為 LAQueryLogs) 作為此查詢的資料來源,請改用 source 關鍵字。 這是一個虛擬資料表,一律代表轉換查詢中的傳入資料。
    • 移除轉換查詢不支援的任何運算子。 如需支援的運算子詳細清單,請參閱支援的 KQL 功能
    • 將查詢壓平合併成單行,使其可以放入 DCR JSON 中。

    以下是您將在這些修改之後用於轉換的查詢:

    source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''
    

建立資料收集規則 (DCR)

由於這是工作區中的第一個轉換,因此您必須建立工作區轉換 DCR。 如果您為相同工作區中的其他資料表建立工作區轉換,則必須儲存在此相同的 DCR 中。

  1. 在 Azure 入口網站的搜尋方塊中鍵入「範本」,然後選取 [Deploy a custom template] \(部署自訂範本\)

    部署自訂範本的螢幕擷取畫面。

  2. 按一下 [Build your own template in the editor] \(在編輯器中建置您自己的範本\)

    螢幕擷取畫面:在編輯器中建置範本。

  3. 將下方的 Resource Manager 範本貼至編輯器中,然後按一下 [儲存]。 此範本會定義 DCR,並包含轉換查詢。 您不必修改此範本,因為這會收集其參數的值。

    螢幕擷取畫面:編輯 Resource Manager 範本。

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "dataCollectionRuleName": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the name of the Data Collection Rule to create."
                }
            },
            "location": {
                "type": "string",
                "defaultValue": "westus2",
                "allowedValues": [
                    "westus2",
                    "eastus2",
                    "eastus2euap"
                ],
                "metadata": {
                    "description": "Specifies the location in which to create the Data Collection Rule."
                }
            },
            "workspaceResourceId": {
                "type": "string",
                "metadata": {
                    "description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
                }
            }
        },
        "resources": [
            {
                "type": "Microsoft.Insights/dataCollectionRules",
                "name": "[parameters('dataCollectionRuleName')]",
                "location": "[parameters('location')]",
                "apiVersion": "2021-09-01-preview",
                "kind": "WorkspaceTransforms",
                "properties": {
                    "destinations": {
                        "logAnalytics": [
                            {
                                "workspaceResourceId": "[parameters('workspaceResourceId')]",
                                "name": "clv2ws1"
                            }
                        ]
                    },
                    "dataFlows": [
                        {
                            "streams": [
                                "Microsoft-Table-LAQueryLogs"
                            ],
                            "destinations": [
                                "clv2ws1"
                            ],
                            "transformKql": "source |where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Resources_CF = tostring(Context['workspaces']) |extend RequestContext = ''"
                        }
                    ]
                }
            }
        ],
        "outputs": {
            "dataCollectionRuleId": {
                "type": "string",
                "value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
            }
        }
    }
    
  4. 在 [自訂部署] 畫面上,指定 [訂閱] 和 [資源群組] 以儲存資料收集規則,然後提供在範本中定義的值。 這包括資料收集規則的名稱,以及您在上一個步驟中收集的工作區資源識別碼。 [位置] 應該與工作區的位置相同。 [區域] 已填入,並且用於資料收集規則的位置。

    編輯自訂部署值的螢幕擷取畫面。

  5. 檢閱詳細資料時,依序按一下 [檢閱 + 建立] 和 [建立]

  6. 部署完成時,展開 [部署詳細資料] 方塊,並按一下資料收集規則以檢視其詳細資料。 按一下 [JSON 檢視]

    資料收集規則詳細資料的螢幕擷取畫面。

  7. 複製資料收集規則的 [資源識別碼]。 您會在下一個步驟中使用此資訊。

    螢幕擷取畫面:資料收集規則 JSON 檢視。

啟用轉換的最後一個步驟是將 DCR 連結至工作區。

重要

工作區只能連接到單一 DCR,且連結的 DCR 必須包含此工作區作為目的地。

使用工作區 - 更新 API,透過下列 PowerShell 程式碼設定資料表。

  1. 按一下 [Cloud Shell] 按鈕,再次開啟 Cloud Shell。 複製下列 PowerShell 程式碼,並以您工作區和 DCR 的值取代參數。

    $defaultDcrParams = @'
    {
        "properties": {
            "defaultDataCollectionRuleResourceId": "/subscriptions/{subscription}/resourceGroups/{resourcegroup}/providers/Microsoft.Insights/dataCollectionRules/{DCR}"
        }
    }
    '@
    
    Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}?api-version=2021-12-01-preview" -Method PATCH -payload $defaultDcrParams
    
  2. 將程式碼貼至 Cloud Shell 提示中加以執行。

    將工作區連結至 DCR 的指令碼螢幕擷取畫面。

測試轉換

允許大約 30 分鐘的時間讓轉換生效,然後您可以對資料表執行查詢來進行測試。 只有在套用轉換之後傳送至資料表的資料才會到影響。

針對本教學課程,請執行一些範例查詢,將資料傳送至 LAQueryLogs 資料表。 包含對 LAQueryLogs 的一些查詢,以便確認轉換會篩選這些記錄。 請注意,輸出具有新的 Workspace_CF 資料行,而且沒有 LAQueryLogs 的記錄。

疑難排解

本節描述您可能會收到的不同錯誤狀況,以及加以更正的方式。

Log Analytics 中的 IntelliSense 無法辨識資料表中的新資料行

驅動 IntelliSense 的快取最多可能需要 24 小時才能更新。

動態資料行上的轉換無法運作

目前有影響動態資料行的已知問題。 暫時的因應措施是先使用 parse_json() 明確剖析動態資料行資料,再對其執行任何作業。

下一步