在 Azure 監控器中建立資料收集規則 (DCR)
在 Azure 監視器中建立資料收集規則 (DCR)的方法有很多種。 在某些情況下,Azure 監視器會根據您在 Azure 入口網站中設定的設定來建立和管理 DCR。 您可能甚至沒有意識到您在其中一些情況下使用 DCR。 不過,在其他案例中,您可能需要建立自己的 DCR,或直接在 JSON 中使用其定義來編輯現有的 DCR。 本文說明建立 DCR 的不同方法,以及編輯和疑難解答它們的建議。
注意
本文說明如何建立和編輯 DCR 本身。 若要建立和編輯數據收集規則關聯,請參閱 建立和管理數據收集規則關聯。
權限
您需要下列權限才能建立 DCR 與 DCR 關聯:
內建角色 | 範圍 | 原因 |
---|---|---|
監視參與者 |
|
建立或編輯 DCR,將規則指派給機器,部署關聯。 |
虛擬機器參與者 Azure Connected Machine 資源管理員 |
|
在 VM 上部署代理程式延伸模組 (虛擬機器)。 |
包含動作 Microsoft.Resources/deployments/* 的任何角色 |
|
部署 Azure Resource Manager 範本。 |
重要
在與目的地Log Analytics工作區或 Azure 監視器工作區相同的區域中建立 DCR。 您可以將 DCR 與租使用者中任何訂用帳戶或資源群組中的機器或容器產生關聯。 若要跨租用戶傳送資料,您必須先啟用 Azure Lighthouse。
使用 Azure 入口網站 建立或編輯 DCR
Azure 入口網站 為特定案例建立 DCR 提供了簡化的體驗。 使用此方法時,您不需要瞭解 DCR 的結構,雖然您在設定中可能受到限制,但稍後可能需要編輯 DCR 定義來實作進階功能,例如轉換。 每個案例的體驗會有所不同,因此請參閱下表中所述之特定案例的檔。
案例 | 描述 |
---|---|
啟用 VM 深入解析 | 當您在 VM 上啟用 VM Insights 時,會安裝 Azure 監視器代理程式,並建立 DCR 並與虛擬機建立關聯。 此 DCR 會收集一組預先定義的效能計數器,且不應該修改。 請參閱 啟用 VM 深入解析。 |
從 VM 收集客戶端數據 | 使用引導式介面在 Azure 入口網站 中建立 DCR,以從 VM 的用戶端操作系統選取不同的數據源。 範例包括 Windows 事件、Syslog 事件和文字記錄。 如有必要,會自動安裝 Azure 監視器代理程式,而且會在 DCR 與您選取的每個 VM 之間建立關聯。 請參閱使用 Azure 監視器代理程式收集資料。 |
計量匯出 | 使用引導式介面在 Azure 入口網站 中建立 DCR,以選取要收集的不同資源類型的計量。 DCR 與您選取的每個資源之間建立關聯。 如需計量匯出,請參閱建立數據收集規則 (DCR)。 |
資料表建立 | 當您使用 Azure 入口網站 在 Log Analytics 工作區中建立新的數據表時,您會上傳 Azure 監視器用來建立 DCR 的範例數據,包括轉換,可與記錄擷取 API 搭配使用。 您無法在 Azure 入口網站 中修改此 DCR,但可以使用本文中所述的任何方法加以修改。 請參閱建立自訂資料表。 |
Kubernetes 監視 | 若要監視 Kubernetes 叢集,您可以針對計量啟用記錄和 Prometheus 的 Container Insights。 系統會針對每個 建立 DCR,並與叢集中 Azure 監視器代理程式的容器化版本相關聯。 您可能需要修改容器深入解析 DCR 以新增轉換。 請參閱 在容器深入解析中啟用 Kubernetes 叢集 和數據 轉換的監視。 |
工作區轉換 DCR | 工作區轉換 DCR 提供尚未使用 DCR 之數據收集案例的轉換。 您可以使用 Azure 入口網站 來建立特定資料表的轉換,以建立此 DCR。 請參閱 建立工作區轉換 DCR。 |
DCR 定義
不論其建立方式為何,每個 DCR 都有遵循 標準 JSON 架構的定義。 若要使用 Azure 入口網站 以外的方法建立或編輯 DCR,您需要直接使用其 JSON 定義。 在某些情況下,您必須使用 JSON 定義,因為 Azure 入口網站 不提供視需要設定 DCR 的方式。
單擊 [概觀] 功能表中的 [JSON 檢視],即可在 Azure 入口網站 中檢視 DCR 的 JSON。
確認已在 [API 版本] 下拉式清單中選取最新版本的 API。 如果沒有,可能不會顯示某些 JSON。
您也可以呼叫 DCR REST API 來擷取 DCR 的 JSON。 例如,下列 PowerShell 腳本會擷取 DCR 的 JSON,並將其儲存至檔案。
$ResourceId = "<ResourceId>" # Resource ID of the DCR to edit
$FilePath = "<FilePath>" # File to store DCR content
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File -FilePath $FilePath
注意
您可以在 PowerShell 或 az monitor data-collection rule show
Azure CLI 的命令中使用 Get-AzDataCollectionRule
Cmdlet 取得 DCR 的詳細數據,但不會以編輯所需的格式提供 JSON。 請改用PowerShell或 CLI 來呼叫 REST API,如範例所示。
使用 JSON 建立或編輯 DCR
除了編輯現有的 DCR 之外,您還可以使用其中 一個範例 DCR 建立新的 DCR ,以提供數個常見案例的 JSON。 使用 Azure 監視器中資料收集規則結構中的資訊,修改特定環境和需求的 JSON 檔案。
一旦您有 DCR 的定義,您就可以使用 Azure 入口網站、CLI、PowerShell、API 或 ARM 範本將其部署至 Azure 監視器。
使用 CLI 建立或編輯 DCR
使用 az monitor data-collection rule create 命令從您的 JSON 檔案建立 DCR。 您可以使用這個相同的命令來更新現有的 DCR。
az monitor data-collection rule create --location 'eastus' --resource-group 'my-resource-group' --name 'my-dcr' --rule-file 'C:\MyNewDCR.json' --description 'This is my new DCR'
注意
雖然您可以選擇使用 PowerShell 或 CLI 命令來建立和編輯 DCR,但如果發生編譯錯誤,API 和 ARM 方法會提供更詳細的錯誤訊息。
在下列範例中,DCR 會指定目的地 Log Analytics 工作區中不存在的數據表名稱。 PowerShell 命令會傳回一般錯誤訊息,但 API 呼叫會傳回指定確切錯誤的詳細錯誤訊息。
編輯和測試 DCR 的策略
當您使用其 JSON 定義建立或編輯 DCR 時,通常需要進行多個更新,以達到您想要的功能。 您需要有效率的方法來更新 DCR,如果您未取得預期的結果,請進行疑難解答,然後進行其他更新。 如果您要將轉換新增至 DCR,因為您必須驗證查詢是否如預期般運作,這特別如此。 由於您無法直接在 Azure 入口網站 中編輯 JSON,以下是您可以使用的一些策略。
使用本機檔案作為 DCR 的來源
如果您使用本機 JSON 檔案作為您建立和編輯之 DCR 的來源,您一律可以存取最新版的 DCR 定義。 如果您想要使用 GitHub 或 Azure DevOps 等版本控制工具來管理變更,則這是理想的選擇。 您也可以使用 VS Code 之類的編輯器來變更 DCR,然後使用命令行工具來更新 Azure 監視器中的 DCR,如上所述。
以下是範例 PowerShell 腳本,可用來從來源檔案將變更推送至 DCR。 這會先驗證來源檔案是否為有效的 JSON,再將它傳送至 Azure 監視器。
param (
[Parameter(Mandatory = $true)][string]$ResourceId, # Resource ID of the DCR
[Parameter(Mandatory = $true)][string]$FilePath # Path to the DCR JSON file to upload
)
# Read the DCR content from the file
Write-Host "Reading new DCR content from: $FilePath" -ForegroundColor Green
$DCRContent = Get-Content $FilePath -Raw
# Ensure the DCR content is valid JSON
try {
$ParsedDCRContent = $DCRContent | ConvertFrom-Json
} catch {
Write-Host "Invalid JSON content in file: $FilePath" -ForegroundColor Red
exit 1
}
# Create or update the DCR in the specified resource group
Write-Host "Deploying DCR $ResourceId ..." -ForegroundColor Green
Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method PUT -Payload $DCRContent
將 DCR 內容儲存至暫存盤
如果您沒有本機檔案中的 DCR 定義,您可以從 Azure 監視器擷取定義,並將它儲存至暫存盤。 接著,您可以使用 VS Code 之類的編輯器來編輯檔案,再將更新推送至 Azure 監視器。
以下是可用來編輯 Azure 監視器中現有 DCR 的 PowerShell 腳本範例。 腳本會擷取 DCR 定義,並將它儲存至暫存盤,再啟動 VS Code。 當您向文稿指出已儲存變更之後,DCR 會更新為新的內容,並刪除暫存盤。
param ([Parameter(Mandatory=$true)] $ResourceId)
# Get DCR content and save it to a local file
$FilePath = "temp.dcr"
$DCR = Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method GET
$DCR.Content | ConvertFrom-Json | ConvertTo-Json -Depth 20 | Out-File $FilePath
# Open DCR in code editor
code $FilePath | Wait-Process
{
#write DCR content back from the file
$DCRContent = Get-Content $FilePath -Raw
Invoke-AzRestMethod -Path ("$ResourceId"+"?api-version=2023-03-11") -Method PUT -Payload $DCRContent
}
#Delete temporary file
Remove-Item $FilePath
使用 ARM 範本來就地編輯 DCR
如果您想要在 Azure 入口網站 中完全執行編輯,您可以使用匯出範本功能來擷取 DCR 的 ARM 範本。 然後,您可以在 JSON 中修改定義,並在 Azure 入口網站 中重新部署它。
選取您要在 Azure 入口網站 中修改的 DCR,然後選取 [匯出範本]。 然後按兩下 [ 部署] 以重新部署 相同的範本。
按兩下 [編輯範本 ] 以開啟 DCR 的可編輯 JSON 版本。 請勿變更參數值。
對 DCR 進行任何必要的變更,然後按下 [ 儲存]。
如果您想要建立新的 DCR,請變更 name 參數。 否則,請將參數保留不變。 按兩下 [ 檢閱 + 建立 ] 以部署修改過的範本和 [建立 ] 以建立新的 DCR。
如果 DCR 有效且沒有任何錯誤,部署將會成功,且 DCR 會以新的組態更新。 按兩下 [移至資源 ] 以開啟修改過的 DCR。
如果 DCR 發生編譯錯誤,您會收到部署失敗的訊息。 按兩下 [ 錯誤詳細資料 ] 和 [作業詳細資料 ] 以檢視錯誤的詳細資料。 按兩下 [ 重新部署 ],然後 再次編輯範本 ,對 DCR 進行必要的變更,然後再次儲存並部署它。
驗證數據收集並進行疑難解答
安裝 DCR 之後,變更可能需要幾分鐘的時間才會生效,以及使用更新的 DCR 收集數據。 如果您沒有看到收集的任何數據,可能很難判斷問題的根本原因。 使用 DCR 監視功能,包括計量和記錄,以協助疑難解答。
DCR 計量 會自動收集給所有 DCR,而且您可以使用計量總管來分析它們,例如其他 Azure 資源的平臺計量。 啟用 DCR 錯誤記錄 ,以在數據處理不成功時取得詳細的錯誤資訊。
如果您沒有看到所收集的數據,請遵循這些基本步驟來針對問題進行疑難解答。
- 檢查
Logs Ingestion Bytes per Min
和Logs Rows Received per Min
之類的計量,以確保資料已連線到 Azure 監視器。 如果沒有,請檢查您的資料來源,以確保其會如預期般傳送資料。 - 檢查
Logs Rows Dropped per Min
是否有任何資料列正在卸除。 這可能並不表示錯誤,因為資料列可能會由轉換卸除。 如果卸除的資料列與Logs Rows Dropped per Min
相同,則不會在工作區中擷取任何資料。 檢查Logs Transformation Errors per Min
以查看是否有任何轉換錯誤。 - 檢查
Logs Transformation Errors per Min
以判斷是否有任何從轉換套用至傳入資料的錯誤。 這可能是因為資料結構或轉換本身的變更所造成。 - 檢查數據表中
DCRLogErrors
是否有任何可能已記錄的擷取錯誤。 這可以提供識別問題根本原因的其他詳細資料。