使用 Azure 原則和計劃大規模建立診斷設定

若要監視 Azure 資源,您必須為每個資源建立診斷設定。 當您有許多資源時,此流程的管理可能會變困難。 若要簡化大規模建立和套用診斷設定的流程,請使用 Azure 原則,以自動產生新資源與現有資源的診斷設定。

每個 Azure 資源類型都有一組唯一的類別,診斷設定中會列出這些類別。 每個資源類型都需要個別的原則定義。 某些資源類型具有內建原則定義,您可以在不修改的情況下指派這些定義。 針對其他資源類型,您可以建立自訂定義。

記錄類別群組

記錄類別群組,將類型類似的記錄分組在一起。 類別群組可讓您輕鬆地在單一命令中參考多個記錄。 存在一個內含所有記錄的 allLogs 類別群組。 另外還有內含所有稽核記錄的稽核類別群組。 藉由使用類別群組,您就可以定義原則;此原則會在將新的記錄類別新增至群組時動態更新。

適用於 Azure 監視器的內建原則定義

每個資源類型通常會有三個內建原則定義,與要將診斷傳送至其中的三個目的地對應:

  • Log Analytics 工作區
  • Azure 儲存體帳戶
  • 事件中樞

根據您需要的目的地,為資源類型指派原則。

已開發一組以稽核記錄類別群組為基礎的內建原則和計劃,以協助您只透過幾個步驟,就能套用診斷設定。 如需詳細資訊,請參閱使用內建原則依類別群組啟用診斷設定。

如需 Azure 監視器內建原則的完整清單,請參閱 Azure 監視器的 Azure 原則內建定義

自訂原則定義

針對沒有內建原則的資源類型,您必須建立自訂原則定義。 您可以藉由複製現有的內建原則,然後針對資源類型進行修改,在 Azure 入口網站中手動新建原則。 或者使用 PowerShell 資源庫中的指令碼,以程式設計方式建立原則。

Create-AzDiagPolicy 指令碼會針對您可以使用 PowerShell 或 Azure CLI 安裝的特定資源類型建立原則檔案。 請使用下列程序來建立診斷設定的自訂原則定義:

  1. 確保您已安裝 Azure PowerShell

  2. 使用下列命令安裝指令碼:

    Install-Script -Name Create-AzDiagPolicy
    
  3. 使用參數執行指令碼,以指定傳送記錄的位置。 將提示您指定訂閱與資源類型。

    例如,若要建立將記錄傳送至 Log Analytics 工作區與事件中樞的原則定義,請使用下列命令:

    Create-AzDiagPolicy.ps1 -ExportLA -ExportEH -ExportDir ".\PolicyFiles"  
    

    或者,您可以在命令中指定訂閱與資源類型。 例如,若要針對 SQL Server 資料庫建立將記錄傳送至 Log Analytics 工作區與事件中樞的原則定義,請使用下列命令:

    Create-AzDiagPolicy.ps1 -SubscriptionID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -ResourceType Microsoft.Sql/servers/databases  -ExportLA -ExportEH -ExportDir ".\PolicyFiles"  
    
  4. 指令碼會為每個原則定義建立個別的資料夾。 每個資料夾都包含三個名為 azurepolicy.jsonazurepolicy.rules.jsonazurepolicy.parameters.json 的檔案。 若您想要在 Azure 入口網站中手動建立原則,可以複製並貼上 azurepolicy.json 的內容,因為其包括整個原則定義。 搭配 PowerShell 或 Azure CLI 一起使用其他兩個檔案,從命令列建立原則定義。

    下列範例顯示如何從 PowerShell 與 Azure CLI 安裝原則定義。 每個範例都包括指定 Monitoring 類別的中繼資料,以將新的原則定義與內建原則定義分組。

    New-AzPolicyDefinition -name "Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace" -policy .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json -parameter .\Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json -mode All -Metadata '{"category":"Monitoring"}'
    
    az policy definition create --name 'deploy-diag-setting-sql-database--workspace' --display-name 'Deploy Diagnostic Settings for SQL Server database to Log Analytics workspace'  --rules 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.rules.json' --params 'Apply-Diag-Settings-LA-Microsoft.Sql-servers-databases\azurepolicy.parameters.json' --subscription 'AzureMonitor_Docs' --mode All
    

計畫

常見的策略是建立計畫 (包括為每個 Azure 服務建立診斷設定的原則定義),而不是為每個原則定義建立指派。 依據您管理環境的方式,建立計畫與管理群組、訂閱或資源群組之間的指派。 此策略提供下列優點:

  • 為計畫建立單一指派,而不是針對每個資源類型建立多個指派。 針對多個監視群組、訂閱或資源群組使用相同的計畫。
  • 當您必須新增資源類型或目的地時,請修改計畫。 例如,您的初始需求可能是只將資料傳送至 Log Analytics 工作區,但稍後您想要新增事件中樞。 修改計畫,而不是建立新的指派。

如需建立計畫的詳細資料,請參閱建立及指派計畫定義。 請考量下列建議事項:

  • Category 設定為 Monitoring,以將其與相關的內建原則定義及自訂原則定義分組。
  • 使用一般計畫參數,而不是指定 Log Analytics 工作區的詳細資料,以及計畫中包含的原則定義事件中樞。 此參數可讓您輕鬆地為所有原則定義指定通用值,並視需要變更該值。

Screenshot that shows settings for initiative definition.

指派

依據要監視的資源範圍,將計畫指派給 Azure 管理群組、訂閱或資源群組。 管理群組對於範圍原則很實用,尤其是當您的組織有多個訂閱時。

Screenshot of the settings for the Basics tab in the Assign initiative section of the Diagnostic settings to Log Analytics workspace in the Azure portal.

藉由使用計畫參數,您可以針對計畫中的所有原則定義來指定工作區或任何其他詳細資料。

Screenshot that shows initiative parameters on the Parameters tab.

補救

此計劃將會在建立時套用至每部虛擬機器。 補救工作會將計畫中的原則定義部署至現有的資源,以便為已建立的任何資源建立診斷設定。

當您使用 Azure 入口網站建立指派時,可以選擇同時建立補救工作。 如需補救的詳細資料,請參閱使用 Azure 原則補救不相容的資源

Screenshot that shows initiative remediation for a Log Analytics workspace.

疑難排解

不支援計量類別

部署診斷設定時,您會收到類似「不支援計量類別 'xxxx'」的錯誤訊息。 即使您先前的部署成功,還是可能會收到此錯誤。

使用 Resource Manager 範本、REST API、Azure CLI 或 Azure PowerShell 時會發生此問題。 因為只會顯示支援的類別名稱,透過 Azure 入口網站建立的診斷設定不會受到影響。

該問題是基礎 API 中最近的變更所造成。 不支援 'AllMetrics' 以外的計量類別,且除了少數特定 Azure 服務之外,一律不支援。 在過去,部署診斷設定時會忽略其他類別名稱。 Azure 監視器後端會將這些類別重新導向至 'AllMetrics'。 自 2021 年 2 月起,後端已更新,以特別確認提供的計量類別正確無誤。 此變更導致某些部署失敗。

若您收到此錯誤,請更新您的部署,以將任何計量類別名稱取代為 'AllMetrics' 來修正該問題。 若部署先前新增了多個類別,則應該只保留一個具有 'AllMetrics' 參考的類別。 若您繼續遇到問題,請透過 Azure 入口網站連絡 Azure 支援。

設定會因為 resourceID 中的非 ASCII 字元而消失

診斷設定不支援帶有非 ASCII 字元的 resourceID (例如:Preproducción)。 您無法在 Azure 中重新命名,因此唯一選項是建立不含非 ASCII 字元的新資源。 若字元位於資源群組中,您可以將其底下的資源移至新的資源群組。 否則,您必須重新建立資源。

下一步