数据模型

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

指标名称和标签

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

指标名称

  • 指定要测量的系统的一般特征(例如,http_requests_total - 收到的 HTTP 请求总数)。
  • 指标名称可以包含 ASCII 字母、数字、下划线和冒号。它必须匹配正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*

注意:冒号为用户定义的记录规则保留。导出器或直接仪器化不应使用它们。

指标标签

  • 启用 Prometheus 的维度数据模型以标识同一指标名称的任何给定标签组合。它标识该指标的特定维度实例化(例如:所有使用方法 POST/api/tracks 处理程序发出 HTTP 请求)。查询语言允许根据这些维度进行过滤和聚合。
  • 任何标签值的更改,包括添加或删除标签,都将创建新的时间序列。
  • 标签可以包含 ASCII 字母、数字以及下划线。它们必须匹配正则表达式 [a-zA-Z_][a-zA-Z0-9_]*
  • __(两个“_”)开头的标签名称保留供内部使用。
  • 标签值可以包含任何 Unicode 字符。
  • 具有空标签值的标签被认为等效于不存在的标签。

另请参见有关 指标和标签命名的最佳实践

样本

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

  • 一个 float64 值
  • 一个毫秒精度的时间戳
注意:从 Prometheus v2.40 开始,实验性地支持原生直方图。样本值现在不再是简单的 float64,而是可以采用完整直方图的形式。

符号

给定指标名称和一组标签,时间序列通常使用以下符号进行标识

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

例如,具有指标名称 api_http_requests_total 和标签 method="POST"handler="/messages" 的时间序列可以这样写

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

这与 OpenTSDB 使用的符号相同。

本文档是 开源的。请通过提交问题或拉取请求来帮助改进它。