数据模型
Prometheus 基本上会把所有数据存储为时间序列:属于同一指标和相同标签维度的时间戳打标值(timestamped values)流。除了存储的时间序列外,Prometheus 可能会生成查询结果作为临时衍生时间序列。
指标名称和标签
每个时间序列通过其指标名称和可选的关键值对(即 labels,称为标签)进行唯一标识。
指标名称
- 指定系统测量的一般特性(例如
http_requests_total
- 接收到的 HTTP 请求总数)。 - 指标名称可包含 ASCII 字母、数字、下划线和冒号。它必须匹配正则表达式
[a-zA-Z_:][a-zA-Z0-9_:]*
。
注意:冒号保留用于用户定义的记录规则。它们不应被 Exporter 或直接注入(direct instrumentation)使用。
指标标签
- 使 Prometheus 的维度数据模型能够识别具有相同指标名称的任意给定的标签组合。它标识了该指标的特定维度(例如:所有使用方法
POST
到/api/tracks
handler 的 HTTP 请求)。使用查询语言可以根据这些维度进行过滤和聚合。 - 任何标签值的变化,包括添加或移除标签,都将创建一个新的时间序列。
- 标签可包含 ASCII 字母、数字以及下划线。它们必须匹配正则表达式
[a-zA-Z_][a-zA-Z0-9_]*
。 - 开始以
__
(两个 ”_“)的标签名用于 Prometheus 内部使用。 - 标签名可以包含任何 Unicode 字符。
- 具有空标签值的标签被视为与不存在的标签等效。
有关命名指标和标签的最佳实践,请参阅此处。
样本
指标样本构成了实际的时间序列数据。每个样本包括:
- 一个 float64 值
- 毫秒精度的时间戳
注意:从 Prometheus v2.40 版本开始,我们实验性支持原生 Histogram(native histogram)。现在,样本值可以以完整的 Histogram 的形式出现,而不仅仅是简单的 float64。
符号表示
给定一个指标名称和一组标签,时间序列经常使用以下符号表示法进行标识:
例如,一个带有指标名称api_http_requests_total
和标签method="POST"
和handler="/messages"
的时间序列可以这样书写:
OpenTSDB 也使用同样的符号表示法。
该文档基于 Prometheus 官方文档翻译而成。