数据模型
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”)的字符集。
信息:另请参见指标和标签命名最佳实践。
样本
样本构成实际的时间序列数据。每个样本包含:
- 一个 float64 值或原生直方图值
- 一个毫秒精度的时间戳
表示法
给定一个指标名称和一组标签,时间序列通常使用此表示法进行标识:
<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__="
{__name__="<metric name>", <label name>="<label value>", ...}