使用 Azure Monitor 工作簿创建交互式报表

可通过多种方式在工作簿中创建交互式报表和体验:

  • 参数:当更新某个参数时,使用该参数的任何控件都会自动刷新并重新绘制,以反映新值。 此行为是大多数 Azure 门户报告支持交互性的方式。 工作簿以直接方式提供此功能,可最大程度地减少用户的工作量。
  • 网格、磁贴和图表选择:可以构造以下方案:在网格中选择某行可基于该行的内容更新后续图表。 例如,你可能有一个网格,其中显示请求列表以及一些统计信息(例如失败计数)。 可以对其进行设置,以便如果选择某个请求的对应行,以下详细图表会更新为仅显示该请求。 了解如何设置网格行单击
  • 网格单元格单击:可以使用称为链接呈现器的特殊类型的网格列呈现器来添加交互。 链接呈现器根据单元格的内容将网格单元格转换为超链接。 工作簿支持多种链接呈现器,包括打开资源概述窗格、属性包查看器以及 Application Insights 搜索、使用情况和事务跟踪的呈现器。 了解如何设置网格单元格单击
  • 条件可见性:可以基于参数的值使控件出现或消失。 这样,你便可以根据用户输入或遥测状态生成不同外观的报表。 例如,当没有问题时,你可以向使用者显示摘要。 还可以在出现问题时显示详细信息。 了解如何设置条件可见性
  • 导出具有多重选择的参数:选择一行或多行时,可以从查询和指标工作簿组件导出参数。 了解如何在网格和图表中设置多重选择

设置网格行单击

  1. 选择“编辑”,以确保处于编辑模式。

  2. 选择“添加查询”,将日志查询控件添加到工作簿。

  3. 选择日志查询类型、资源类型和目标资源。

  4. 使用查询编辑器输入用于分析的 KQL:

    requests
    | summarize AllRequests = count(), FailedRequests = countif(success == false) by Request = name
    | order by AllRequests desc
    
  5. 选择“运行查询”以查看结果。

  6. 选择“高级设置”以打开“高级设置”窗格。

  7. 选中“当选择项时导出参数”复选框。

  8. 选择“添加参数”并填写以下信息:

    • 要导出的字段Request
    • 参数名称:
    • 默认值All requests

    显示高级设置工作簿编辑器的屏幕截图,其中包含用于将字段导出为参数的设置。

  9. 可选。 如果要导出所选行的整个内容而不是特定列,请将“要导出的字段”保留为未设置状态。 整个行的内容会作为 JSON 导出到参数。 在引用 KQL 控件时,请使用 todynamic 函数来分析该 JSON 并访问各个列。

  10. 选择“保存”

  11. 选择“完成编辑”。

  12. 如前面的步骤所示,添加另一个查询控件。

  13. 使用查询编辑器输入用于分析的 KQL。

    requests
    | where name == '{SelectedRequest}' or 'All Requests' == '{SelectedRequest}'
    | summarize ['{SelectedRequest}'] = count() by bin(timestamp, 1h)
    
  14. 选择“运行查询”以查看结果。

  15. 将“可视化效果”更改为“面积图”

  16. 选择要在第一个网格中选中的行。 请注意,下面的面积图已根据所选请求筛选了内容。

在编辑模式下,生成的报表如此示例所示:

显示前两个查询处于编辑模式的工作簿的屏幕截图。

下图显示了基于相同原理的、处于只读模式的更精致交互式报表。 报表使用网格单击来导出参数,而这些参数又在两个图表和一个文本块中使用。

显示使用网格单击的工作簿报表的屏幕截图。

设置网格单元格单击

  1. 选择“编辑”,以确保处于编辑模式。

  2. 选择“添加查询”,将日志查询控件添加到工作簿。

  3. 选择日志查询类型、资源类型和目标资源。

  4. 使用查询编辑器输入用于分析的 KQL:

    requests
    | summarize Count = count(), Sample = any(pack_all()) by Request = name
    | order by Count desc
    
  5. 选择“运行查询”以查看结果。

  6. 选择“列设置”打开“设置”窗格。

  7. 在“列”部分,设置:

    • 示例
      • 列呈现器Link
      • 要打开的视图Cell Details
      • 链接标签Sample
    • 计数
      • 列呈现器Bar
      • 调色板Blue
      • 最小值:
    • 请求
      • 列呈现器Automatic
  8. 选择“保存并关闭”以应用更改。

    显示编辑列设置窗格的屏幕截图。

  9. 在网格中选择“示例”链接以打开包含示例请求详细信息的窗格。

    显示示例请求详细信息窗格的屏幕截图。

了解链接操作如何工作以增强工作簿交互性。

设置条件可见性

  1. 按照设置网格行单击部分中的步骤来设置两个交互式控件。

  2. 使用以下值添加新参数:

    • 参数名称:
    • 参数类型:
    • 必需:checked
    • 从以下位置获取数据:
    • JSON 输入:
  3. 选择“保存”以提交更改。

    显示在工作簿中编辑交互式参数的屏幕截图。

  4. 将参数值设置为 Yes

    显示在工作簿中设置交互式参数值的屏幕截图。

  5. 在带有面积图的查询控件中,选择“高级设置”(齿轮图标)。

  6. 如果“ShowDetails”设置为 ,请选择“使此项目有条件可见”。

  7. 选择“完成编辑”以提交更改。

  8. 在工作簿工具栏上,选择“完成编辑”。

  9. 将ShowDetails的值切换为。 请注意下面的图表已消失。

下图显示了 “ShowDetails”Yes的情况:

显示具有可见的条件组件的工作簿的屏幕截图。

下图显示了“ShowDetails”No 的隐藏情况:

显示具有隐藏的条件组件的工作簿的屏幕截图。

在网格和图表中设置多重选择

选择一行或多行时,查询和指标组件可以导出参数。

此屏幕截图显示了具有多个参数的工作簿导出参数设置。

  1. 在显示网格的查询组件中,选择“高级设置”。
  2. 选中“选择这些项时,将导出参数”复选框。
  3. 选中“允许选择多个值”复选框。
    • 显示的可视化效果将允许多选,导出的参数值将是值的数组,类似于使用多选下拉参数时的情况。
    • 如果被清除后,显示可视化效果仅捕获最后一个选择的项目,并且每次仅导出一个值。
  4. 使用添加参数工具对要导出的每个参数进行操作。 此时会出现一个弹出窗口,其中包含用于要导出的参数的设置。

启用单选后,可以指定要导出原始数据的哪个字段。 字段包括参数名称、参数类型以及未选择任何内容时所要使用的默认值。

启用多选后,可指定要导出原始数据的哪个字段。 字段包括参数名称、参数类型、引用方式和分隔符。 在查询中替换箭头值时,使用引用方式和分隔符值将其转换为文本。 在多选中,如果未选中任何值,则默认值为空数组。

注释

对于多选,仅导出唯一值。 例如,看不到输出数组值,如“1,1,2,1”。 数组输出将为“1,2”。

如果在导出设置中将“要导出的字段”保留为空,则数据中的所有可用字段都将导出为键:值对的字符串化 JSON 对象。 对于网格和标题,字符串包含网格中的字段。 对于图表,可用字段会是 x、y、系列和标签(具体取决于图表类型)。

虽然默认行为是将参数导出为文本,但如果知道字段是订阅或资源 ID,请以导出参数类型形式使用该信息。 随后可以在需要这些参数类型的下游位置使用这类参数。

捕获用户输入以在查询中使用

可以使用下拉列表捕获用户输入,并在查询中使用选择。 例如,可以使用一个下拉列表接受一组虚拟机,然后筛选 KQL 以仅包含所选计算机。 在大多数情况下,此步骤与在查询中包含参数值一样简单:

    Perf
    | where Computer in ({Computers})
    | take 5

在更高级的方案中,可能需要先转换参数结果,然后才能在查询中进行使用。 采用以下 OData 筛选器有效负载:

{
    "name": "deviceComplianceTrend",
    "filter": "(OSFamily eq 'Android' or OSFamily eq 'OS X') and (ComplianceState eq 'Compliant')"
}

以下示例演示如何启用此方案。 假设希望 OSFamilyComplianceState 筛选器的值来自工作簿中的下拉列表。 筛选器可以包含多个值,如前面的 OsFamily 情况所示。 它还需要支持要包含所有维度值的情况,即没有筛选器。

设置参数

  1. 创建新的空工作簿添加参数组件

  2. 选择“添加参数”以创建新参数。 使用以下设置:

    • 参数名称:

    • 显示名称Operating system

    • 参数类型:

    • 允许多选:

    • 分隔符:(前后带有空格)

    • 引用<empty>

    • 从以下位置获取数据:

    • JSON 输入:

      [
          { "value": "OSFamily eq 'Android'", "label": "Android" },
          { "value": "OSFamily eq 'OS X'", "label": "OS X" }
      ]
      
    • 在“包括在下拉菜单中”中:

      • 选中“所有”复选框。
      • 选择所有值OSFamily ne '#@?'
    • 选择“保存”以保存此参数。

  3. 使用以下这些设置添加另一个参数:

    • 参数名称:

    • 显示名称Compliance State

    • 参数类型:

    • 允许多选:

    • 分隔符:(前后带有空格)

    • 引用<empty>

    • 从以下位置获取数据:

    • JSON 输入:

      [
          { "value": "ComplianceState eq 'Compliant'", "label": "Compliant" },
          { "value": "ComplianceState eq 'Non-compliant'", "label": "Non compliant" }
      ]        
      
    • 在“包括在下拉菜单中”中:

      • 选中“所有”复选框。
      • 选择所有值ComplianceState ne '#@?'
    • 选择“保存”以保存此参数。

  4. 选择“添加文本”以添加文本块。 在“要显示的 Markdown 文本”块中,添加:

    {
        "name": "deviceComplianceTrend",
        "filter": "({OsFilter}) and ({ComplianceStateFilter})"
    }
    

    此屏幕截图显示了参数设置:

    显示下拉列表的参数设置及参数值的屏幕截图。

单个筛选器值

最简单的情况是在每个维度中选择单个筛选器值。 下拉列表控件使用 JSON 输入字段的值作为参数的值。

{
    "name": "deviceComplianceTrend",
    "filter": "(OSFamily eq 'OS X') and (ComplianceState eq 'Compliant')"
}

显示带有参数值并选择单个值的下拉列表的屏幕截图。

多个筛选器值

如果选择多个筛选器值(例如 Android 和 OS X 操作系统),则 DelimiterQuote with 参数设置会启动并生成此复合筛选器:

{
    "name": "deviceComplianceTrend",
    "filter": "(OSFamily eq 'OS X' or OSFamily eq 'Android') and (ComplianceState eq 'Compliant')"
}

显示带有参数值并选择多个值的下拉列表的屏幕截图。

无筛选器情况

另一种常见情况是没有用于该维度的筛选器。 此方案等效于在结果集中包括维度的所有值。 启用它的方法是在下拉列表中提供 All 选项,并使其返回计算结果始终为 true 的筛选表达式。 一个例子是 ComplianceState eq '#@?'

{
    "name": "deviceComplianceTrend",
    "filter": "(OSFamily eq 'OS X' or OSFamily eq 'Android') and (ComplianceState ne '#@?')"
}

显示带有参数值并且未选择任何筛选器的下拉列表的屏幕截图。

在不同的可视化效果中重复使用查询数据

有时你希望以不同的方式可视化基础数据集,而无需每次支付查询费用。 此示例演示如何在查询控件中使用 Merge 选项执行此操作。

设置参数

  1. 创建一个新的空白工作簿

  2. 选择“添加查询”以创建查询控件,并输入以下值:

    • 数据源:

    • 资源类型Log Analytics

    • Log Analytics 工作区:选择一个包含性能数据的工作区

    • Log Analytics 工作区日志查询

      Perf
      | where CounterName == '% Processor Time'
      | summarize CpuAverage = avg(CounterValue), CpuP95 = percentile(CounterValue, 95) by Computer
      | order by CpuAverage desc
      
  3. 选择“运行查询”以查看结果。

    此结果数据集是我们要在多个可视化效果中重复使用的数据集。

    显示工作簿查询的结果的屏幕截图。

  4. 转到“高级设置”选项卡,然后输入 作为名称。

  5. 选择“添加查询”以创建另一个查询控件。

  6. 对于“数据源”,请选择 Merge

  7. 选择“添加合并”

  8. 在设置窗格中,设置:

    • 合并类型Duplicate table
    • Cpu data
  9. 选择“运行合并”。 你会得到与前面相同的结果。

     在工作簿中显示重复查询结果的屏幕截图。

  10. 设置表格选项:

    • 使用“合并后命名”列为结果列设置易记名称。 例如,可以将 CpuAverage 重命名为 CPU utilization (avg),然后使用“运行合并”以更新结果集。
    • 使用“删除”删除列。
      • 选择 [Cpu data].CpuP95 行。
      • 在查询控件工具栏中使用“删除”
      • 使用“运行合并”以查看没有 CpuP95 列的结果集
  11. 通过选择“上移”或“下移”更改列的顺序。

  12. 通过选择“添加新项”,基于其他列的值添加新列。

  13. 使用“列设置”中的选项设置表样式以获取所需可视化效果。

  14. 根据需要添加针对 Cpu data 结果集工作的更多查询控件。

此示例并排显示平均和 P95 CPU 使用率:

显示使用相同查询的两个工作簿控件的屏幕截图。

使用 Azure 资源管理器检索订阅中的警报

此示例演示如何使用 Azure 资源管理器查询控件列出订阅中的所有现有警报。 本指南还会使用 JSON 路径转换设置结果格式。 请参阅支持的资源管理器调用列表

设置参数

  1. 创建一个新的空白工作簿

  2. 选择“添加参数”并设置:

    • 参数名称:
    • 参数类型:
    • 必需:Checked
    • 从以下位置获取数据:
  3. 选择“保存”

  4. 选择“添加查询”以创建查询控件,并使用以下这些设置。 对于此示例,我们使用警报全部获取 REST 调用来获取订阅的现有警报列表。 有关支持的 API 版本,请参阅 Azure REST API 参考

    • 数据源:
    • Http 方法GET
    • 路径/subscriptions/{Subscription:id}/providers/Microsoft.AlertsManagement/alerts
    • 在“参数”选项卡上添加 API 版本参数并设置
      • 参数api-version
      • 2018-05-05
  5. 从创建的订阅参数中选择订阅,然后选择“运行查询”以查看结果。

    此原始 JSON 会从资源管理器返回:

    使用资源管理器提供程序在工作簿中显示警报数据 JSON 响应的屏幕截图。

设置响应格式

你可能对此处的信息感到满意。 不过,让我们提取一些有趣的属性,并采用易于阅读的方式设置响应格式。

  1. 转到“结果设置”选项卡。
  2. 将“结果格式”从 更改为 ContentJSON 路径是工作簿转换器。
  3. 在 JSON 路径设置中,将JSON 路径表设置为$.value.[*].properties.essentials。 这会从返回的 JSON 中提取所有 "value.*.properties.essentials" 字段。
  4. 选择“运行查询”以查看网格。

使用资源管理器提供程序以网格格式在工作簿中显示警报数据的屏幕截图。

筛选结果

JSON 路径还允许从生成的表中选择信息以显示为列。

例如,如果要将结果筛选到 TargetResource、Severity、AlertState、AlertRule、Description、StartTime 和 ResolvedTime 列,则可以在 JSON 路径的列表中添加以下行

列 ID 列 JSON 路径
TargetResource $.targetResource
严重程度 $.severity
AlertState $.alertState
AlertRule $.alertRule
DESCRIPTION $.description
开始时间 $.startDateTime
解决时间 $.monitorConditionResolvedDateTime

使用资源管理器提供程序以网格格式显示最终查询结果的屏幕截图。

后续步骤