菜单
Grafana Cloud Enterprise 开源

Azure Monitor 查询编辑器

本主题介绍 Azure Monitor 数据源的特定查询。有关 Grafana 中查询数据源的通用文档,请参阅 查询和转换数据

选择查询编辑模式

Azure Monitor 数据源的查询编辑器有三种模式,取决于您要查询的 Azure 服务:

查询 Azure Monitor 指标

Azure Monitor 指标从 支持的资源 收集数字数据,您可以查询它们来调查资源的健康状况和使用情况,从而最大限度地提高可用性和性能。

Monitor 指标使用轻量级格式,仅以特定结构存储数字数据,并支持近实时场景,这使其对快速检测问题很有用。相比之下,Azure Monitor 日志可以存储各种数据类型,每种数据类型都有其自身的结构。

Azure Logs Metrics sample query visualizing CPU percentage over time
Azure Logs 指标样本查询可视化 CPU 随时间变化的百分比

创建指标查询

创建指标查询:

  1. 在 Grafana 面板中,选择 Azure Monitor 数据源。

  2. 选择 Metrics(指标)服务。

  3. 使用订阅、资源组、资源类型和资源字段选择要从中查询指标的资源。只要资源属于同一订阅、区域和资源类型,也可以选择多个资源。请注意,只有有限数量的资源类型支持此功能。

  4. 要选择默认命名空间以外的命名空间(例如,选择存储帐户等组织在多个命名空间下的资源),请使用 Namespace 选项。

    注意

    Azure Monitor Metrics API 返回的所有指标并非都有值。

    数据源检索每个订阅支持的指标列表,并忽略从未有值的指标。

  5. Metric(指标)字段中选择一个指标。

(可选)您可以应用进一步的聚合或按维度进行筛选。

  1. 将聚合从默认的平均值更改为显示最小值、最大值或总值。
  2. 指定自定义时间粒度。默认情况下,Grafana 根据您选择的时间范围为您选择时间粒度间隔。
  3. 对于具有多个维度的指标,您可以拆分和筛选返回的指标。例如,Application Insights 依赖项调用指标支持为成功和不成功的调用返回多个时间序列。
Azure Monitor Metrics screenshot showing Dimensions
Azure Monitor Metrics 显示维度的截图

可用选项根据所选指标的相关性而变化。

您还可以使用 模板变量 增强查询。

格式化图例别名

您可以通过使用别名来更改指标的图例标签。在 Legend Format(图例格式)字段中,您可以按您喜欢的任何方式组合下面定义的别名。

例如

  • Blob Type: {{ blobtype }} 变为 Blob Type: PageBlob, Blob Type: BlockBlob
  • {{ resourcegroup }} - {{ resourcename }} 变为 production - web_server
别名模式描述
{{ subscriptionid }}替换为订阅 ID。
{{ subscription }}替换为订阅名称。
{{ resourcegroup }}替换为资源组。
{{ namespace }}替换为资源类型或命名空间,例如 Microsoft.Compute/virtualMachines
{{ resourcename }}替换为资源名称。
{{ metric }}替换为指标名称,例如“Percentage CPU”。
{{ arbitraryDimensionID }}替换为指定维度的值。例如,{{ blobtype }} 变为 BlockBlob
{{ dimensionname }}(为向后兼容性保留) 替换为第一个维度的名称。
{{ dimensionvalue }}(为向后兼容性保留) 替换为第一个维度的值。

使用维度进行筛选

某些指标还具有维度,这些维度关联额外的元数据。维度表示为分配给指标每个值的键值对。Grafana 可以根据维度值显示和筛选指标。

数据源支持 Monitor Metrics API 文档 中详细介绍的 equalsnot equalsstarts with 运算符。

有关多维指标的更多信息,请参阅 Azure Monitor 数据平台指标文档Azure Monitor 筛选文档

查询 Azure Monitor 日志

Azure Monitor 日志从 支持的资源 收集并组织日志和性能数据,并使用 Kusto 查询语言 (KQL) 提供许多数据源供您一同查询。

虽然 Azure Monitor 指标仅存储简化的数字数据,但日志可以存储不同的数据类型,每种数据类型都有其自身的结构。您还可以使用 KQL 对日志数据执行复杂分析。

Azure Monitor 数据源还支持查询 Basic Logs 表(如果它们存在于您的 Log Analytics 工作区中)。必须在数据源配置中启用此功能。

Azure Monitor Logs sample query comparing successful requests to failed requests
Azure Monitor Logs 样本查询比较成功请求和失败请求

创建日志查询

创建日志查询:

  1. 在 Grafana 面板中,选择 Azure Monitor 数据源。

  2. 选择 Logs(日志)服务。

  3. 选择要查询的资源。只要资源类型相同,就可以选择多个资源。

    或者,您可以动态查询单个资源组或订阅下的所有资源。

    注意

    如果在查询中指定了时间跨度,则查询和仪表盘的时间跨度重叠部分将用作查询时间跨度。详细信息请参阅 API 文档

  4. 输入您的 KQL 查询。

您还可以使用 模板变量 增强查询。

创建 Basic Logs 查询:

  1. 确保数据源已启用 Enable Basic Logs 开关。
  2. 在 Grafana 面板中,选择 Azure Monitor 数据源。
  3. 选择 Logs(日志)服务。
  4. 选择要查询的资源。只要资源类型相同,就可以选择多个资源。
  5. Logs 开关从 Analytics 切换到 Basic。将显示一个模式窗口,通知用户潜在的额外费用。

    注意

    Basic Logs 查询不支持在查询中指定时间范围。时间范围将被硬编码为仪表盘的时间范围。还有其他查询限制。详细信息请参阅

    文档。

  6. 输入您的 KQL 查询。

您还可以使用 模板变量 增强查询。

日志查询示例

Azure Monitor 日志查询使用 Kusto 查询语言 (KQL) 编写,这是一种类似于 SQL 的丰富语言。

Azure 文档包含帮助您学习 KQL 的资源:

时间范围: 用于查询的时间范围可以通过时间范围开关进行修改。选择 Query 将仅使用查询中指定的时间范围。指定 Dashboard 将仅使用 Grafana 时间范围。如果在查询中未指定时间范围,将应用默认的 Log Analytics 时间范围。有关此更改的更多详细信息,请参阅 Azure Monitor Logs API 文档。如果之前选择了 Intersection 选项,它将默认迁移到 Dashboard

此示例查询返回虚拟机 CPU 性能,按 5ms 时间粒度平均

kusto
Perf
# $__timeFilter is a special Grafana macro that filters the results to the time span of the dashboard
| where $__timeFilter(TimeGenerated)
| where CounterName == "% Processor Time"
| summarize avg(CounterValue) by bin(TimeGenerated, 5m), Computer
| order by TimeGenerated asc

对随时间变化的值使用时间序列查询,通常用于图表可视化,例如时间序列面板。每个查询应至少返回一个 datetime 列和一个数字值列。结果还必须按 datetime 列升序排序。

您还可以创建一个至少包含一个非数字、非 datetime 列的查询。Azure Monitor 将这些列视为维度,它们在响应中成为标签。

例如,此查询返回按小时、Computer 和 CounterName 分组的聚合计数

kusto
Perf
| where $__timeFilter(TimeGenerated)
| summarize count() by bin(TimeGenerated, 1h), Computer, CounterName
| order by TimeGenerated asc

您还可以选择其他数字值列,无论是否带有多个维度。例如,此查询返回按小时、Computer、CounterName 和 InstanceName 计算的计数和平均值

kusto
Perf
| where $__timeFilter(TimeGenerated)
| summarize Samples=count(), ["Avg Value"]=avg(CounterValue)
    by bin(TimeGenerated, $__interval), Computer, CounterName, InstanceName
| order by TimeGenerated asc

使用表格面板的表格查询生成列和行列表。此查询返回包含指定的六个列的行

kusto
AzureActivity
| where $__timeFilter()
| project TimeGenerated, ResourceGroup, Category, OperationName, ActivityStatus, Caller
| order by TimeGenerated desc

在日志查询中使用宏

为了帮助您编写查询,您可以在 where 子句中使用几个 Grafana 宏:

描述
$__timeFilter()将结果按仪表盘时间范围进行筛选。
示例:TimeGenerated >= datetime(2018-06-05T18:09:58.907Z) and TimeGenerated <= datetime(2018-06-05T20:09:58.907Z)
$__timeFilter(datetimeColumn)类似于 $__timeFilter(),但指定了要筛选的自定义字段。
$__timeFrom()展开为仪表盘时间范围的开始时间。
示例:datetime(2018-06-05T18:09:58.907Z)
$__timeTo()展开为仪表盘时间范围的结束时间。
示例:datetime(2018-06-05T20:09:58.907Z)
$__escapeMulti($myVar)转义多值模板变量中的非法字符。
如果 $myVar 的值为字符串 '\\grafana-vm\Network(eth0)\Total','\\hello!',请使用此宏将其展开为 @'\\grafana-vm\Network(eth0)\Total', @'\\hello!'

如果使用单值变量,请改为内联转义变量:@'\$myVar'
$__contains(colName, $myVar)展开多值模板变量。
如果 $myVar 的值为 'value1','value2',请使用此宏将其展开为 colName in ('value1','value2')

如果使用 All 选项,请选中 Include All Option 复选框,并在 Custom all value 字段中键入值 all。如果 $myVar 的值为 all,则宏会展开为 1 == 1
对于具有许多选项的模板变量,这可以避免构建大型的“where..in”子句,从而提高性能。

此外,Grafana 内置了 $__interval,用于计算以秒为单位的间隔。

查询 Azure Resource Graph

Azure Resource Graph (ARG) 是一项 Azure 服务,旨在扩展 Azure Resource Management,实现高效的资源探索和跨一组订阅的大规模查询能力,从而更有效地治理环境。通过查询 ARG,您可以使用复杂的过滤查询资源,根据治理要求迭代探索资源,并评估在庞大云环境中应用策略的影响。

Azure Resource Graph sample query listing virtual machines on an account
Azure Resource Graph 样本查询列出帐户上的虚拟机

创建资源图查询

ARG 查询使用 Kusto 查询语言 (KQL) 的变体编写,但并非所有 Kusto 语言功能都可在 ARG 中使用。Azure Resource Graph 查询格式化为表格数据。

如果您的 Azure 凭据授予您访问多个订阅的权限,您可以在输入查询之前选择多个订阅。

资源图查询示例

Azure 文档还包含 样本查询,帮助您入门。

按资源属性排序结果

此查询返回所选订阅中的所有资源,但仅返回名称、类型和位置属性

kusto
Resources
| project name, type, location
| order by name asc

此查询使用 order byname 属性升序 (asc) 排序属性。您可以更改按哪个属性排序以及排序顺序 (ascdesc)。此查询使用 project 仅在结果中显示列出的属性。您可以使用此方法在查询中添加或移除属性。

使用复杂过滤查询资源

您可以按标签名称和值筛选 Azure 资源。

例如,此查询返回带有 environment 标签值 Internal 的资源列表

kusto
Resources
| where tags.environment=~'internal'
| project name

此查询在 type 匹配中使用 =~ 使查询不区分大小写。您还可以将 project 与其他属性一起使用,或者添加或移除更多属性。

按属性对值进行分组和聚合

您可以使用 summarizecount 定义如何按属性对值进行分组和聚合。

例如,此查询返回每条建议的健康、不健康和不适用资源的计数

kusto
securityresources
| where type == 'microsoft.security/assessments'
| extend resourceId=id,
    recommendationId=name,
    resourceType=type,
    recommendationName=properties.displayName,
    source=properties.resourceDetails.Source,
    recommendationState=properties.status.code,
    description=properties.metadata.description,
    assessmentType=properties.metadata.assessmentType,
    remediationDescription=properties.metadata.remediationDescription,
    policyDefinitionId=properties.metadata.policyDefinitionId,
    implementationEffort=properties.metadata.implementationEffort,
    recommendationSeverity=properties.metadata.severity,
    category=properties.metadata.categories,
    userImpact=properties.metadata.userImpact,
    threats=properties.metadata.threats,
    portalLink=properties.links.azurePortal
| summarize numberOfResources=count(resourceId) by tostring(recommendationName), tostring(recommendationState)

在 ARG 中,许多嵌套属性(properties.displayName)是 dynamic 类型,应该使用 tostring() 将其转换为字符串才能对其进行操作。

在资源图查询中使用宏

为了帮助您编写查询,您可以在 where 子句中使用几个 Grafana 宏:

描述
$__timeFilter()展开为 timestamp ≥ datetime(2018-06-05T18:09:58.907Z) and timestamp ≤ datetime(2018-06-05T20:09:58.907Z),其中 from 和 to datetime 来自 Grafana 时间选择器。
$__timeFilter(datetimeColumn)展开为 datetimeColumn ≥ datetime(2018-06-05T18:09:58.907Z) and datetimeColumn ≤ datetime(2018-06-05T20:09:58.907Z),其中起始和结束时间来自 Grafana 时间选择器。
$__timeFrom()返回 Grafana 选择器的起始时间。
示例:datetime(2018-06-05T18:09:58.907Z)
$__timeTo()返回 Grafana 选择器的结束时间。
示例:datetime(2018-06-05T20:09:58.907Z)
$__escapeMulti($myVar)转义多值模板变量中的非法字符。
如果 $myVar 具有字符串值 '\\grafana-vm\Network(eth0)\Total','\\hello!',则会展开为 @'\\grafana-vm\Network(eth0)\Total', @'\\hello!'
如果使用单值变量,请改为内联转义变量:@'\$myVar'
$__contains(colName, $myVar)展开多值模板变量。
如果 $myVar 具有值 'value1','value2',则会展开为 colName in ('value1','value2')
如果使用 All(全部)选项,请勾选 Include All Option(包含全部选项)复选框,并在 Custom all value(自定义全部值)字段中输入以下值:all
如果 $myVar 的值为 all,则会展开为 1 == 1
对于具有许多选项的模板变量,这可以避免构建大型的“where..in”子句,从而提高性能。

查询 Application Insights Traces

Azure Application Insights 是一项提供应用性能监控 (APM) 功能的服务。Application Insights 可用于收集指标、遥测和跟踪日志数据。

Application Insights 将跟踪数据存储在底层 Log Analytics 工作区中,并且可以扩展跟踪数据,以根据应用开发人员的要求提供额外的支持信息。

创建 Traces 查询

创建 Traces 查询步骤

  1. 在 Grafana 面板中,选择 Azure Monitor 数据源。

  2. 选择 Traces 服务。

  3. 选择要查询的资源。只要资源类型相同,就可以选择多个资源。

    注意

    此查询类型仅支持 Application Insights 资源。

运行此类查询将返回面板/仪表板指定时间范围内的所有跟踪数据。

(可选)您可以应用进一步的过滤或选择特定的操作 ID 进行查询。结果格式还可以在表格格式和跟踪格式之间切换,跟踪格式将以可用于 Trace 可视化的格式返回数据。

注意

选择跟踪格式将过滤类型为 trace 的事件。

  1. 指定操作 ID 值。
  2. 指定要过滤的事件类型。
  3. 指定要过滤的事件属性。

您还可以使用 模板变量 增强查询。

处理大型 Azure 资源数据集

如果请求超出最大允许记录数,结果将分页显示,并且仅返回第一页的结果。您可以使用过滤器来减少返回的记录数,使其低于该值。