Prometheus采集的所有监控数据以metric的形式保存在内置的时间序列数据库中:属于同一metric名称的,同一标签集合的、带有时间戳的数据流。除了存储的时间序列数据,Prometheus还会生成临时衍生的时间序列数据作为查询结果。
metric名称和标签
每一条时间序列由metric名称以及一组标签(可选的键值对)唯一标识。metric名称表示被监控系统的某项指标(例如http_requests_total表示系统接收到的HTTP请求量),metric名称只能由 ASCII 字符、数字、下划线以及冒号组成,即必须匹配正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。
注意:冒号专门用来表示用户自定义的记录规则,不能在exporter或监控对象直接暴露的指标中使用冒号来表示指标名称。
标签使Prometheus具备了多维数据模型:对于相同的metric名称,通过使用不同的标签,就会形成特定度量维度实例(例如请求路由为/api/tracks、请求方式为POST的所有请求)。该查询语言在指标名称和标签这些维度上进行过滤和聚合。改变任何metric上的任何标签值(包括增加或减少一个标签),都会创建新的时间序列。
标签的名称只能由 ASCII 字符、数字以及下划线组成,即必须匹配正则表达式 [a-zA-Z_][a-zA-Z0-9_]*。其中以 __ 作为前缀的标签,是系统的保留关键字,只能在系统内部使用。
标签的值则可以包含 Unicode 编码的任意字符。
更多详细内容请参考
https://prometheus.io/docs/practices/naming/
样本
样本构成了实际的时间序列数据。每个样本包括:
精确到毫秒时间戳timestamp
folat64类型的值
表示方式
通过如下表达方式表示指定metric名称和指定标签集合的时间序列:
<metricname>{<labelname>=<labelvalue>, ...}
例如,metric名称为api_http_requests_total,标签为 method="POST" 和 handler="/messages" 的时间序列数据可以表示为:
api_http_requests_total{method="POST", handler="/messages"}
这与 OpenTSDB 中使用的标记法相同。