Prometheus 所有采集的监控数据均以指标 (metric) 的形式保存在内置的时间序列数据库中:属于同一指标名称、同一标签集合、有时间戳标记的数据流。除了存储的时间序列,Prometheus 还可以根据查询请求产生临时的、衍生的时间序列作为结果
一、指标名称和标签
- 每一条时间序列由指标名称 (Metric Name) 以及一组标签 (键值对) 唯一标识
- 指标名称 (Metric Name)
- 用于反映被监控样本的含义 (列如:
http_requests_total
表示当前系统接收到的 HTTP 请求总量) - 只能由 ASCII 字符、数字、下划线以及冒号组成,同时必须匹配正则表达式
[a-zA-Z_:][a-zA-Z0-9_:]*
- : (冒号) 用于表示用户自定义的记录规则,不能在 exporter 中或监控对象直接暴露的指标中使用冒号来定义指标名称
- 标签 (键值对)
- 只能由 ASCII 字符、数字、下划线以及冒号组成,同时必须匹配正则表达式
[a-zA-Z_:][a-zA-Z0-9_:]*
- 以
__
作为前缀的标签,是系统保留的关键字,只能在系统内部使用 - 标签值可以是包含任何 Unicode 编码的字符
- 通过使用标签,Prometheus 启用了强大的多维数据模型:具有相同指标名称的标签的任何给定组合,都会标识一个特定的度量维度实例 (例如:所有包含度量名称为
/api/tracks
的 HTTP 请求,标记上method=POST
的标签,就会形成具体的 HTTP 请求)
- 查询语言允许基于这些维度进行过滤和聚合
- 改变任何度量指标上的标签值 (包括添加或删除指标),都会创建新的时间序列
二、样本
- 样本源自真实的时间序列数据,每个样本包括如下几点
- 一个 float64 的浮点型数据
- 一个精确到毫秒的时间戳
三、表示方法
- 通常使用给定的指标名称和标签集合来标识时间序列
- <metric name>{<label name>=<label value>, …}
- 例如,指标名称为
api_http_requests_total
,标签为method="POST
和handler="/messages"
的时间序列可以表示为
- api_http_requests_total{method=“POST”, handler="/messages"}
四、参考资料
- 数据模型
- DATA MODEL