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="POSThandler="/messages" 的时间序列可以表示为
  • api_http_requests_total{method=“POST”, handler="/messages"}

四、参考资料

  • 数据模型
  • DATA MODEL