全部产品
云市场

时序数据模型

更新时间:2019-07-04 10:59:04

相关概念

下面将对 Prometheus 中的数据模型,metric 类型以及 instance 和 job 等概念进行介绍,以便用户在 Prometheus 的配置和使用中可以有一个更好的理解。

数据模型

Prometheus 中存储的数据为时间序列,是由 metric name (指标名称) 和一系列的 labels (标签键值对) 来唯一标识的,不同的标签则代表不同的时间序列。

  • metric name 指标名称:该名字应该具有语义,一般用于表示 metric 的功能,例如:http_requests_total, 表示 http 请求的总数。其中,metric 名字由 ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。
  • labels 标签:使同一个时间序列有了不同维度的识别。例如 http_requests_total{method=”Get”} 表示所有 http 请求中的 Get 请求。当 method=”post” 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*。以 __ 开头的标签名是Prometheus 系统内部保留使用的。
  • samples 样本:实际的时间序列,每个序列包括一个 float64 的值和一个毫秒级的时间戳。

时间线表示:

  1. <metric name> { <label name>=<label value>, … }

例如:

  1. http_requests_total{method="POST", endpoint="/api/tracks"}

Metric类型

Prometheus 客户端库主要提供四种主要的 metric 类型:

Counter

  • 一种累加的 metric,典型的应用如:请求的个数,结束的任务数, 出现的错误数等等。

例如,查询 http_requests_total{method=”get”, job=”Prometheus”, handler=”query”} 返回 8,10 秒后,再次查询,则返回 14。

Gauge

  • 一种常规的 metric,典型的应用如:温度,运行的 goroutines 的个数。
  • 可以任意加减。

例如:go_goroutines{instance=”172.17.0.2”, job=”Prometheus”} 返回值 147,10 秒后返回 124。

Histogram

  • 可以理解为柱状图,典型的应用如:请求持续时间,响应大小。
  • 可以对观察结果采样,分组及统计。

例如,查询 http_request_duration_microseconds_sum{job=”Prometheus”, handler=”query”} 时,返回结果如下:

1

Summary

  • 类似于 Histogram, 典型的应用如:请求持续时间,响应大小。
  • 提供观测值的 count 和 sum 功能。
  • 提供百分位的功能,即可以按百分比划分跟踪结果。

下面以实际的 metric 为例,对上述概念进行说明。

2

如上图所示,这三个 metric 的名字都一样,他们仅凭 handler 标签不同而被标识为不同的 metrics。这类 metrics 只会向上累加,是属于 Counter 类型的 metric,且 metrics 中都含有 instance 和 job 这两个标签。

Instance 和 jobs

instance: 一个单独 scrape 的目标, 一般对应于一个进程。

jobs: 一组同种类型的 instances(主要用于保证可扩展性和可靠性),例如:

  1. #job 和 instance的关系
  2. job: api-server
  3. instance 1: 1.2.3.4:5670
  4. instance 2: 1.2.3.4:5671
  5. instance 3: 5.6.7.8:5670
  6. instance 4: 5.6.7.8:5671