

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 连接到 Azure Monitor 数据来源
<a name="using-azure-monitor-in-AMG"></a>

 Azure Monitor 数据来源支持 Azure 云中的多种服务：
+  **Azure Monitor 服务**是一个平台服务，提供了监控 Azure 资源的单一来源。有关更多信息，请参阅 [查询 Azure Monitor 服务](#query-the-azure-monitor-service)。
+  **Application Insights 服务器**是一项可扩展的应用程序性能管理（APM）服务，适用于多个平台上的网络开发人员，可用于监控实时网络应用程序，并自动检测性能异常。有关更多信息，请参阅 [查询 Application Insights Analytics 服务](#query-the-application-insights-analytics-service)。
+  **Azure Log Analytics**（或 Azure Logs）允许访问 Azure Monitor 收集的日志数据。有关更多信息，请参阅 [查询 Azure Log Analytics 服务](#querying-the-azure-log-analytics-service)。
+  通过 **Application Insights Analytics 服务**，使用与 Azure Log Analytics 相同的查询语言来查询 [Application Insights 数据](https://docs.microsoft.com/en-us/azure/azure-monitor/app/analytics)。有关更多信息，请参阅 [查询 Application Insights Analytics 服务](#query-the-application-insights-analytics-service)。

## 添加数据来源
<a name="azure-add-the-data-source"></a>

 数据来源可以访问来自四种不同服务的指标。您可以配置对所用服务的访问权限。如果在 Azure Entra ID 中设置了相同的凭证，也可以对多个服务使用相同的凭证。
+  [注册 Microsoft Entra 应用程序并创建服务主体](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal) 

1.  从 Grafana 主菜单访问后，可立即在“数据来源”部分添加新安装的数据来源。接下来，选择右上角的**添加数据来源**按钮。Azure Monitor 数据来源可供在数据来源列表的“云”部分中选择。

1.  在名称字段中，Grafana 会自动填写数据来源的名称：`Azure Monitor` 或 `Azure Monitor - 3` 之类的名称。如果要配置多个数据来源，请将名称改为信息更丰富的名称。

1.  如果使用的是 Azure Monitor，则需要从 Azure 门户获取四条信息（有关详细说明，请参阅前面提供的链接）：
   +  **租户 Id**（Azure Entra ID、属性、目录 ID） 
   +  **客户端 Id**（Azure Entra ID、应用程序注册、选择应用程序、应用程序 ID） 
   +  **客户端密钥**（Azure Entra ID、应用程序注册、选择应用程序、密钥） 
   +  **默认订阅 Id**（订阅、选择订阅、概述、订阅 ID） 

1.  将这四项粘贴到 Azure Monitor API 详细信息部分的字段中。
   +  每次查询都可以更改订阅 Id。保存数据来源并刷新页面，以查看可用于指定客户端 Id 的订阅列表。

1.  如果您还使用 Azure Log Analytics 服务，则必须指定这两个配置值或重用上一步中的客户端 Id 和密钥。
   +  客户端 Id（Azure Entra ID、应用程序注册、选择应用程序、应用程序 ID） 
   +  客户端密钥（Azure Entra ID、应用程序注册、选择应用程序、密钥、创建密钥、使用客户端密钥） 

1.  如果使用的是 Application Insights，则需要从 Azure 门户获取两条信息（有关详细说明，请参阅前面提供的链接）：
   +  应用程序 ID 
   +  API 密钥 

1.  将这两项粘贴到 Application Insights API 详细信息部分的相应字段中。

1.  选择**保存并测试**按钮，测试配置详细信息是否正确。

 或者，在步骤 4 中，如果要创建新的 Azure Entra ID 应用程序，请使用 [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest)：

```
az ad sp create-for-rbac -n "http://localhost:3000"
```

## 选择服务
<a name="azure-choose-a-service"></a>

 在面板的查询编辑器中，选择 Azure Monitor 数据来源后，第一步是选择服务。共有四个选项：
+  `Azure Monitor` 
+  `Application Insights` 
+  `Azure Log Analytics` 
+  `Insights Analytics` 

 查询编辑器会根据您选择的选项而变化。Azure Monitor 为默认。

## 查询 Azure Monitor 服务
<a name="query-the-azure-monitor-service"></a>

 Azure Monitor 服务为您运行的所有 Azure 服务提供指标。这有助于了解 Azure 上应用程序的运行情况，并主动发现影响应用程序的问题。

 如果 Azure Monitor 凭证允许访问多个订阅，请先选择相应的订阅。

 您可以从服务中获取的指标示例如下：
+  `Microsoft.Compute/virtualMachines - Percentage CPU` 
+  `Microsoft.Network/networkInterfaces - Bytes sent` 
+  `Microsoft.Storage/storageAccounts - Used Capacity` 

 查询编辑器允许查询多个维度以获取支持这些维度的指标。支持多个维度的指标是 [Azure Monitor 支持的指标列表](https://docs.microsoft.com/en-us/azure/azure-monitor/platform/metrics-supported)中列出的指标，这些指标的**维度**列中列出了一个或多个值。

### 对 Azure Monitor 使用别名格式化图例键
<a name="format-legend-keys-with-aliases-for-azure-monitor"></a>

 Azure Monitor API 的默认图例格式为：

 `metricName{dimensionName=dimensionValue,dimensionTwoName=DimensionTwoValue}` 

 这些格式可能很长，但您可以使用别名进行更改。在**图例格式**字段中，可以任意组合以下别名。

 Azure Monitor 示例：
+  `Blob Type: {{ blobtype }}` 
+  `{{ resourcegroup }} - {{ resourcename }}` 

### Azure Monitor 的别名模式
<a name="alias-patterns-for-azure-monitor"></a>
+  `{{ resourcegroup }}` = 替换为资源组的值 
+  `{{ namespace }}` = 替换为命名空间的值（例如，microsoft.compute/VirtualMachines） 
+  `{{ resourcename }}` = 替换为资源名称的值 
+  `{{ metric }}` = 替换为指标名称（例如，CPU 百分比） 
+  `{{ dimensionname }}`= *7.1\$1 版本的旧版（为了向后兼容）替换为*第一个维度（按键/标签排序） key/label （例如 blobtype） 
+  `{{ dimensionvalue }}`= *7.1\$1 版本的旧版（为了向后兼容）*替换为第一维度的值（按键/标签排序）（例如，）BlockBlob 
+  `{{ arbitraryDim }}`= *在 7.1\$1 版本中可用*，替换为相应维度的值。 （例如，`{{ blobtype }}`变成 BlockBlob） 

### 为 Azure Monitor 创建模板变量
<a name="create-template-variables-for-azure-monitor"></a>

 您可以在指标查询中使用变量来代替服务器、应用程序和传感器名称等硬编码。变量显示为控制面板顶部的下拉选择框。您可以使用这些下拉框来更改控制面板中显示的数据。

 请注意，Azure Monitor 服务尚不支持多个值。要可视化多个时间序列（例如，server1 和 server2 的指标），请添加多个查询，这样就可以在同一图形或同一表中查看。

 Azure Monitor 数据来源插件提供以下查询，您可以在变量编辑视图的**查询**字段中指定这些查询。您可以将其用来填充变量的选项列表。


|  Name  |  说明  | 
| --- | --- | 
|  Subscriptions()  |  返回订阅列表。 | 
|  ResourceGroups()  |  返回资源组列表。 | 
|  ResourceGroups(12345678-aaaa-bbbb-cccc-123456789aaa)  |  返回指定订阅的资源组列表。 | 
|  Namespaces(aResourceGroup)  |  返回指定资源组的命名空间列表。 | 
|  Namespaces(12345678-aaaa-bbbb-cccc-123456789aaa, aResourceGroup)  |  返回指定资源组和订阅的命名空间列表。 | 
|  ResourceNames(aResourceGroup, aNamespace)  |  返回资源名称列表。 | 
|  ResourceNames(12345678-aaaa-bbbb-cccc-123456789aaa, aResourceGroup, aNamespace)  |  返回指定订阅的资源名称列表。 | 
|  MetricNamespace(aResourceGroup, aNamespace, aResourceName)  |  返回指标命名空间列表。 | 
|  MetricNamespace(12345678-aaaa-bbbb-cccc-123456789aaa, aResourceGroup, aNamespace, aResourceName)  |  返回指定订阅的指标命名空间列表。 | 
|  MetricNames(aResourceGroup, aNamespace, aResourceName)  |  返回指标名称列表。 | 
|  MetricNames(12345678-aaaa-bbbb-cccc-123456789aaa, aResourceGroup, aNamespace, aResourceName)  |  返回指定订阅的指标名称列表。 | 

 示例：
+  资源组查询：`ResourceGroups()`
+  传入指标名称变量：`Namespaces(cosmo)`
+  链接模板变量：`ResourceNames($rg, $ns)`
+  请勿引用参数：`MetricNames(hg, Microsoft.Network/publicIPAddresses, grafanaIP)`

 有关模板化和模板变量的更多信息，请参阅 [模板](templates-and-variables.md#templates)。

### 支持的 Azure Monitor 指标列表
<a name="list-of-supported-azure-monitor-metrics"></a>

 并非 Azure Monitor API 返回的所有指标都具有值。为了方便建立查询，Grafana 数据来源列出了受支持的 Azure Monitor 指标，并忽略了永远不会有值的指标。随着新服务和指标添加到 Azure 云，此列表会定期更新。

### Azure Monitor 警报
<a name="azure-monitor-alerting"></a>

 Azure Monitor 服务支持 Grafana Alerting。这不是 Azure Alerts 支持。有关 Grafana Alerting 的更多信息，请参阅 [Grafana Alerting](alerts-overview.md)。

## 查询 Application Insights 服务
<a name="query-the-application-insights-service"></a>

### 对 Application Insights 使用别名格式化图例键
<a name="formatting-legend-keys-with-aliases-for-application-insights"></a>

 默认图例格式为：

 `metricName{dimensionName=dimensionValue,dimensionTwoName=DimensionTwoValue}` 

 在图例格式字段中，可以任意组合以下别名。

 Application Insights 示例：
+  `city: {{ client/city }}` 
+  `{{ metric }} [Location: {{ client/countryOrRegion }}, {{ client/city }}]` 

### Application Insights 的别名模式
<a name="alias-patterns-for-application-insights"></a>
+  `{{ groupbyvalue }}`= 从 *Grafana 7.1\$1 开始的 Legacy（为了向后兼容）替换为第一个维度 key/label （按*键/标签排序） 
+  `{{ groupbyname }}`= *Grafana 7.1\$1 版本的旧版（为了向后兼容）替换为*第一维度的值（按键/标签排序）（例如，）BlockBlob 
+  `{{ metric }}` = 替换为指标名称（例如，requests/count） 
+  `{{ arbitraryDim }}` = *在 7.1\$1 版中可用*替换为相应维度的值（例如，`{{ client/city }}` 变为 Chicago） 

### Application Insights 的筛选表达式
<a name="filter-expressions-for-application-insights"></a>

 过滤器字段采用 OData 筛选表达式。

 示例：
+  `client/city eq 'Boydton'` 
+  `client/city ne 'Boydton'` 
+  `client/city ne 'Boydton' and client/city ne 'Dublin'` 
+  `client/city eq 'Boydton' or client/city eq 'Dublin'` 

### 对 Application Insights 使用变量进行模板化
<a name="templating-with-variables-for-application-insights"></a>

 在变量编辑视图的**查询**字段中使用以下查询之一。

 有关模板化和模板变量的更多信息，请参阅 [模板](templates-and-variables.md#templates)。


|  Name  |  说明  | 
| --- | --- | 
|  AppInsightsMetricNames()  |  返回指标名称列表。 | 
|  AppInsightsGroupBys(aMetricName)  |  返回指定指标名称的 group by 子句列表。 | 

 示例：
+  指标名称查询：`AppInsightsMetricNames()`
+  传入指标名称变量：`AppInsightsGroupBys(requests/count)`
+  链接模板变量：`AppInsightsGroupBys($metricnames)`

### Application Insights 警报
<a name="application-insights-alerting"></a>

 Application Insights 支持 Grafana Alerting。这不是 Azure Alerts 支持。有关 Grafana Alerting 的更多信息，请参阅 [Grafana Alerting](alerts-overview.md)。

## 查询 Azure Log Analytics 服务
<a name="querying-the-azure-log-analytics-service"></a>

 查询是用新的 [Azure Log Analytics（或 KustoDB）查询语言](https://docs.microsoft.com/en-us/azure/azure-monitor/log-query/query-language)编写的。Log Analytics 查询可以格式化为时间序列数据或表数据。

 如果您的凭证允许访问多个订阅，请在输入查询之前选择相应的订阅。

### 时间序列查询
<a name="azure-time-series-queries"></a>

 时间序列查询适用于图表面板和其他面板，例如面 SingleStat 板。每个查询必须至少包含一个日期时间列和一个数值列。结果必须按日期时间列以升序排序。

 以下代码示例显示了一个查询，该查询返回按小时分组的聚合计数。

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

 查询还可以包含一个或多个非数字/非日期时间列，这些列被视为维度，并成为响应中的标签。例如，返回按小时、计算机和分组的汇总计数的查询 CounterName。

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

 您还可以选择其他数值列（包含或不包含多个维度）。例如，按小时获取计数和平均值 CounterName、计算机和 InstanceName：

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

**注意**  
 **提示**：在前面的查询中，使用了 Kusto 语法和 `Samples=count()``["Avg Value"]=...` 来重命名这些列，第二种语法允许空格。这会更改 Grafana 使用的指标名称。因此，序列图例和表列等内容将与您指定的内容匹配。在本例中，显示的是 `Samples` 而不是 `_count`。

### 表查询
<a name="azure-table-queries"></a>

 表查询主要用于表面板，显示列和行的列表。此示例查询返回包含六个指定列的行。

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

### 格式化 Log Analytics 的显示名称
<a name="format-the-display-name-for-log-analytics"></a>

 默认显示名称格式为：

 `metricName{dimensionName=dimensionValue,dimensionTwoName=DimensionTwoValue}` 

 可使用显示名称字段选项对此进行自定义。

### Azure Log Analytics 宏
<a name="azure-log-analytics-macros"></a>

 为了便于编写查询，Grafana 提供了几个宏，供您在查询的 where 子句中使用：
+  `$__timeFilter()`：扩展到 `TimeGenerated ≥ datetime(2018-06-05T18:09:58.907Z) and` `TimeGenerated ≤ datetime(2018-06-05T20:09:58.907Z)`，其中 from 和 to 日期时间来自 Grafana 时间选择器。
+  `$__timeFilter(datetimeColumn)`：扩展到 `datetimeColumn ≥ datetime(2018-06-05T18:09:58.907Z) and` `datetimeColumn ≤ datetime(2018-06-05T20:09:58.907Z)`，其中 from 和 to 日期时间来自 Grafana 时间选择器。
+  `$__timeFrom()`：从 Grafana 选择器返回 From 日期时间。示例：`datetime(2018-06-05T18:09:58.907Z)`。
+  `$__timeTo()`：从 Grafana 选择器返回 From 日期时间。示例：`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**。如果 `$myVar` 具有值 `all`，则宏将扩展为 `1 == 1`。对于具有多种选项的模板变量，可不构建大型 "where..in" 子句，以提高查询性能。

### Azure Log Analytics 内置变量
<a name="azure-log-analytics-builtin-variables"></a>

 还有一些 Grafana 变量可在 Azure Log Analytics 查询中使用：
+  `$__interval`：Grafana 会计算可用于在查询中按时间分组的最小时间粒度。这将返回一个时间粒度（如 `5m` 或 `1h`），可在 bin 函数中使用；例如，`summarize count() by bin(TimeGenerated, $__interval)`。有关间隔变量的更多信息，请参阅 [添加间隔变量](variables-types.md#add-an-interval-variable)。

### 对 Azure Log Analytics 使用变量进行模板化
<a name="templating-with-variables-for-azure-log-analytics"></a>

 任何返回值列表的 Log Analytics 查询都可以在变量编辑视图的**查询**字段中使用。Log Analytics 还有一个 Grafana 函数，可返回工作区列表。

 有关模板和模板变量的更多信息，请参阅 [模板和变量](templates-and-variables.md)。


|  Name  |  说明  | 
| --- | --- | 
|  workspaces()  |  返回默认订阅的工作区列表。 | 
|  workspaces(12345678-aaaa-bbbb-cccc-123456789aaa)  |  返回指定订阅的工作区列表（参数可以带引号或不带引号）。 | 

 下表显示了变量查询示例。


|  Query  |  说明  | 
| --- | --- | 
|  subscriptions()  |  返回 Azure 订阅列表。 | 
|  workspaces()  |  返回默认订阅的工作区列表。 | 
|  workspaces("12345678-aaaa-bbbb-cccc-123456789aaa")  |  返回指定订阅的工作区列表。 | 
|  workspaces("\$1subscription")  |  使用订阅参数的模板变量。 | 
|  workspace("myWorkspace").Heartbeat \$1\$1 distinct Computer  |  返回虚拟机列表。 | 
|  workspace("\$1workspace").Heartbeat \$1\$1 distinct Computer  |  返回具有模板变量的虚拟机列表。 | 
|  workspace("\$1workspace").Perf \$1\$1 distinct ObjectName  |  返回 Perf 表中的对象列表。 | 
|  workspace("\$1workspace").Perf \$1\$1 where ObjectName == "\$1object" \$1\$1 distinct CounterName  |  返回 Perf 表中的指标名称列表。 | 

 以下代码示例显示了使用变量的时间序列查询。

```
Perf
| where ObjectName == "$object" and CounterName == "$metric"
| where TimeGenerated >= $__timeFrom() and TimeGenerated <= $__timeTo()
| where  $__contains(Computer, $computer)
| summarize avg(CounterValue) by bin(TimeGenerated, $__interval), Computer
| order by TimeGenerated asc
```

### 从 Grafana 面板到 Azure 门户中 Log Analytics 查询编辑器的深层链接
<a name="deep-linking-from-grafana-panels-to-the-log-analytics-query-editor-in-azure-portal"></a>

 在面板中选择一个时间序列，以查看上下文菜单，其中包含**在 Azure 门户中查看**的链接。选择该链接将在 Azure 门户中打开 Azure Log Analytics 查询编辑器，并从 Grafana 面板运行查询。

 如果您当前未登录 Azure 门户，则该链接将打开登录页面。提供的链接对任何账户都有效，但仅当您的账户有权访问查询中指定的 Azure Log Analytics 工作区时，才会显示查询。

### Azure Log Analytics 警报
<a name="azure-log-analytics-alerting"></a>

 Application Insights 支持 Grafana Alerting。这不是 Azure Alerts 支持。有关 Grafana 工作区中警报的更多信息，请参阅 [Grafana Alerting](alerts-overview.md)。

## 查询 Application Insights Analytics 服务
<a name="query-the-application-insights-analytics-service"></a>

 如果将服务类型更改为 **Insights Analytics**，则可以使用与 Log Analytics 服务类似的编辑器。此服务还使用 Kusto 语言，因此查询数据的说明与 [查询 Azure Log Analytics 服务](#querying-the-azure-log-analytics-service) 相同，只是改为查询 Application Insights Analytics 数据。