教程:在 Azure 数据资源管理器中引入和查询监视数据

本教程介绍如何在不编写代码的情况下,将数据从诊断日志和活动日志引入到 Azure 数据资源管理器群集。 使用这种简单的引入方法,可快速开始查询 Azure 数据资源管理器,从而进行数据分析。

本教程介绍以下操作:

  • 在 Azure 数据资源管理器数据库中创建表和引入映射。
  • 使用更新策略设置引入数据的格式。
  • 创建事件中心并将其连接到 Azure 数据资源管理器。
  • 将 Azure Monitor 诊断指标和日志以及活动日志中的数据流式传输到事件中心。
  • 使用 Azure 数据资源管理器查询引入的数据。

注意

在同一 Azure 位置或区域中创建所有资源。

先决条件

Azure Monitor 数据提供程序:诊断指标和日志以及活动日志

查看并了解以下 Azure Monitor 诊断指标和日志以及活动日志提供的数据。 你将基于这些数据架构创建引入管道。 请注意,日志中的每个事件都具有记录数组。 稍后在本教程中,将拆分此记录数组。

诊断指标和日志以及活动日志的示例

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 数据资源管理器中设置引入管道

设置 Azure 数据资源管理器管道需要执行若干步骤,如表创建和数据引入。 此外,你可以处理、映射和更新数据。

连接到 Azure 数据资源管理器 Web UI

在 Azure 数据资源管理器的 TestDatabase 数据库中,选择“查询”打开 Azure 数据资源管理器 Web UI。

“查询”页。

创建目标表

Azure Monitor 日志的结构不是表格。 你将操纵数据并将每个事件扩展到一个或多个记录。 将原始数据引入到活动日志的中间表 ActivityLogsRawRecords 以及诊断指标和日志的中间表 DiagnosticRawRecords。 此时,数据已经过处理和扩展。 接着,使用更新策略将扩展的数据引入到活动日志的 ActivityLogs 表、诊断指标的 DiagnosticMetrics 表以及诊断日志的 DiagnosticLogs 表。 这意味着需要创建两个单独的表来引入活动日志,并创建三个单独的表来引入诊断指标和日志。

使用 Azure 数据资源管理器 Web UI 在 Azure 数据资源管理器数据库中创建目标表。

创建诊断指标表

  1. 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)
    
  2. 选择“运行”以创建该表 。

    运行查询。

  3. 使用以下查询在 TestDatabase 数据库中创建名为 DiagnosticRawRecords 的中间数据表,以进行数据操作。 选择“运行”以创建该表 。

    .create table DiagnosticRawRecords (Records:dynamic)
    
  4. 为中间表设置零保留策略

    .alter-merge table DiagnosticRawRecords policy retention softdelete = 0d
    

创建表映射

由于数据格式为 json,因此需要数据映射。 json 映射将每个 JSON 路径映射到表列名。 包含特殊字符的 JSON 路径应转义为 ["属性名称"]。 有关详细信息,请参阅 JSONPath 语法

将诊断指标和日志映射到表

若要将诊断指标和日志数据映射到表,请使用以下查询:

.create table DiagnosticRawRecords ingestion json mapping 'DiagnosticRawRecordsMapping' '[{"column":"Records","Properties":{"path":"$.records"}}]'

为指标和日志数据创建更新策略

为诊断指标创建数据更新策略

  1. 创建一个函数来扩展诊断指标记录集合,使集合中的每个值收到一个单独的行。 使用 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)
    }
    
  2. 更新策略添加到目标表。 此策略将针对 DiagnosticRawRecords 中间数据表中任何新引入的数据自动运行查询,并将查询结果引入到 DiagnosticMetrics 表中:

    .alter table DiagnosticMetrics policy update @'[{"Source": "DiagnosticRawRecords", "Query": "DiagnosticMetricsExpand()", "IsEnabled": "True", "IsTransactional": true}]'
    

创建一个 Azure 事件中心命名空间

通过 Azure 诊断设置,能够将指标和日志导出到存储帐户或事件中心。 本教程通过事件中心路由指标和日志。 按照以下步骤,为诊断指标和日志创建事件中心命名空间和事件中心。 Azure Monitor 将为活动日志创建事件中心 insights-operational-logs 。

  1. 在 Azure 门户中使用 Azure 资源管理器模板创建事件中心。 若要执行本文的剩余步骤,请右键单击“部署到 Azure”,然后选择“在新窗口中打开” 。 单击“部署到 Azure”按钮可转到 Azure 门户。

    “部署到 Azure”按钮。

  2. 为诊断日志创建事件中心命名空间和事件中心。 了解如何创建事件中心命名空间

  3. 使用以下信息填写窗体。 对于下表中未列出的任何设置,请使用默认值。

    设置 建议的值 说明
    订阅 订阅 选择要用于事件中心的 Azure 订阅。
    资源组 test-resource-group 创建新的资源组。
    位置 选择最符合需求的区域。 在其他资源所在的同一位置创建事件中心命名空间。
    命名空间名称 AzureMonitoringData 选择用于标识命名空间的唯一名称。
    事件中心名称 DiagnosticData 事件中心位于命名空间下,该命名空间提供唯一的范围容器。
    使用者组名称 adxpipeline 创建使用者组名称。 使用者组允许多个使用应用程序各自具有事件流的单独视图。

将 Azure Monitor 指标和日志连接到事件中心

现在需要将诊断指标和日志以及活动日志连接到事件中心。

将诊断指标和日志连接到事件中心

选择要从其中导出指标的资源。 支持导出诊断数据的资源类型有多种,包括事件中心命名空间、Azure 密钥保管库、Azure IoT 中心和 Azure 数据资源管理器群集。 在本教程中,我们将使用 Azure 数据资源管理器群集作为资源,并查看查询性能指标和引入结果日志。

  1. 在 Azure 门户中选择你的 Kusto 群集。

  2. 选择“诊断设置”,然后选择“启用诊断”链接 。

    诊断设置。

  3. “诊断设置”窗格打开 。 执行以下步骤:

    1. 将诊断日志数据命名为 ADXExportedData 。

    2. 在“日志”下,选中“SucceededIngestion”和“FailedIngestion”复选框 。

    3. 在“指标”下,选中“查询性能”复选框 。

    4. 选择“流式传输到事件中心”复选框 。

    5. 选择“配置” 。

      “诊断设置”窗格。

  4. 在“选择事件中心”窗格中,配置将数据从诊断日志导出到所创建事件中心的方法 :

    1. 在“选择事件中心命名空间”列表中,选择 AzureMonitoringData 。
    2. 在“选择事件中心名称”列表中,选择“DiagnosticData” 。
    3. 在“选择事件中心策略名称”列表中,选择 RootManagerSharedAccessKey 。
    4. 选择“确定” 。
  5. 选择“保存” 。

查看流入事件中心的数据

  1. 需等待几分钟,才能定义连接,完成活动日志到事件中心的数据导出。 转到事件中心命名空间,查看创建的事件中心。

    创建的事件中心。

  2. 查看流入事件中心的数据:

    事件中心的数据。

将事件中心连接到 Azure 数据资源管理器

现在需要为诊断指标和日志以及活动日志创建数据连接。

为诊断指标和日志以及活动日志创建数据连接

  1. 在名为 kustodocs 的 Azure 数据资源管理器群集中,选择左侧菜单中的“数据库”

  2. 在“数据库”窗口中,选择 TestDatabase 数据库

  3. 在左侧菜单中,选择“数据引入”。

  4. 在“数据引入”窗口中,选择“+ 添加数据连接”。

  5. 在“数据连接”窗口中输入以下信息:

    事件中心数据连接。

  1. 在“数据连接”窗口中使用以下设置

    数据源:

    设置 建议的值 字段说明
    数据连接名称 DiagnosticsLogsConnection 要在 Azure 数据资源管理器中创建的连接的名称。
    事件中心命名空间 AzureMonitoringData 先前选择的用于标识命名空间的名称。
    事件中心 DiagnosticData 你创建的事件中心。
    使用者组 adxpipeline 在创建的事件中心定义的使用者组。

    目标表:

    有两个路由选项:静态和动态。 本教程将使用静态路由(默认),需在其中指定表名、数据格式和映射。 让“我的数据包含路由信息”保持取消选中状态。

    设置 建议的值 字段说明
    DiagnosticRawRecords 在 TestDatabase 数据库中创建的表
    数据格式 JSON 表中使用的格式。
    列映射 DiagnosticRawRecordsMapping TestDatabase 数据库中创建的映射,它将传入的 JSON 数据映射到 DiagnosticRawRecords 表的列名和数据类型。
  2. 选择“创建” 。

查询新表

现已创建用于流送数据的管道。 默认情况下,通过群集引入数据需要 5 分钟,因此,请先让数据流动几分钟,然后再开始查询。

查询诊断指标表

以下查询分析 Azure 数据资源管理器诊断指标记录中的查询持续时间数据:

DiagnosticMetrics
| where Timestamp > ago(15m) and MetricName == 'QueryDuration'
| summarize avg(Average)

查询结果:

avg_Average
00:06.156