本教程介绍如何在不编写代码的情况下将数据从诊断和活动日志引入Azure Data Explorer群集。 通过使用这种简单的引入方法,可以快速开始查询Azure Data Explorer进行数据分析。
本教程中,您将学习如何:
- 在Azure Data Explorer数据库中创建表和引入映射。
- 使用更新策略设置引入数据的格式。
- 创建 event 中心并将其连接到Azure Data Explorer。
- 从 Azure Monitor 的 诊断指标和日志 和 活动日志 向事件中心流式传输数据。
- 使用Azure Data Explorer查询引入的数据。
注意事项
在同一Azure位置或区域中创建所有资源。
先决条件
- Azure订阅。 创建 Azure 帐户。
- Azure Data Explorer群集和数据库。
创建群集和数据库。 在本教程中,数据库名为 TestDatabase 。
Azure监控数据提供者:诊断指标、日志和活动日志
在以下部分中查看和了解由 Azure Monitor 提供的诊断指标、日志和活动日志中的数据。 基于这些数据架构创建引入管道。 日志中的每个事件都有一组记录。 稍后在本教程中拆分此记录数组。
诊断指标和日志以及活动日志的示例
Azure服务发出Azure诊断指标、日志和活动日志。 这些日志提供有关该服务运行的相关数据。
诊断指标示例
诊断指标聚合时间粒度为 1 分钟的数据。 以下示例演示查询持续时间上的Azure Data Explorer指标事件架构:
{
"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 Data Explorer 诊断引入日志:
{
"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": "aaaa0000-bb11-2222-33cc-444444dddddd",
"properties": {
"OperationId": "00000000-0000-0000-0000-000000000000",
"Database": "Kusto",
"Table": "Table_13_20_prod",
"FailedOn": "2019-08-26T13:22:36.8804326Z",
"IngestionSourceId": "aaaa0000-bb11-2222-33cc-444444dddddd",
"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.chinacloudapi.cn/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": "bbbb1111-cc22-3333-44dd-555555eeeeee",
"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": "bbbb1111-cc22-3333-44dd-555555eeeeee",
"identity": {
"authorization": {
...
},
"claims": {
...
}
},
"level": "Information",
"location": "global",
"properties": {
"statusCode": "OK",
"serviceRequestId": "87acdebc-945f-4c0c-b931-03050e085626"
}
}]
}
在 Azure Data Explorer 中设置引入管道
设置Azure Data Explorer管道涉及几个步骤,例如表创建和数据引入。 此外,你可以处理、映射和更新数据。
连接到 Azure Data Explorer Web UI
在 Azure Data Explorer TestDatabase 数据库中,选择 Query以打开Azure Data Explorer Web UI。
创建目标表
Azure监视器日志的结构不是表格形式。 您需要处理数据,并将每个事件扩展为一条或多条记录。 将原始数据引入到名为 ActivityLogsRawRecords 的中间表以存储活动日志,和名为 DiagnosticRawRecords 的中间表以存储诊断指标和日志。 此时,你可以操作并扩展数据。 通过使用更新策略,将扩展的数据引入活动日志的 ActivityLogs 表、诊断指标的 DiagnosticMetrics 和诊断日志 的 DiagnosticLogs 。 此过程意味着需要创建两个单独的表来引入活动日志,以及用于引入诊断指标和日志的三个单独的表。
使用 Azure Data Explorer Web UI 在Azure Data Explorer数据库中创建目标表。
创建诊断指标表
在 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 Data Explorer查询:
.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 路径具有特殊字符,请将其转义为 ['属性名称']。 有关详细信息,请参阅 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"}}]'
为指标和日志数据创建更新策略
为诊断指标创建数据更新策略
创建一个 function,用于扩展诊断指标记录的集合,以便集合中的每个值获取一个单独的行。 使用 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 Data Explorer群集上启用引入日志,并使用 引入日志架构。 为数据导入成功和失败分别创建一个表,然而某些字段在成功的导入时为空(例如 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)
}
将 update 策略添加到目标表。 此策略自动对 DiagnosticRawRecords 中间数据表中的任何新引入数据运行查询,并将其结果引入 DiagnosticLogs 表中:
.alter table DiagnosticLogs policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticLogsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
为活动日志创建数据更新策略
创建一个 function,用于扩展活动日志记录的集合,以便集合中的每个值获取一个单独的行。 使用 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 Event Hubs命名空间
Azure诊断设置可将指标和日志导出到存储帐户或事件中心。 在本教程中,你将通过事件中心路由指标和日志。 在以下步骤中,您将为诊断指标和日志创建事件中心命名空间和事件中心。 Azure Monitor 为活动日志创建事件中心 insights-operational-logs。
在Azure portal中使用Azure Resource Manager模板创建事件中心。 若要按照本文中的其余步骤作,请右键单击 Deploy 到 Azure 按钮,然后在新窗口中选择 Open。
部署到 Azure 按钮会跳转至 Azure 门户。
为诊断日志创建事件中心命名空间和事件中心。 了解如何 创建事件中心命名空间。
请使用以下信息填写表格。 对于下表中未列出的任何设置,请使用默认值。
|
设置 |
建议的值 |
说明 |
|
订阅 |
订阅 |
选择要用于事件中心的Azure订阅。 |
|
资源组 |
test-resource-group |
创建新的资源组。 |
|
位置 |
选择最符合需求的区域。 |
在其他资源所在的同一位置创建事件中心命名空间。 |
|
命名空间名称 |
AzureMonitoringData |
选择用于标识命名空间的唯一名称。 |
|
事件中心名称 |
DiagnosticData |
事件中心位于命名空间下,该命名空间提供唯一的范围容器。 |
|
消费者组名称 |
adxpipeline |
创建消费者组名称。 消费者组允许多个消费应用程序,每个应用程序都有各自独立的事件流视图。 |
|
|
|
将Azure监视指标和日志连接到事件中心
现在需要将诊断指标和日志以及活动日志连接到事件中心。
将诊断指标和日志连接到事件中心
选择要从其中导出指标的资源。 多种资源类型支持导出诊断数据,包括事件中心命名空间、Azure Key Vault、Azure IoT Hub和Azure Data Explorer群集。 在本教程中,使用Azure Data Explorer群集作为资源。 可以查看查询性能指标和引入结果日志。
在Azure portal中选择 Kusto 群集。
选择“诊断设置”,然后选择“启用诊断”链接 。
“诊断设置”窗格打开 。 执行以下步骤:
将诊断日志数据命名为 ADXExportedData 。
在日志下,选中SucceededIngestion和FailedIngestion复选框。
在“METRIC”下,选中“查询性能”复选框。
选择 流式传输到事件中心 复选框。
选择“配置” 。
在“选择事件中心”窗格中,配置将数据从诊断日志导出到所创建事件中心的方法 :
- 在“选择事件中心命名空间”列表中,选择 AzureMonitoringData 。
- 在“选择事件中心名称”列表中,选择“DiagnosticData” 。
- 在“选择事件中心策略名称”列表中,选择 RootManagerSharedAccessKey 。
- 选择“确定” 。
选择“保存” 。
将活动日志连接到事件中心
在Azure portal的左侧菜单中,选择Activity 日志。
此时会打开“活动日志”窗口 。 选择“诊断设置”。
此时会打开“诊断设置”窗口。 选择“+ 添加诊断设置”。
此时将打开一个新的“诊断设置”窗口。
完成以下步骤:
- 在“诊断设置名称”字段中输入名称。
- 在复选框的左侧,选择要从订阅中收集的平台日志。
- 选择 流式传输到事件中心 复选框。
- 选择订阅。
- 在“事件中心命名空间”列表中,选择 AzureMonitoringData。
- 还可以选择您的“事件中心名称”。
- 在“事件中心策略名称”列表中,选择默认的事件中心策略名称。
- 在窗口的左上角,选择“保存”。 除非您选择事件中心名称,否则将创建一个名为 insights-operational-logs 的事件中心。
查看传输给事件中心的数据
等待几分钟,直到定义连接,然后活动日志导出到事件中心完成。 转到事件中心命名空间,查看创建的事件中心。
查看流入事件中心的数据:
将事件中心连接到Azure Data Explorer
现在需要为诊断指标和日志以及活动日志创建数据连接。
为诊断指标和日志以及活动日志创建数据连接
在名为 kustodocs 的 Azure Data Explorer 群集中,在左侧菜单中选择Databases。
在数据库窗口中,选择您的TestDatabase数据库。
在左侧菜单中,选择“数据引入”。
在“数据引入”窗口中,选择“+ 添加数据连接”。
在“数据连接”窗口中输入以下信息:
在“数据连接”窗口中使用以下设置:
数据源:
|
设置 |
建议的值 |
字段说明 |
|
数据连接名称 |
DiagnosticsLogsConnection |
要在Azure Data Explorer中创建的连接的名称。 |
|
事件中心命名空间 |
AzureMonitoringData |
先前选择的用于标识命名空间的名称。 |
|
事件中心 |
DiagnosticData |
你创建的事件中心。 |
|
Consumer group |
adxpipeline |
您在创建的事件中心中定义的消费者组。 |
|
|
|
目标表:
有两个路由选项:静态和动态。 在本教程中,将使用静态路由(默认值),在其中指定表名称、数据格式和映射。 让我的数据包含路由信息保持未选中。
|
设置 |
建议的值 |
字段说明 |
|
表 |
DiagnosticRawRecords |
您在 TestDatabase 数据库中创建的表。 |
|
数据格式 |
JSON |
表中使用的格式。 |
|
列映射 |
DiagnosticRawRecordsMapping |
在 TestDatabase 数据库中创建的映射,它将传入的 JSON 数据映射到 DiagnosticRawRecords 表的列名和数据类型。 |
|
|
|
选择“创建” 。
在“数据连接”窗口中使用以下设置:
数据源:
|
设置 |
建议的值 |
字段说明 |
|
数据连接名称 |
ActivityLogsConnection |
要在Azure Data Explorer中创建的连接的名称。 |
|
事件中心命名空间 |
AzureMonitoringData |
先前选择的用于标识命名空间的名称。 |
|
事件中心 |
洞察-运营日志 |
你创建的事件中心。 |
|
Consumer group |
$Default |
默认消费者组。 如果需要,可以创建不同的消费者组。 |
|
|
|
目标表:
有两个路由选项:静态和动态。 在本教程中,使用静态路由(默认值),可在其中指定表名称、数据格式和映射。 让我的数据包含路由信息保持未选中。
|
设置 |
建议的值 |
字段说明 |
|
表 |
ActivityLogsRawRecords |
您在 TestDatabase 数据库中创建的表。 |
|
数据格式 |
JSON |
表中使用的格式。 |
|
列映射 |
ActivityLogsRawRecordsMapping |
你在TestDatabase数据库中创建的映射,将传入的JSON数据映射到ActivityLogsRawRecords表的列名和数据类型。 |
|
|
|
选择“创建” 。
查询新的数据表
现已创建用于流送数据的管道。 默认情况下,通过群集进行引入需要 5 分钟,因此请在开始查询之前等待几分钟。
查询诊断指标表
以下查询分析Azure Data Explorer中诊断指标记录中的查询持续时间数据:
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_摄入源路径 |
| 00:06.156 |
TestDatabase |
DiagnosticRawRecords |
https://rtmkstrldkereneus00.blob.core.chinacloudapi.cn/20190827-readyforaggregation/1133_TestDatabase_DiagnosticRawRecords_6cf02098c0c74410bd8017c2d458b45d.json.zip |
查询活动日志表
以下查询分析Azure Data Explorer中的活动日志记录中的数据:
ActivityLogs
| where OperationName == 'MICROSOFT.EVENTHUB/NAMESPACES/AUTHORIZATIONRULES/LISTKEYS/ACTION'
| where ResultType == 'Success'
| summarize avg(DurationMs)
查询结果:
相关内容