教學課程:在 Azure 資料總管中擷取和查詢監視資料
本文內容
本教學課程將教導您如何在不撰寫程式代碼的情況下,將診斷和活動記錄中的數據內嵌至 Azure 數據總管叢集。 透過這個簡單的擷取方法,您可以快速開始查詢 Azure 數據總管以進行數據分析。
在本教學課程中,您將了解如何:
在 Azure 數據總管資料庫中建立數據表和擷取對應。
使用更新原則格式化內嵌的數據。
建立事件中 樞 ,並將其連線到 Azure 數據總管。
從 Azure 監視器診斷計量和活動 記錄 將數據串流至事件中樞。
使用 Azure 數據總管查詢內嵌的數據。
注意
在相同的 Azure 位置或區域中建立所有資源。
必要條件
Azure 監視器數據提供者:診斷計量和記錄和活動記錄
檢視並瞭解下列 Azure 監視器診斷計量和活動記錄所提供的數據。 您將根據這些數據架構建立擷取管線。 請注意,記錄中的每個事件都有記錄陣列。 本教學課程稍後將會分割此記錄陣列。
診斷計量和活動記錄的範例
Azure 診斷計量和活動記錄是由 Azure 服務發出,並提供該服務作業的相關數據。
診斷計量範例
診斷計量會匯總為1分鐘的時間粒紋。 以下是查詢持續時間上 Azure 數據總管計量事件架構的範例:
{
"records": [
{
"count": 14,
"total": 0,
"minimum": 0,
"maximum": 0,
"average": 0,
"resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
"time": "2018-12-20T17:00:00.0000000Z",
"metricName": "QueryDuration",
"timeGrain": "PT1M"
},
{
"count": 12,
"total": 0,
"minimum": 0,
"maximum": 0,
"average": 0,
"resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
"time": "2018-12-21T17:00:00.0000000Z",
"metricName": "QueryDuration",
"timeGrain": "PT1M"
}
]
}
診斷記錄範例
以下是 Azure 數據 總管診斷擷取記錄 的範例:
{
"time": "2019-08-26T13:22:36.8804326Z",
"resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.KUSTO/CLUSTERS/<cluster-name>",
"operationName": "MICROSOFT.KUSTO/CLUSTERS/INGEST/ACTION",
"operationVersion": "1.0",
"category": "FailedIngestion",
"resultType": "Failed",
"correlationId": "d59882f1-ad64-4fc4-b2ef-d663b6cc1cc5",
"properties": {
"OperationId": "00000000-0000-0000-0000-000000000000",
"Database": "Kusto",
"Table": "Table_13_20_prod",
"FailedOn": "2019-08-26T13:22:36.8804326Z",
"IngestionSourceId": "d59882f1-ad64-4fc4-b2ef-d663b6cc1cc5",
"Details":
{
"error":
{
"code": "BadRequest_DatabaseNotExist",
"message": "Request is invalid and cannot be executed.",
"@type": "Kusto.Data.Exceptions.DatabaseNotFoundException",
"@message": "Database 'Kusto' was not found.",
"@context":
{
"timestamp": "2019-08-26T13:22:36.7179157Z",
"serviceAlias": "<cluster-name>",
"machineName": "KEngine000001",
"processName": "Kusto.WinSvc.Svc",
"processId": 5336,
"threadId": 6528,
"appDomainName": "Kusto.WinSvc.Svc.exe",
"clientRequestd": "DM.IngestionExecutor;a70ddfdc-b471-4fc7-beac-bb0f6e569fe8",
"activityId": "f13e7718-1153-4e65-bf82-8583d712976f",
"subActivityId": "2cdad9d0-737b-4c69-ac9a-22cf9af0c41b",
"activityType": "DN.AdminCommand.DataIngestPullCommand",
"parentActivityId": "2f65e533-a364-44dd-8d45-d97460fb5795",
"activityStack": "(Activity stack: CRID=DM.IngestionExecutor;a70ddfdc-b471-4fc7-beac-bb0f6e569fe8 ARID=f13e7718-1153-4e65-bf82-8583d712976f > DN.Admin.Client.ExecuteControlCommand/5b764b32-6017-44a2-89e7-860eda515d40 > P.WCF.Service.ExecuteControlCommandInternal..IAdminClientServiceCommunicationContract/c2ef9344-069d-44c4-88b1-a3570697ec77 > DN.FE.ExecuteControlCommand/2f65e533-a364-44dd-8d45-d97460fb5795 > DN.AdminCommand.DataIngestPullCommand/2cdad9d0-737b-4c69-ac9a-22cf9af0c41b)"
},
"@permanent": true
}
},
"ErrorCode": "BadRequest_DatabaseNotExist",
"FailureStatus": "Permanent",
"RootActivityId": "00000000-0000-0000-0000-000000000000",
"OriginatesFromUpdatePolicy": false,
"ShouldRetry": false,
"IngestionSourcePath": "https://c0skstrldkereneus01.blob.core.windows.net/aam-20190826-temp-e5c334ee145d4b43a3a2d3a96fbac1df/3216_test_3_columns_invalid_8f57f0d161ed4a8c903c6d1073005732_59951f9ca5d143b6bdefe52fa381a8ca.zip"
}
}
活動記錄範例
Azure 活動記錄是訂用帳戶層級的記錄,可讓您深入瞭解訂用帳戶中資源上執行的作業。 以下是用來檢查存取權的活動記錄事件範例:
{
"records": [
{
"time": "2018-12-26T16:23:06.1090193Z",
"resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.WEB/SITES/CLNB5F73B70-DCA2-47C2-BB24-77B1A2CAAB4D/PROVIDERS/MICROSOFT.AUTHORIZATION",
"operationName": "MICROSOFT.AUTHORIZATION/CHECKACCESS/ACTION",
"category": "Action",
"resultType": "Start",
"resultSignature": "Started.",
"durationMs": 0,
"callerIpAddress": "13.66.225.188",
"correlationId": "0de9f4bc-4adc-4209-a774-1b4f4ae573ed",
"identity": {
"authorization": {
...
},
"claims": {
...
}
},
"level": "Information",
"location": "global",
"properties": {
...
}
},
{
"time": "2018-12-26T16:23:06.3040244Z",
"resourceId": "/SUBSCRIPTIONS/<subscriptionID>/RESOURCEGROUPS/<resource-group>/PROVIDERS/MICROSOFT.WEB/SITES/CLNB5F73B70-DCA2-47C2-BB24-77B1A2CAAB4D/PROVIDERS/MICROSOFT.AUTHORIZATION",
"operationName": "MICROSOFT.AUTHORIZATION/CHECKACCESS/ACTION",
"category": "Action",
"resultType": "Success",
"resultSignature": "Succeeded.OK",
"durationMs": 194,
"callerIpAddress": "13.66.225.188",
"correlationId": "0de9f4bc-4adc-4209-a774-1b4f4ae573ed",
"identity": {
"authorization": {
...
},
"claims": {
...
}
},
"level": "Information",
"location": "global",
"properties": {
"statusCode": "OK",
"serviceRequestId": "87acdebc-945f-4c0c-b931-03050e085626"
}
}]
}
在 Azure 數據總管中設定擷取管線
設定 Azure 數據總管線牽涉到數個步驟,例如 數據表建立和數據擷取 。 您也可以操作、對應及更新數據。
聯機至 Azure 數據總管 Web UI
在 Azure 數據總管 TestDatabase 資料庫中,選取 [ 查詢 ] 以開啟 Azure 數據總管 Web UI。
建立目標數據表
Azure 監視器記錄的結構不是表格式。 您將操作數據,並將每個事件展開至一或多個記錄。 原始數據會擷取至名為 ActivityLogsRawRecords 的中繼數據表,用於活動記錄和 診斷計量和記錄的 DiagnosticRawRecords 。 屆時,將會操作和擴充數據。 使用更新原則,展開的數據接著會擷取到ActivityLogs數據表中的活動記錄、診斷計量的 DiagnosticMetrics ,以及診斷記錄的 DiagnosticLogs 。 這表示您必須建立兩個不同的數據表來擷取活動記錄,以及擷取診斷計量和記錄的三個個別數據表。
使用 Azure 數據總管 Web UI 在 Azure 數據總管資料庫中建立目標數據表。
建立診斷計量的數據表
在 TestDatabase 資料庫中,建立名為 DiagnosticMetrics 的 數據表來儲存診斷計量記錄。 使用下列 .create table
管理指令:
.create table DiagnosticMetrics (Timestamp:datetime, ResourceId:string, MetricName:string, Count:int, Total:double, Minimum:double, Maximum:double, Average:double, TimeGrain:string)
選取 [執行] 以建立新資料表。
在 TestDatabase 資料庫中建立名為 DiagnosticRawRecords 的 中繼數據表,以使用下列查詢操作數據。 選取 [執行] 以建立新資料表。
.create table DiagnosticRawRecords (Records:dynamic)
設定中繼數據表的零 保留原則 :
.alter-merge table DiagnosticRawRecords policy retention softdelete = 0d
建立診斷記錄的數據表
在 TestDatabase 資料庫中,建立名為 DiagnosticLogs 的 數據表來儲存診斷記錄。 使用下列 .create table
管理指令:
.create table DiagnosticLogs (Timestamp:datetime, ResourceId:string, OperationName:string, Result:string, OperationId:string, Database:string, Table:string, IngestionSourceId:string, IngestionSourcePath:string, RootActivityId:string, ErrorCode:string, FailureStatus:string, Details:string)
選取 [執行] 以建立新資料表。
在 TestDatabase 資料庫中建立名為 DiagnosticRawRecords 的 中繼數據表,以使用下列查詢操作數據。 選取 [執行] 以建立新資料表。
.create table DiagnosticRawRecords (Records:dynamic)
設定中繼數據表的零 保留原則 :
.alter-merge table DiagnosticRawRecords policy retention softdelete = 0d
建立活動記錄的數據表
在 TestDatabase 資料庫中建立名為 ActivityLogs 的 數據表,以接收活動記錄。 若要建立數據表,請執行下列 Azure 數據總管查詢:
.create table ActivityLogs (Timestamp:datetime, ResourceId:string, OperationName:string, Category:string, ResultType:string, ResultSignature:string, DurationMs:int, IdentityAuthorization:dynamic, IdentityClaims:dynamic, Location:string, Level:string)
在 TestDatabase 資料庫中建立名為 ActivityLogsRawRecords 的 中繼數據表以進行數據操作:
.create table ActivityLogsRawRecords (Records:dynamic)
設定中繼數據表的零 保留原則 :
.alter-merge table ActivityLogsRawRecords policy retention softdelete = 0d
建立數據表對應
因為數據格式為 json
,因此需要數據對應。 對應會將 json
每個 json 路徑對應至數據表數據行名稱。 包含特殊字元的 JSON 路徑應逸出為 ['Property Name']。 如需詳細資訊,請參閱 JSONPath 語法 。
將診斷計量和記錄對應至數據表
若要將診斷計量和記錄數據對應至數據表,請使用下列查詢:
.create table DiagnosticRawRecords ingestion json mapping 'DiagnosticRawRecordsMapping' '[{"column":"Records","Properties":{"path":"$.records"}}]'
將活動記錄對應至數據表
若要將活動記錄數據對應至數據表,請使用下列查詢:
.create table ActivityLogsRawRecords ingestion json mapping 'ActivityLogsRawRecordsMapping' '[{"column":"Records","Properties":{"path":"$.records"}}]'
建立計量和記錄數據的更新原則
建立診斷計量的數據更新原則
建立 函式,以展開診斷計量記錄的集合,讓集合中的每個值都會收到個別的數據列。 使用 mv-expand
運算子:
.create function DiagnosticMetricsExpand() {
DiagnosticRawRecords
| mv-expand events = Records
| where isnotempty(events.metricName)
| project
Timestamp = todatetime(events['time']),
ResourceId = tostring(events.resourceId),
MetricName = tostring(events.metricName),
Count = toint(events['count']),
Total = todouble(events.total),
Minimum = todouble(events.minimum),
Maximum = todouble(events.maximum),
Average = todouble(events.average),
TimeGrain = tostring(events.timeGrain)
}
將 更新原則 新增至目標數據表。 此原則會自動對 DiagnosticRawRecords 中繼數據表中 任何新擷取的數據執行查詢,並將其結果內嵌至 DiagnosticMetrics 數據表:
.alter table DiagnosticMetrics policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticMetricsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
建立診斷記錄的數據更新原則
建立函 式 ,以展開診斷記錄的集合,讓集合中的每個值都會收到個別的數據列。 您將在 Azure 資料總管叢集上啟用擷取記錄,並使用 擷取記錄架構 。 您將建立一個數據表來取得成功和失敗的擷取,而某些欄位會是空的,用於成功擷取(例如 ErrorCode)。 使用 mv-expand
運算子:
.create function DiagnosticLogsExpand() {
DiagnosticRawRecords
| mv-expand events = Records
| where isnotempty(events.operationName)
| project
Timestamp = todatetime(events['time']),
ResourceId = tostring(events.resourceId),
OperationName = tostring(events.operationName),
Result = tostring(events.resultType),
OperationId = tostring(events.properties.OperationId),
Database = tostring(events.properties.Database),
Table = tostring(events.properties.Table),
IngestionSourceId = tostring(events.properties.IngestionSourceId),
IngestionSourcePath = tostring(events.properties.IngestionSourcePath),
RootActivityId = tostring(events.properties.RootActivityId),
ErrorCode = tostring(events.properties.ErrorCode),
FailureStatus = tostring(events.properties.FailureStatus),
Details = tostring(events.properties.Details)
}
將 更新原則 新增至目標數據表。 此原則會自動對 DiagnosticRawRecords 中繼數據表中 任何新內嵌的數據執行查詢,並將其結果內嵌至 DiagnosticLogs 數據表:
.alter table DiagnosticLogs policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticLogsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
建立活動記錄的數據更新原則
建立 函式 ,以展開活動記錄檔記錄的集合,讓集合中的每個值都會收到個別的數據列。 使用 mv-expand
運算子:
.create function ActivityLogRecordsExpand() {
ActivityLogsRawRecords
| mv-expand events = Records
| project
Timestamp = todatetime(events['time']),
ResourceId = tostring(events.resourceId),
OperationName = tostring(events.operationName),
Category = tostring(events.category),
ResultType = tostring(events.resultType),
ResultSignature = tostring(events.resultSignature),
DurationMs = toint(events.durationMs),
IdentityAuthorization = events.identity.authorization,
IdentityClaims = events.identity.claims,
Location = tostring(events.location),
Level = tostring(events.level)
}
將 更新原則 新增至目標數據表。 此原則會自動對 ActivityLogsRawRecords 中繼數據表中 任何新擷取的數據執行查詢,並將其結果內嵌至 ActivityLogs 數據表:
.alter table ActivityLogs policy update @'[{"Source": "ActivityLogsRawRecords", "Query": "ActivityLogRecordsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
建立 Azure 事件中樞命名空間
Azure 診斷設定可讓您將計量和記錄匯出至記憶體帳戶或事件中樞。 在本教學課程中,我們將透過事件中樞路由傳送計量和記錄。 您將在下列步驟中建立診斷計量和記錄的事件中樞命名空間和事件中樞。 Azure 監視器會建立活動記錄的事件中樞 insights-operational-logs 。
在 Azure 入口網站 中使用 Azure Resource Manager 範本建立事件中樞。 若要遵循本文的其餘步驟,請以滑鼠右鍵按兩下 [部署至 Azure ] 按鈕,然後選取 [在新視窗中 開啟]。 [部署至 Azure ] 按鈕會帶您前往 Azure 入口網站。
建立診斷記錄的事件中樞命名空間和事件中樞。 瞭解如何 建立事件中樞命名空間 。
在表單中填寫以下資訊。 針對下表未列出的任何設定,請使用預設值。
設定
建議的值
說明
訂用帳戶
您的訂用帳戶
選取您想要用於事件中樞的 Azure 訂用帳戶。
資源群組
test-resource-group
建立新的資源群組。
地點
選取最符合您需求的區域。
在與其他資源相同的位置中建立事件中樞命名空間。
命名空間名稱
AzureMonitoringData
選擇可識別命名空間的唯一名稱。
事件中樞名稱
DiagnosticData
事件中樞位於 命名空間底下,可提供唯一的範圍容器。
取用者群組名稱
adxpipeline
建立取用者組名。 取用者群組可讓多個取用應用程式各自擁有事件數據流的個別檢視。
將 Azure 監視器計量和記錄連線到事件中樞
現在,您必須將診斷計量和記錄和活動記錄連線到事件中樞。
將診斷計量和記錄連線到事件中樞
選取要匯出計量的資源。 數種資源類型支援匯出診斷數據,包括事件中樞命名空間、Azure 金鑰保存庫、Azure IoT 中樞 和 Azure 數據總管叢集。 在本教學課程中,我們將使用 Azure 數據總管叢集作為資源,我們將檢閱查詢效能計量和擷取結果記錄。
在 Azure 入口網站 中選取您的 Kusto 叢集。
選取 [ 診斷設定 ],然後選取 [開啟診斷] 連結。
[診斷設定] 窗格隨即開啟。 執行下列步驟:
為您的診斷記錄數據命名 ADXExportedData 。
在 [LOG] 底 下,選取 [成功擷取] 和 [失敗擷取 ] 複選框。
在 [計量] 底下 ,選取 [查詢效能] 複選框。
選取 [串流至事件中樞] 核取方塊。
選取設定 。
在 [選取事件中 樞 ] 窗格中,設定如何將診斷記錄中的數據匯出至您所建立的事件中樞:
在 [選取事件中 樞命名空間 ] 列表中,選取 [AzureMonitoringData ]。
在 [選取事件中 樞名稱] 列表中,選取 [ DiagnosticData ]。
在 [選取事件中 樞原則名稱] 列表中,選取 [RootManagerSharedAccessKey ]。
選取 [確定]。
選取儲存 。
將活動記錄連線到事件中樞
在 Azure 入口網站 的左側功能表中,選取 [活動記錄 ]。
[ 活動記錄檔] 視窗隨即開啟。 選取 [診斷設定]。
[ 診斷設定 ] 視窗隨即開啟。 選取 +新增診斷設定 。
隨即開啟新的 [診斷設定] 視窗。
執行下列步驟:
在 [ 診斷設定名稱] 欄位中輸入名稱 。
在複選框左側,選取您想要從訂用帳戶收集的平台記錄檔。
選取 [串流至事件中樞] 核取方塊。
選取您的訂用帳戶。
在 [事件中 樞命名空間] 清單中,選取 [AzureMonitoringData ]。
選擇性地選取您的 事件中樞名稱 。
在 [事件中 樞原則名稱] 清單中,選取預設事件中樞原則名稱。
在視窗左上角,選取 [ 儲存 ]。 系統會建立名稱 為 insights-operational-logs 的事件中樞(除非您已選取上述事件中樞名稱)。
查看流向事件中樞的數據
等候幾分鐘,直到定義連線,然後活動記錄檔匯出至事件中樞完成。 移至事件中樞命名空間,以查看您所建立的事件中樞。
檢視流向事件中樞的數據:
將事件中樞連線至 Azure 數據總管
現在,您必須為診斷計量和活動記錄建立數據連線。
建立診斷計量和活動記錄的數據連線
在名為 kustodocs 的 Azure 數據總管叢集中,選取 左側功能表中的 [資料庫 ]。
在 [ 資料庫] 視窗中,選取您的 TestDatabase 資料庫。
在左側功能表中,選取 [數據擷取 ]。
在 [ 數據擷取 ] 視窗中,選取 [+ 新增數據連線 ]。
在 [ 資料連線 ] 視窗中,輸入下列資訊:
在 [ 資料連線 ] 視窗中使用下列設定:
資料來源:
設定
建議的值
欄位描述
數據連線名稱
DiagnosticsLogsConnection
您想要在 Azure 資料總管中建立的連接名稱。
事件中樞命名空間
AzureMonitoringData
您稍早選擇用來識別命名空間的名稱。
事件中樞
DiagnosticData
您建立的事件中樞。
取用者群組
adxpipeline
在您建立的事件中樞內定義的取用者群組。
目標資料表:
路由有兩個選項: 靜態 和 動態 。 在本教學課程中,您將使用靜態路由(預設值),您可以在其中指定數據表名稱、數據格式和對應。 保留 [我的數據] 包含未選取的路由資訊 。
設定
建議的值
欄位描述
Table
DiagnosticRawRecords
您在 TestDatabase 資料庫中建立的 資料表。
資料格式
JSON
表格中使用的格式。
資料行對應
DiagnosticRawRecordsMapping
您在 TestDatabase 資料庫中建立 的對應,會將傳入的 JSON 數據對應至 DiagnosticRawRecords 數據表的數據 行名稱和數據類型。
選取 建立 。
在 [ 資料連線 ] 視窗中使用下列設定:
資料來源:
設定
建議的值
欄位描述
數據連線名稱
ActivityLogsConnection
您想要在 Azure 資料總管中建立的連接名稱。
事件中樞命名空間
AzureMonitoringData
您稍早選擇用來識別命名空間的名稱。
事件中樞
insights-operational-logs
您建立的事件中樞。
取用者群組
$Default
默認取用者群組。 如有需要,您可以建立不同的取用者群組。
目標資料表:
路由有兩個選項: 靜態 和 動態 。 在本教學課程中,您將使用靜態路由(預設值),您可以在其中指定數據表名稱、數據格式和對應。 保留 [我的數據] 包含未選取的路由資訊 。
設定
建議的值
欄位描述
Table
ActivityLogsRawRecords
您在 TestDatabase 資料庫中建立的 資料表。
資料格式
JSON
表格中使用的格式。
資料行對應
ActivityLogsRawRecordsMapping
您在 TestDatabase 資料庫中建立的對應,會將傳入的 JSON 數據對應至 ActivityLogsRawRecords 數據表的數據 行名稱和 數據類型。
選取 建立 。
查詢新的數據表
您現在有數據流的管線。 依預設,透過叢集擷取需要 5 分鐘的時間,因此允許數據在開始查詢之前流動幾分鐘。
查詢診斷計量數據表
下列查詢會分析 Azure 數據總管中診斷計量記錄中的查詢持續時間資料:
DiagnosticMetrics
| where Timestamp > ago(15m) and MetricName == 'QueryDuration'
| summarize avg(Average)
查詢結果:
查詢診斷記錄數據表
此管線會透過事件中樞產生擷取。 您將檢閱這些擷取的結果。
下列查詢會分析每分鐘累算多少次擷取,包括的範例 Database
, Table
以及 IngestionSourcePath
每個間隔的 :
DiagnosticLogs
| where Timestamp > ago(15m) and OperationName has 'INGEST'
| summarize count(), take_any(Database, Table, IngestionSourcePath) by bin(Timestamp, 1m)
查詢結果:
計數_
any_Database
any_Table
any_IngestionSourcePath
00:06.156
TestDatabase
DiagnosticRawRecords
https://rtmkstrldkereneus00.blob.core.windows.net/20190827-readyforaggregation/1133_TestDatabase_DiagnosticRawRecords_6cf02098c0c74410bd8017c2d458b45d.json.zip
查詢活動記錄數據表
下列查詢會分析 Azure 數據總管中活動記錄中的數據:
ActivityLogs
| where OperationName == 'MICROSOFT.EVENTHUB/NAMESPACES/AUTHORIZATIONRULES/LISTKEYS/ACTION'
| where ResultType == 'Success'
| summarize avg(DurationMs)
查詢結果:
相關內容