Prometheus 根本上将所有数据存储为时间序列:即属于同一指标和同一组标签维度、带有时间戳的值流。除了存储的时间序列外,Prometheus 还可以根据查询生成临时派生时间序列。
每个时间序列都由其指标名称和可选的键值对(称为标签)唯一标识。
指标名称
http_requests_total
- 接收到的 HTTP 请求总数)。[a-zA-Z_:][a-zA-Z0-9_:]*
。不在该字符集范围内的指标名称在使用 PromQL 时需要引用(例如,参见 UTF-8 指南)。指标标签
标签允许你捕获同一指标名称的不同实例。例如:所有使用 POST
方法访问 /api/tracks
处理器的 HTTP 请求。我们将其称为 Prometheus 的“维度数据模型”。查询语言允许基于这些维度进行过滤和聚合。任何标签值的改变,包括添加或删除标签,都会创建一个新的时间序列。
__
开头的标签名称必须(MUST)保留供 Prometheus 内部使用。[a-zA-Z_][a-zA-Z0-9_]*
。不在该正则表达式范围内的标签名称在使用 PromQL 时需要引用(例如,参见 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>", ...}
本文档是开源的。请通过提交问题或拉取请求来帮助改进它。