

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

# 使用 Prometheus 数据来源
<a name="using-prometheus-datasource"></a>

## Prometheus 设置
<a name="prometheus-settings"></a>


|  Name  |  说明  | 
| --- | --- | 
|  Name  |  数据来源名称。您将在面板和查询中通过其名称查看数据来源。 | 
|  Default  |  默认数据来源意味着将为新面板预先选择该数据来源。 | 
|  Url  |  Prometheus 服务器的 URL，例如 https://prometheus.example.org:9090。 | 
|  Access  |  服务器（默认）= 必须可以从 Grafana backend/server 访问网址。 | 
|  Basic Auth  |  启用对 Prometheus 数据来源的基本身份验证。 | 
|  User  |  用于基本身份验证的用户名。 | 
|  Password  |  用于基本身份验证的密码。 | 
|  Scrape interval  |  将其设置为 Prometheus 中配置的典型抓取和评估间隔。默认值为 15 秒。 | 
|  Disable metrics lookup  |  选中此选项将禁用指标选择器和查询字段自动完成中的 metric/label 支持。如果您在使用较大的 Prometheus 实例时遇到性能问题，这会有所帮助。 | 
|  Custom Query Parameters  |  在 Prometheus 查询 URL 中添加自定义参数。例如，timeout、partial\_response、dedup 或 max\_source\_resolution。应使用 "&" 将多个参数连接在一起。 | 

## Prometheus 查询编辑器
<a name="prometheus-query-editor"></a>

 以下部分提供了控制面板和 Explore 中 Prometheus 查询编辑器的信息和选项。

### 控制面板中的查询编辑器
<a name="query-editor-in-dashboards"></a>

 在编辑模式下打开图形，方法是选择标题，然后选择**编辑**（或在面板上暂停时按 **e** 键）。


|  Name  |  说明  | 
| --- | --- | 
|  Query expression  |  有关 Prometheus 查询表达式的更多信息，请参阅 [Prometheus 文档](https://prometheus.io/docs/querying/basics/)。 | 
|  Legend format  |  使用名称或模式控制时间序列的名称。例如，{{hostname}} 替换为标签 hostname 的标签值。 | 
|  Min step  |  [Prometheus 范围查询的 `step` 参数](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries)以及 $\_\_interval 和 $\_\_rate\_interval 变量的附加下限。该限制是绝对的，不受分辨率设置的影响。 | 
|  Resolution  |  1/1 设置了 $\_\_interval 变量以及 [Prometheus 范围查询的 `step` 参数](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries)，使每个像素对应一个数据点。为了获得更好的性能，请使用较低的分辨率。1/2 每隔一个像素仅检索一个数据点，而 1/10 每 10 个像素检索一个数据点。请注意，最小时间间隔和最小步长都限制了 $\_\_interval 和 step 的最终值。 | 
|  Metric lookup  |  在此输入字段中搜索指标名称。 | 
|  Format as  |  在 Table、Time series 或 Heatmap 之间切换。Table 仅在表面板中起作用。Heatmap 适用于在热图面板上显示直方图类型的指标。其将累积直方图转换为常规直方图，并按存储桶边界对序列进行排序。 | 
|  Instant  |  执行 "instant" 查询，仅返回 Prometheus 为请求的时间序列抓取的最新值。Instant 查询返回结果的速度比正常范围查询快得多。使用这些结果来查找标签集。 | 
|  Min time interval  |  将该值乘以分辨率设置的分母，为 $\_\_interval 变量和 [Prometheus 范围查询的 `step` 参数](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries)设置下限。默认为数据来源选项中设置的抓取间隔。 | 

**注意**  
 Amazon Managed Grafana 会修改查询的请求日期，使其与动态计算的步骤保持一致。这样可确保指标数据一致显示，但可能会导致图形右边缘出现小的数据间隙。

#### 控制面板中的即时查询
<a name="prometheus-instant-queries-in-dashboards"></a>

 Prometheus 数据来源允许运行即时查询，仅查询最新值。您可以在表面板中可视化结果，以查看时间序列的所有可用标签。

 即时查询结果仅包含每个序列的一个数据点。借助序列覆盖，可在图形面板中显示结果。要在图形中显示为最新值点，请添加序列覆盖并选择 `Points > true`。要在整个图形中显示一条水平线，请添加序列覆盖并选择 `Transform > constant`。有关序列覆盖的更多信息，请参阅 [序列覆盖](graph-panel.md#graph-panel-series-overrides)。

### Explore 中的查询编辑器
<a name="p-query-editor-in-explore"></a>


|  Name  |  说明  | 
| --- | --- | 
|  Query expression  |  有关 Prometheus 查询表达式的更多信息，请参阅 [Prometheus 文档](https://prometheus.io/docs/querying/basics/)。 | 
|  Step  |  [Prometheus 范围查询的 `Step` 参数](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries)。此处可以使用时间单位，例如：5s、1m、3h、1d、1y。如果未指定单位，默认单位为 s（秒）。 | 
|  Query type  |  Range、Instant 或者 Both。运行范围查询时，查询结果将以图形和表的形式显示。即时查询仅返回 Prometheus 为请求的时间序列抓取的最新值，并显示在表中。如果选择二者，则同时运行即时查询和范围查询。范围查询结果以图形的形式显示，即时查询结果以表的形式显示。 | 

## 指标浏览器
<a name="prometheus-metrics-browser"></a>

通过指标浏览器，您可以快速查找指标并选择相关标签来构建基本查询。打开浏览器后，您将看到所有可用的指标和标签。如果 Prometheus 实例支持，则每个指标都将以工具提示的形式显示 HELP 和 TYPE。

选择指标时，浏览器会缩小可用标签的范围，仅显示适用于该指标的标签。然后，您可以选择一个或多个标签，可用标签值显示在底部的列表中。为每个标签选择一个或多个值，以缩小查询范围。

**注意**  
如果您不记得开头的指标名称，也可以先选择几个标签，缩小列表范围，然后再查找相关标签值。

指标浏览器中的所有列表上方都有一个搜索字段，可快速筛选与特定字符串匹配的指标或标签。值部分只有一个搜索字段。其筛选适用于所有标签，以帮助您在选择标签后跨标签查找值，例如，在标签 app、job、job\_name 中，只有一个标签可能具有您要查找的值。

如果对查询感到满意，请单击“使用查询”来运行查询。**用作速率查询**按钮可在查询中添加 rate(...)[$\_\_interval]，来帮助编写计数器指标查询。“验证选择器”按钮将向 Prometheus 核实该选择器有多少时间序列可用。

### 限制
<a name="metrics-browser-limitations"></a>

指标浏览器的硬限制为 10000 个标签（键）和 50000 个标签值（包括指标名称）。如果 Prometheus 实例返回更多结果，浏览器将继续运行。但是，如果超过最大限制，结果集将被截断。

## 模板化
<a name="p-templating"></a>

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

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

### 查询变量
<a name="p-query-variable"></a>

 *查询*类型的变量允许您查询 Prometheus 以获取指标、标签或标签值的列表。Prometheus 数据来源插件提供了以下函数，您可以在**查询**输入字段中使用。


|  Name  |  说明  | 
| --- | --- | 
|  label\_names()  |  返回标签名称列表。 | 
|  label\_values(label)  |  返回每个指标中 label 的标签值列表。 | 
|  label\_values(metric, label)  |  返回指定指标中 label 的标签值列表。 | 
|  metrics(metric)  |  返回匹配指定 metric 正则表达式的指标列表。 | 
|  query\_result(query)  |  返回 query 的 Prometheus 查询结果列表。 | 

 有关*指标名称*、*标签名称*和*标签值*的信息，请参阅 [Prometheus 文档](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels)。

#### 使用间隔和范围变量
<a name="p-using-interval-and-range-variables"></a>

**注意**  
 仅从 Grafana v5.3 开始支持 `$__range`、`$__range_s` 和 `$__range_ms`。

 您可以在查询变量中使用一些全局变量：`$__interval`、`$__interval_ms`、`$__range`、`$__range_s` 和 `$__range_ms`。有关更多信息，请参阅 [全局变量](variables-types.md#global-variables)。由于 `label_values` 函数不支持查询，因此当需要筛选变量查询时，可以很方便地将其与 `query_result` 函数配合使用。

 要在更改控制面板上的时间范围时获得正确的实例，请确保将变量的 `refresh` 触发器设置为 `On Time Range Change`。

以下代码示例显示了如何根据控制面板中显示的时间范围内的平均 QPS，用最繁忙的 5 个请求实例填充变量。

```
Query: query_result(topk(5, sum(rate(http_requests_total[$__range])) by (instance)))
Regex: /"([^"]+)"/
```

 以下代码示例显示了如何使用 `$__range_s` 在控制面板中显示的时间范围内，用具有特定状态的实例填充变量。

```
Query: query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
Regex:
```

### 使用 `$__rate_interval` 变量
<a name="p-using-__rate_interval-variable"></a>

 `$__rate_interval` 变量旨在用于 rate 函数。定义为最大值（`$__interval` \+ *抓取间隔*，4 \* *抓取间隔*）。*抓取间隔*是最小步长设置（又名 query\_interval，每个 PromQL 查询的设置）（如已设置），否则为 Prometheus 数据来源中设置的*抓取间隔*（但忽略面板中的任何最小间隔设置，因为后者由分辨率设置修改）。

### 在查询中使用变量
<a name="p-using-variables-in-queries"></a>

 共有两种语法：
+  `$<varname>` 示例：rate(http\_requests\_total{job=\~"$job"}[5m]) 
+  `[[varname]]` 示例：rate(http\_requests\_total{job=\~"[[job]]"}[5m]) 

 为什么是两种？ 第一种语法更容易读写，但不能在词中间使用变量。启用*Multi-value*或*包含所有值*选项后，Grafana 会将标签从纯文本转换为与正则表达式兼容的字符串。这意味着必须使用 `=~` 而不是 `=`。

## Annotations
<a name="p-annotations"></a>

 您可以使用注释在图形上叠加丰富的事件信息。您可以使用控制面板菜单或注释视图添加注释查询。有关更多信息，请参阅 [Annotations](dashboard-annotations.md)。

 Prometheus 支持两种查询注释的方式。
+  常规指标查询 
+  Prometheus 查询待处理和触发警报。有关更多信息，请参阅[运行时检查警报](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/#inspecting-alerts-during-runtime)。

 step 选项可用于限制查询返回的事件数量。