数据模型

Prometheus 从根本上将所有数据存储为时间序列:即带有时间戳的值的流,这些值属于同一个指标和同一组带标签的维度。除了存储的时间序列外,Prometheus 还可以生成临时的派生时间序列作为查询的结果。

指标名称和标签

每个时间序列都由其指标名称和可选的称为标签的键值对唯一标识。

指标名称

  • 指标名称应该(SHOULD)指定被测量的系统的一般特征(例如 `http_requests_total` - 接收到的 HTTP 请求总数)。
  • 指标名称可以使用(MAY)任何 UTF-8 字符。
  • 为了获得最佳体验和兼容性,指标名称应该(SHOULD)匹配正则表达式 `[a-zA-Z_:][a-zA-Z0-9_:]*`(请参见下面的警告)。超出该集合的指标名称在使用时(例如在 PromQL 中)将需要加引号(请参阅 UTF-8 指南)。
注意冒号(':')保留用于用户定义的记录规则。导出器或直接埋点不应该(SHOULD NOT)使用它们。

指标标签

标签可以让你捕获同一指标名称的不同实例。例如:所有使用 `POST` 方法访问 `/api/tracks` 处理程序的 HTTP 请求。我们称之为 Prometheus 的“维度数据模型”。查询语言允许基于这些维度进行过滤和聚合。任何标签值的改变,包括添加或删除标签,都会创建一个新的时间序列。

  • 标签名称可以使用(MAY)任何 UTF-8 字符。
  • 以 `__`(两个下划线)开头的标签名称必须(MUST)保留供 Prometheus 内部使用。
  • 为了获得最佳体验和兼容性,标签名称应该(SHOULD)匹配正则表达式 `[a-zA-Z_][a-zA-Z0-9_]*`(请参见下面的警告)。超出该正则表达式的标签名称在使用时(例如在 PromQL 中)将需要加引号(请参阅 UTF-8 指南)。
  • 标签值可以包含(MAY)任何 UTF-8 字符。
  • 标签值为空的标签被认为等同于不存在的标签。

警告:对指标和标签名称的 UTF-8 支持是在 Prometheus v3.0.0 中相对较晚添加的。更广泛的生态系统(下游 PromQL 兼容的项目和供应商、工具、第三方埋点、收集器等)可能需要时间来采用新的引号机制、放宽验证等。为了获得最佳兼容性,建议坚持使用推荐的(“SHOULD”)字符集。

信息:另请参阅命名指标和标签的最佳实践

样本

样本构成了实际的时间序列数据。每个样本包括

表示法

给定一个指标名称和一组标签,时间序列通常使用以下表示法来标识

<metric name>{<label name>="<label value>", ...}

例如,一个指标名称为 `api_http_requests_total` 且标签为 `method="POST"` 和 `handler="/messages"` 的时间序列可以写成这样

api_http_requests_total{method="POST", handler="/messages"}

这与 OpenTSDB  使用的表示法相同。

名称中包含推荐字符集之外的 UTF-8 字符时,必须使用以下表示法加引号

{"<metric name>", <label name>="<label value>", ...}

由于指标名称在内部表示为一个带有特殊标签名(`__name__="<metric name>"`)的标签对,因此也可以使用以下表示法

{__name__="<metric name>", <label name>="<label value>", ...}

本页内容