Prometheus 数据模型
2018-05-17 本文已影响286人
xufeibuaa
翻译 原文链接
Prometheus从根本上把所有的数据存储为时间序列:属于同一metric名字,同一标签集合的、有时间戳标记的数据流。除了存储的时间序列,Prometheus可以根据查询请求产生临时的、衍生的时间序列。
Metric名称和标签
每一个时间序列被metric名称和标签键值对集合唯一标识。metric name用于指定被测量系统的一般特性(比如:http_requests_total
表示接收到的HTTP请求总数)。metric name只能包含ASCII字符、数字、下划线和冒号,必须满足如下正则表达[a-zA-Z_:][a-zA-Z0-9_:]*
。
标签开启、丰富了Prometheus的多维度数据模型:同一metric name结合不同的标签,代表这个metric的不同维度实例(比如:所有通过post请求/api/tracks的HTTP请求)。查询语言允许基于这些维度进行过滤、聚合操作。改变一个标签值或者增减一个标签都会产生一个新的时间序列。
标签名称只能包含ASCII字符、数字和下划线,必须满足如下正则[a-zA-Z_][a-zA-Z0-9_]*
。以双下划线__
开头的标签名称被保留为Prometheus内部使用。
标签值允许包含任意Unicode字符。
See also the best practices for naming metrics and labels.
采样
采样是值一个时间序列某个时间点的值。由两个部分组成:
- float64类型的值
- 精度为毫秒的时间戳
记号
通过如下表达方式表示指定metric name和指定标签集合的时间序列:
<metric name>{<label name>=<label value>, ...}
比如:metric name是api_http_requests_total
,标签是method="POST", handler="/messages"
的时间序列:
api_http_requests_total{method="POST", handler="/messages"}
这种标记法和OpenTSDB一样。