Azure 監視器中的數據收集規則 (DCR) 範例
本文包含 Azure 監視器中常見數據收集案例的範例 數據收集規則 (DCR )。 您可以視您的環境需要修改這些 DCR 定義,並使用建立或編輯資料收集規則中的指引來建立 DCR。 您也可以使用這些範例中的基本策略,為其他案例建立 DCR。
這些範例需要瞭解 DCR 結構,如 Azure 監視器中數據收集規則的結構中所述。 您可以使用 Azure 入口網站 來設定數個,而不需要任何 DCR 結構的詳細知識。 當您需要使用 DCR 定義本身來執行更進階的設定或自動化建立 DCR 時,請使用這些範例。
這些範例都著重於特定數據源,不過您可以在單一 DCR 中結合多個不同類型的數據源。 包含每個的數據流,以將數據傳送至適當的目的地。 在單一 DCR 中結合多個數據源或為每個數據源建立個別 DCR 之間沒有功能差異。 選擇取決於您管理及監視數據收集的需求。
注意
本文中顯示的這些範例提供建立 DCR 所需的來源 JSON。 建立之後,DCR 會有額外的屬性,如 Azure 監視器中資料收集規則的結構所述。
適用於 Azure 監視器代理程式的 DCR
Azure 監視器代理程式會在虛擬機、虛擬機擴展集和 Kubernetes 叢集上執行。 它支援 VM 深入解析和容器深入解析,並支援 Azure 監視器代理程式數據收集中所述之 VM 的各種數據收集案例。
下列範例顯示 DCR,可用來使用 Azure 監視器代理程式收集不同類型的數據。
Windows 事件
Windows 事件的 DCR 會 windowsEventLogs
搭配 Microsoft-Event
連入數據流使用數據源。 此數據流的架構是已知的,因此不需要在 dataSources
區段中定義。 要收集的事件會在屬性中 xPathQueries
指定。 如需使用 XPath 來篩選您想要收集的特定數據,請參閱 使用 Azure 監視器代理程式 收集 Windows 事件。 若要開始使用,您可以使用該文章中的指引,使用 Azure 入口網站 建立 DCR,然後使用 DCR 定義中的指引來檢查 JSON。
您可以將轉換新增至 dataFlows
匯出數據行的屬性,並進一步篩選數據,但您應該使用 XPaths 儘可能篩選代理程式的數據,以提高效率,並避免潛在的擷取費用。
下列範例 DCR 會執行下列動作:
- 收集具有警告、錯誤或重大錯誤層級的 Windows 應用程式和系統事件。
- 將數據傳送至工作區中的事件數據表。
- 使用的簡單轉換
source
,不會變更連入數據。
{
"location": "eastus",
"properties": {
"dataSources": {
"windowsEventLogs": [
{
"name": "eventLogsDataSource",
"streams": [
"Microsoft-Event"
],
"xPathQueries": [
"System!*[System[(Level = 1 or Level = 2 or Level = 3)]]",
"Application!*[System[(Level = 1 or Level = 2 or Level = 3)]]"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "centralWorkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Event"
],
"destinations": [
"centralWorkspace"
],
"transformKql": "source",
"outputStream": "Microsoft-Event"
}
]
}
}
Syslog 事件
Syslog 事件的 DCR 會 syslog
搭配連入 Microsoft-Syslog
數據流使用數據源。 此數據流的架構是已知的,因此不需要在 dataSources
區段中定義。 要收集的事件會在和 logLevels
屬性中facilityNames
指定。 如需詳細資訊,請參閱 使用 Azure 監視器代理程式 收集 Syslog 事件。 若要開始使用,您可以使用該文章中的指引,使用 Azure 入口網站 建立 DCR,然後使用 DCR 定義的指引來檢查 JSON。
您可以將轉換新增至 屬性以 dataFlows
取得其他功能,並進一步篩選數據,但您應該盡可能使用 facilityNames
和 logLevels
來篩選效率,以避免潛在的擷取費用。
下列範例 DCR 會執行下列動作:
- 從
cron
設施收集所有事件。 Warning
從和設施收集及daemon
更高事件syslog
。- 將數據傳送至工作區中的 Syslog 數據表。
- 使用的簡單轉換
source
,不會變更連入數據。
{
"location": "eastus",
"properties": {
"dataSources": {
"syslog": [
{
"name": "cronSyslog",
"streams": [
"Microsoft-Syslog"
],
"facilityNames": [
"cron"
],
"logLevels": [
"Debug",
"Info",
"Notice",
"Warning",
"Error",
"Critical",
"Alert",
"Emergency"
]
},
{
"name": "syslogBase",
"streams": [
"Microsoft-Syslog"
],
"facilityNames": [
"daemon",
"syslog"
],
"logLevels": [
"Warning",
"Error",
"Critical",
"Alert",
"Emergency"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "centralWorkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Syslog"
],
"destinations": [
"centralWorkspace"
],
"transformKql": "source",
"outputStream": "Microsoft-Syslog"
}
]
}
}
效能計數器
效能數據的 DCR 會 performanceCounters
搭配傳入 Microsoft-InsightsMetrics
和 Microsoft-Perf
數據流使用數據源。 Microsoft-InsightsMetrics
用來將數據傳送至 Azure 監視器計量,而 Microsoft-Perf
用來將數據傳送至 Log Analytics 工作區。 如果您要將效能數據傳送至這兩個目的地,您可以將這兩個數據源包含在 DCR 中。 這些數據流的架構是已知的,因此不需要在 dataSources
區段中定義它們。
要收集的性能計數器會在屬性中 counterSpecifiers
指定。 如需詳細資訊,請參閱 使用 Azure 監視器代理程式 收集性能計數器。 若要開始使用,您可以使用該文章中的指引,使用 Azure 入口網站 建立 DCR,然後使用 DCR 定義的指引來檢查 JSON。
您可以將轉換新增至 屬性Microsoft-Perf
以dataFlows
取得其他功能,並進一步篩選數據,但您應該只選取所需的counterSpecifiers
計數器,以提高效率,以避免潛在的擷取費用。
下列範例 DCR 會執行下列動作:
- 每隔 60 秒收集一組性能計數器,每 30 秒再收集一組性能計數器。
- 將數據傳送至 Azure 監視器計量和 Log Analytics 工作區。
- 使用的簡單轉換
source
,不會變更連入數據。
{
"location": "eastus",
"properties": {
"dataSources": {
"performanceCounters": [
{
"name": "perfCounterDataSource60",
"streams": [
"Microsoft-Perf",
"Microsoft-InsightsMetrics"
],
"samplingFrequencyInSeconds": 60,
"counterSpecifiers": [
"\\Processor(_Total)\\% Processor Time",
"\\Memory\\Committed Bytes",
"\\LogicalDisk(_Total)\\Free Megabytes",
"\\PhysicalDisk(_Total)\\Avg. Disk Queue Length"
]
},
{
"name": "perfCounterDataSource30",
"streams": [
"Microsoft-Perf"
],
"samplingFrequencyInSeconds": 30,
"counterSpecifiers": [
"\\Process(_Total)\\Thread Count"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "centralWorkspace"
}
],
"azureMonitorMetrics":
{
"name": "azureMonitorMetrics-default"
}
},
"dataFlows": [
{
"streams": [
"Microsoft-Perf"
],
"destinations": [
"centralWorkspace"
],
"transformKql": "source",
"outputStream": "Microsoft-Perf"
},
{
"streams": [
"Microsoft-Perf"
],
"destinations": [
"azureMonitorMetrics-default"
],
"outputStream": "Microsoft-InsightsMetrics"
}
]
}
}
文字記錄
文字記錄的 DCR 具有 logfiles
數據來源,其中包含代理程式應該收集之記錄檔的詳細數據。 這包括必須使用傳入數據行在 中 streamDeclarations
定義的數據流名稱。 此清單目前為集合清單,如使用 Azure 監視器代理程式從文字檔收集記錄中所述。
將轉換新增至 dataFlows
屬性,以篩選出您不想收集的記錄,並格式化數據以符合目的地數據表的架構。 常見的案例是將分隔的記錄檔剖析成多個數據行,如分隔記錄檔中所述。
下列範例 DCR 會執行下列動作:
- 從代理程式電腦資料夾中擴展名為
.txt
的所有檔案收集c:\logs
專案。 - 使用轉換,根據逗號 (
,
) 分隔符將數據分割成數據行。 此轉換專屬於記錄檔的格式,而且必須針對具有其他格式的記錄檔進行調整。 - 將收集的記錄傳送至稱為的
MyTable_CL
自訂數據表。 此數據表必須已經存在,且具有轉換的數據行輸出。 - 收集 和
FilePath
Computer
作為文字記錄檔,如傳入數據流中所述。 這些數據行也必須存在於目的地數據表中。
{
"location": "eastus",
"properties": {
"dataCollectionEndpointId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Insights/dataCollectionEndpoints/my-dce",
"streamDeclarations": {
"Custom-MyLogFileFormat": {
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "RawData",
"type": "string"
},
{
"name": "FilePath",
"type": "string"
},
{
"name": "Computer",
"type": "string"
}
]
}
},
"dataSources": {
"logFiles": [
{
"streams": [
"Custom-MyLogFileFormat"
],
"filePatterns": [
"C:\\logs\\*.txt"
],
"format": "text",
"settings": {
"text": {
"recordStartTimestampFormat": "ISO 8601"
}
},
"name": "myLogFileFormat-Windows"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "MyDestination"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-MyLogFileFormat"
],
"destinations": [
"MyDestination"
],
"transformKql": "source | project d = split(RawData,\",\") | project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])",
"outputStream": "Custom-MyTable_CL"
}
]
}
}
Json 記錄
Json 記錄的 DCR 具有 logfiles
數據來源,其中包含代理程式應該收集之記錄檔的詳細數據。 這包括必須使用傳入數據行在 中 streamDeclarations
定義的數據流名稱。 如需詳細資訊,請參閱 使用 Azure 監視器代理程式 從 JSON 檔案收集記錄。
將轉換新增至 dataFlows
屬性,以篩選出您不想收集的記錄,並格式化數據以符合目的地數據表的架構。
下列範例 DCR 會執行下列動作:
- 從代理程式電腦資料夾中擴展名為
.json
的所有檔案收集c:\logs
專案。 檔案必須以 json 格式化,並具有數據流宣告中列出的數據行。 - 將收集的記錄傳送至稱為的
MyTable_CL
自訂數據表。 此數據表必須已經存在,而且具有與傳入數據流相同的數據行。 如果資料行不相符,您必須修改 屬性中的transformKql
轉換,以格式化目標數據表的數據。
{
"location": "eastus",
"properties": {
"dataCollectionEndpointId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.Insights/dataCollectionEndpoints/my-dce",
"streamDeclarations": {
"Custom-Json-stream": {
"columns": [
{
"name": "TimeGenerated",
"type": "datetime"
},
{
"name": "FilePath",
"type": "string"
},
{
"name": "Code",
"type": "int"
},
{
"name": "Module",
"type": "string"
},
{
"name": "Message",
"type": "string"
}
]
}
},
"dataSources": {
"logFiles": [
{
"streams": [
"Custom-Json-stream"
],
"filePatterns": [
"C:\\logs\\*.json"
],
"format": "json",
"name": "MyJsonFile"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "MyDestination"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-Json-stream"
],
"destinations": [
"MyDestination"
],
"transformKql": "source",
"outputStream": "Custom-MyTable_CL"
}
]
}
}
將數據傳送至事件中樞或記憶體
將數據傳送至事件中樞或記憶體帳戶的 DCR 會使用與使用 Azure 監視器代理程式 (AMA) 收集數據的其他 DCR 使用相同的數據源,但具有下列一或多個目的地。 如需詳細資訊,請參閱將數據傳送至事件中樞和記憶體(預覽)。
eventHubsDirect
storageBlobsDirect
storageTablesDirect
注意
將數據傳送至事件中樞或記憶體帳戶的 DCR 必須具有 "kind": "AgentDirectToStore"
下列範例 DCR 會執行下列動作:
- 使用 Azure 監視器代理程式從 Windows 機器收集性能計數器和 Windows 事件。
- 將數據傳送至事件中樞、Blob 記憶體和數據表記憶體。
{
"location": "eastus",
"kind": "AgentDirectToStore",
"properties": {
"dataSources": {
"performanceCounters": [
{
"streams": [
"Microsoft-Perf"
],
"samplingFrequencyInSeconds": 10,
"counterSpecifiers": [
"\\Process(_Total)\\Working Set - Private",
"\\Memory\\% Committed Bytes In Use",
"\\LogicalDisk(_Total)\\% Free Space",
"\\Network Interface(*)\\Bytes Total/sec"
],
"name": "perfCounterDataSource"
}
],
"windowsEventLogs": [
{
"streams": [
"Microsoft-Event"
],
"xPathQueries": [
"Application!*[System[(Level=2)]]",
"System!*[System[(Level=2)]]"
],
"name": "eventLogsDataSource"
}
]
},
"destinations": {
"eventHubsDirect": [
{
"eventHubResourceId": "/subscriptions/71b36fb6-4fe4-4664-9a7b-245dc62f2930/resourceGroups/my-resource-group/providers/Microsoft.EventHub/namespaces/my-eventhub-namespace/eventhubs/my-eventhub",
"name": "myEh"
}
],
"storageBlobsDirect": [
{
"storageAccountResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"containerName": "myperfblob",
"name": "PerfBlob"
},
{
"storageAccountResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"containerName": "myeventblob",
"name": "EventBlob"
}
],
"storageTablesDirect": [
{
"storageAccountResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"containerName": "myperftable",
"name": "PerfTable"
},
{
"storageAccountResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/Microsoft.Storage/storageAccounts/mystorageaccount",
"containerName": "mymyeventtable",
"name": "EventTable"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Perf"
],
"destinations": [
"myEh",
"PerfBlob",
"PerfTable"
]
},
{
"streams": [
"Microsoft-Event"
],
"destinations": [
"myEh",
"EventBlob",
"EventTable"
]
},
]
}
}
記錄內嵌 API
記錄擷取 API 的 DCR 必須在 DCR 定義的 區段中定義連入數據流 streamDeclarations
的架構。 傳入的數據必須使用 JSON 格式,且架構符合此定義中的數據行。 如果這個架構符合目標數據表的架構,則不需要轉換。 如果架構不相符,您必須將轉換新增至 屬性, dataFlows
以格式化數據。 如需詳細資訊,請參閱 Azure 監視器 中的記錄擷取 API。
下列範例 DCR 具有下列詳細資料:
- 將數據傳送至名為 的工作區中呼叫
MyTable_CL
my-workspace
的數據表。 安裝此 DCR 之前,您必須使用下列資料列建立資料表:- TimeGenerated
- 電腦
- AdditionalContext
- ExtendedColumn (定義於轉換中)
- 將 轉換 套用至傳入數據,以格式化目標數據表的數據。
重要
此範例不包含 屬性, dataCollectionEndpointId
因為建立 DCR 時會自動建立這個屬性。 您需要這個屬性的值,因為它是應用程式將傳送數據的URL。 必須有 kind:Direct
DCR 才能建立這個屬性。 如需詳細資訊,請參閱 屬性 。
{
"location": "eastus",
"kind": "Direct",
"properties": {
"streamDeclarations": {
"Custom-MyTable": {
"columns": [
{
"name": "Time",
"type": "datetime"
},
{
"name": "Computer",
"type": "string"
},
{
"name": "AdditionalContext",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/cefingestion/providers/microsoft.operationalinsights/workspaces/my-workspace",
"name": "LogAnalyticsDest"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-MyTable"
],
"destinations": [
"LogAnalyticsDest"
],
"transformKql": "source | extend jsonContext = parse_json(AdditionalContext) | project TimeGenerated = Time, Computer, AdditionalContext = jsonContext, ExtendedColumn=tostring(jsonContext.CounterName)",
"outputStream": "Custom-MyTable_CL"
}
]
}
}
工作區轉換 DCR
工作區轉換 DCR 有空 datasources
的區段,因為轉換會套用至傳送至工作區中支援數據表的任何數據。 它必須包含一個專案, workspaceResourceId
且每個數據表都必須 dataFlows
包含一個專案,且每個數據表都有轉換。 它也必須有 "kind": "WorkspaceTransforms"
。
下列範例 DCR 具有下列詳細資料:
LAQueryLogs
篩選掉數據表本身查詢的數據表轉換,並新增具有工作區名稱的數據行。Event
篩選掉 Information 事件並移除資料行之數據表的ParameterXml
轉換。 這隻適用於來自已取代Log Analytics代理程序的數據,而不是 Azure 監視器代理程式,如工作區轉換 DCR 中所述。
{
"kind": "WorkspaceTransforms",
"location": "eastus",
"properties": {
"dataSources": {},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "clv2ws1"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Table-LAQueryLogs"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | where QueryText !contains 'LAQueryLogs' | extend Context = parse_json(RequestContext) | extend Workspace_CF = tostring(Context['workspaces'][0]) | project-away RequestContext, Context"
},
{
"streams": [
"Microsoft-Table-Event"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | where EventLevelName in ('Error', 'Critical', 'Warning') | project-away ParameterXml"
}
]
}
}
將數據傳送至多個數據表
您可能想要將資料從單一數據源傳送至相同 Log Analytics 工作區中的多個數據表的原因有很多,包括:
- 將偶爾疑難解答的記錄傳送至 基本記錄數據表,以節省擷取成本。
- 將具有敏感數據的記錄或數據行傳送至具有不同許可權或保留設定的數據表。
若要將數據從單一數據源傳送至多個數據表,請在 DCR 中建立多個數據流,並針對每個數據表建立唯一的轉換查詢和輸出數據表,如下圖所示。
重要
目前,DCR 中的資料表必須位於相同的Log Analytics工作區中。 若要從單一資料來源傳送至多個工作區,請使用多個 DCR,並設定您的應用程式將資料傳送至每個工作區。
下列範例會篩選 Azure 監視器代理程式傳送至事件數據表的記錄。 只有警告和錯誤事件會傳送至事件數據表。 其他事件會傳送至名為 Event_CL 的事件數據表複本,而該複本已針對基本記錄進行設定。
注意
此範例需要在同一個名為 Event_CL 的工作區中建立的事件數據表複本。
{
"location": "eastus",
"properties": {
"dataSources": {
"windowsEventLogs": [
{
"name": "eventLogsDataSource",
"streams": [
"Microsoft-Event"
],
"xPathQueries": [
"System!*[System[(Level = 1 or Level = 2 or Level = 3)]]",
"Application!*[System[(Level = 1 or Level = 2 or Level = 3)]]"
]
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace",
"name": "MyDestination"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-Event"
],
"destinations": [
"MyDestination"
],
"transformKql": "source | where EventLevelName in ('Error', 'Warning')",
"outputStream": "Microsoft-Event"
},
{
"streams": [
"Microsoft-Event"
],
"destinations": [
"MyDestination"
],
"transformKql": "source | where EventLevelName !in ('Error', 'Warning')",
"outputStream": "Custom-Event_CL"
}
]
}
}
下一步
- 取得 DCR 中不同屬性的詳細資料 (部分機器翻譯)
- 請參閱建立 DCR 的不同方法 (部分機器翻譯)