Prometheus存储的所有数据都是时间序列: 具有时间戳的数据流只属于单个度量指标和该度量指标下的多个标签维度。除了存储时间序列数据外,Prometheus也可以利用查询表达式存储5分钟的返回结果中的时间序列数据。
metrics和labels
metrics (度量指标)
每一个时间序列数据由metric度量指标名称
和它的标签labels键
值对集合确定唯一。
metric指定监控目标系统的测量特征(如:http_requests_total
- 接收http请求的总计数)。metric度量指标命名ASCII字母、数字、下划线和冒号,必须配正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*
。
labels (标签)
label开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/tracks
的http请求,打上method=POST
的标签,则形成了具体的http请求)。这个查询语言在这些metric和label列表的基础上进行过滤和聚合。
标签label名称可以包含ASCII字母、数字和下划线。它们必须匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*
。带有_
下划线的标签名称被保留内部使用。
标签labels值包含任意的Unicode码。
具体详见metrics和labels命名最佳实践。
有序的采样值
有序的采样值形成了实际的时间序列数据列表。每个采样值包括:
- 一个64位的浮点值
- 一个精确到毫秒级的时间戳
一个样本数据集是针对一个指定的时间序列在一定时间范围的数据收集。这个时间序列是由<metric_name>{<label_name>=<label_value>, ...}
指定度量名称和度量指标下的相关标签值,则确定了所关心的目标数据,随着时间推移形成一个个点,形成了图表上实时绘制动态变化的线条
Notation (符号)
表示一个度量指标
和一组键值对标签
,需要使用以下符号:
[metric name]{[label name]=[label value], ...}
例如,度量指标名称是api_http_requests_total
, 标签为method="POST"
, handler="/messages"
的示例如下所示:
api_http_requests_total{method="POST", handler="/messages"}
这些命名和OpenTSDB使用方法是一样的。