共用方式為


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

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

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

注意

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

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

注意

此教學課程會使用來自 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()

下一步