「Prometheus」- 概念基础(=> CONCEPTS)

数据模型

Prom 使用 Time-Series 来存储数据:时间戳化的值流,这些 值 属于同个指标和同组标记维度的;
除了存储的 Time-Series,Prometheus 可能会生成临时派生的时间序列作为查询的结果。

Metric-Name and Lable

每个 Time-Series 都有 Metric-Name 和 Lable(是可选的,键值对)组成;

Metric-Name 描述指标名称,例如 http_requests_total 形式;
命名 [a-zA-Z_:][a-zA-Z0-9_:]* 规则,其中冒号视为 用户定义的记录规则 而保留的,不建议使用。

Label 使 Prom 具有多维度数据模型:
1)针对相同的 Metric-Name,通过不同的 Label 组合,能够标识出特定维度的指标实例;
2)查询语句允许我们基于这些维度进行过滤和聚合;
3)Label 的变化导致新 Time-Series 的创建;
4)Lable 命名规则 [a-zA-Z_][a-zA-Z0-9_]* 形式;__ 开始的 Lable-Name 用于内部;
5)Lable Value 为空等于未定义该 Lable;

Samples

Samples 组成实际的 Time-Series 数据,两部分组成:1)float64 value;2)毫秒精度的时间戳;

Notaiton

通常用如下符号(Notation)来表示 Time-Series:

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

指标类型

这里的指标类型,是指数据类型。该概念仅在客户端中使用,Prome Server 不使用数据类型的概念,所有的数据被以无类型的 Time-Series 存储;

Counter

单调递增的数据指标,或重启置零。不用用于经常上下波动的数值。

Gauge

能够任意上下波动的数值。例如,衡量温度、内存使用;

Histogram

直方图(Histogram)对观察结果进行采样(通常是请求持续时间或响应大小等),并将它们计入可配置的存储桶中。它还提供所有观察值的总和。

直方图通常保留多个指标:
1)basename>_bucket{le=”<upper inclusive bound>”}
2)<basename>_sum
3)<basename>_count

通过 histogram_quantile() 从直方图甚至直方图的聚合中计算分位数。直方图也适用于计算 Apdex 分数。在 bucket 上操作时,请记住直方图是累积的。

Summary

与直方图类似,Summary 对观察结果进行采样(通常是请求持续时间和响应大小等)。虽然它还提供了观察总数和所有观察值的总和,但它计算了滑动时间窗口上的可配置分位数。

Summary 类型,在采样时,同时会暴露多个指标:
1)<basename>{quantile=”<φ>”}
2)<basename>_sum
3)<basename>_count

Job and Instance

能够被爬取的 Endpoint 被成为 Instance,通常对应单个进程(根据我们的理解,可以简单理解成 http/metrics 接口);
Job:具有相同目的的 Instance 的集合被称为 Job(根据我们理解,例如 多个 Instance 都为相同类型的指标,同时被抓取)

自动生成 Label 和 Time-Series

当 Prom 抓取目标后,将自动追加某些标签,以标识其来源:
1)job:是 Job 的名称;
2)instance:被抓取的 URL 的 IP-ADDR:PORT;
3)如果这些标签已经存在,具体的行为取决于 honor_labels 的配置;

对于每个抓取的 Instance,Prometheus 会创建如下的 Time-Series:
1)up{job=”<job-name>”, instance=”<instance-id>”}
2)scrape_duration_seconds{job=”<job-name>”, instance=”<instance-id>”}
3)scrape_samples_post_metric_relabeling{job=”<job-name>”, instance=”<instance-id>”}
4)scrape_samples_scraped{job=”<job-name>”, instance=”<instance-id>”}
5)scrape_series_added{job=”<job-name>”, instance=”<instance-id>”}

参考文献

Data model | Prometheus