Prometheus基础概念

Posted shark_西瓜甜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus基础概念相关的知识,希望对你有一定的参考价值。

文章目录

一、数据模型

Prometheus 从根本上将所有数据存储为时间序列:属于同一指标和同一组标记维度的带时间戳的流。
除了存储的时间序列外,Prometheus还可以通过查询语句生成临时派生的时间序列作为查询的结果。

指标名称和标签

每个时序都由其指标名称和称为标签的可选键值对唯一标识。

  • 指标名称: 指定被测量系统的一般特征(例如 - 收到的 HTTP 请求总数)。它可能包含 ASCII 字母和数字,以及下划线和冒号。它必须与正则表达式 匹配。例如: http_requests_total[a-zA-Z_:][a-zA-Z0-9_:]*
  • 标签: 标签支持 Prometheus 的维度数据模型:可以使用指定的标签,对同一指标名称的监控数据进行特定维度的查询。例如: 对应用程序使用了 POST 方法 的HTTP请求。
    标签名称可能包含ASCII字母、数字、以及下划线。它们必须与正则表达式匹配。以标签名称开头的保留供内部使用。示例: [a-zA-Z_][a-zA-Z0-9_]*__
    标签值可以包含任何 Unicode 字符。

具有空标签值的标签等于没标签。

另请参阅命名指标和标签的最佳做法

Samples (样本)

样本构成实际的时间序列数据。每个样本包括:

  • 一个64位的浮点数值
  • 一个毫秒级精度的时间戳

表示法

给定一个指标名称和一组标签,时序通常使用以下表示法进行标识:

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

例如,具有指标名称和标签的时间序列可以这样编写:

api_http_requests_totalmethod="POST", handler="/messages"

二、指标类型

Prometheus 客户端库提供四种核心指标类型。

Counter(计数器)

计数器是一个指标值,只能增加或重置,即该值不能小于以前的值。它可用于诸如请求数,错误数等指标。

不要使用计数器来公开可能减小的值。例如,不要对当前正在运行的进程数使用计数器。而是使用仪表。

可以用于 http_requests_total http的请求数
node_cpu CPU 使用累计时间

Gauge(仪表)

Gauage 是一个可以上升或下降的数字,就是可以上下波动的指标数据。

它可用于集群中的 Pod 数量、队列中的事件数量等。
主机的进程数,主机 CPU、内存、磁盘使用率,当前的并发数等

Histogram(直方图)

Histogram 对观察结果(通常是请求持续时间或相应大小等内容)进行采样,并在可配置的上下限数据范围内对其进行计数。它还提供所有观测值的总和。
简单来说就是可以统计在某个值范围内出现的次数。比较典型的就是一个请求的响应时间。例如,请求的响应时间在0.5 秒内的有多少个。

基本度量名称为<basename>的直方图在抓取期间显示多个时间序列:

  • 观察存储桶的累积计数器,显示为<basename>_bucketle="<upper inclusive bound>"
  • 所有观测值的总和,显示为 <basename>_sum
  • 已观察到的事件计数,显示为 <basename>_count(与上文的<basename>_bucketle="+Inf"相同)

histogram_quantile() 函数可用于从直方图计算分位数

histogram_quantile(0.9,prometheus_http_request_duration_seconds_buckethandler="/graph")

Summary

于 Histogram 类似,Summary 对观察结果(通常是请求持续时间或相应大小等内容)进行采样,
是 Histogram 的替代方法。它的代价更低,但会丢失更多数据。它们是在应用程序级别计算的,因此无法聚合来自同一进程的多个实例的指标。

当事先不知道指标的存储桶时,会使用它们,但强烈建议尽可能使用 Histogram 而不是 Summary。

基本指标名称为 <basename> 的Summary 在抓取期间公开多个时间序列:

  • φ-quantiles(0 ≤ φ ≤ 1)的已观测事件,显示为 <basename>quantile="<φ>"
  • 所有观测值的总和,显示为 <basename>_sum
  • 已观察到的事件计数,显示为 <basename>_count

如下示例表示统计的数据中有 50% 的值达到了 5.000036869

prometheus_target_interval_length_secondsinstance="localhost:9090", interval="5s", job="prometheus", quantile="0.5"  5.000036869

三、Job 和 Instances

在Prometheus术语中,您可以抓取的服务器称为 Instances,通常对应于单个进程。
具有相同用途的 Instances 集合称为 Jobs。
例如,具有 4 个实例的 API 服务器 Jobs:

  • job: api-server
    • instance 1: 1.2.3.4:5670
    • instance 2: 1.2.3.4:5671
    • instance 3: 5.6.7.8:5670
    • instance 4: 5.6.7.8:5671

自动生成的标签和时间序列

当Prometheus 抓取目标时,它会自动将一些标签附加到抓取的时间序列上,用于识别抓取的目标:

  • job:目标所属的已配置作业名称。

  • instance:目标URL中被抓取的 <host>:<port> 部分。
    对于每个实例抓取,Prometheus 在以下时间序列中存储一个样本:

  • upjob="<job-name>", instance="<instance-id>": 1如果实例运行正常,即可访问,或者抓取失败 0

  • scrape_duration_secondsjob="<job-name>", instance="<instance-id>": 抓取的持续时间。

  • scrape_samples_post_metric_relabelingjob="<job-name>", instance="<instance-id>":应用度量重新标记后剩余的样本数。

  • scrape_samples_scrapedjob="<job-name>", instance="<instance-id>":目标暴露的样本数。

  • scrape_series_addedjob="<job-name>", instance="<instance-id>":近似值中新系列的大致数量。v2.10 中的新增功能

up 对于实例可用性监视非常有用

以上是关于Prometheus基础概念的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus-PQL

prometheus 基础概念

范围内总和计数的 MDX 计算

选择日期范围内的分组值总和(窗口函数)

Prometheus基础概念

Prometheus基础概念