在 Prometheus 中,"样本"(Sample)是指时间序列数据的一个基本单位,包含了某个特定时刻的一个度量值。一个样本由以下几部分组成:
http_requests_total
(HTTP请求总数)或 cpu_usage
(CPU使用率)。job="api-server"
和 instance="server1"
等标签来区分同一度量的不同来源。gauge
(仪表)指标可能表示某个资源的当前使用量。假设我们有一个 HTTP 请求的计数器指标 http_requests_total
,用于表示服务接收到的 HTTP 请求总数。这个度量可能会有以下样本数据:
http_requests_total{method="GET", status="200", job="api-server", instance="server1"} 10234 1617902462000
上面的样本表示:
http_requests_total
(HTTP请求总数)method="GET"
, status="200"
, job="api-server"
, instance="server1"
10234
(表示接收到的 HTTP GET 请求的数量)1617902462000
(这个样本的时间戳,单位为毫秒)Prometheus 中的时间序列是由一系列带有时间戳的样本组成的。每个时间序列都有一个度量名称和一组标签,而这些标签帮助 Prometheus 区分不同的时间序列。例如,假设有两个不同的 job
(如 api-server
和 db-server
),它们会有不同的时间序列,尽管它们可能使用相同的指标名称(例如 http_requests_total
)。
Prometheus 查询语言(PromQL)可以用来查询时间序列数据,并操作这些样本。例如,可以查询过去某个时间段内的最大值、平均值、总和等:
http_requests_total{job="api-server", instance="server1"}
这个查询会返回 job="api-server"
和 instance="server1"
下所有 HTTP 请求的最新计数值。
sum(http_requests_total{job="api-server"}) by (status)
这条查询会返回 job="api-server"
下按 status
标签汇总的 HTTP 请求总数。
max_over_time(http_requests_total[1h])
这个查询会返回过去 1 小时内 http_requests_total
指标的最大值。Prometheus 支持多种度量类型,它们定义了样本值的含义和如何增长:
http_requests_total{method="GET", status="200", job="api-server", instance="server1"} 10234
这个样本表示 http_requests_total
的计数器,当前值为 10234
。
cpu_usage{job="api-server", instance="server1"} 0.75
这个样本表示 cpu_usage
(CPU 使用率)为 0.75
,即 75%。
http_request_duration_seconds_bucket{le="0.1", job="api-server", instance="server1"} 300 http_request_duration_seconds_bucket{le="0.2", job="api-server", instance="server1"} 500
这表示 http_request_duration_seconds
(HTTP 请求时长)的直方图数据:在 0.1 秒内完成的请求有 300 个,在 0.2 秒内完成的请求有 500 个。
http_request_duration_seconds_sum{job="api-server", instance="server1"} 350 http_request_duration_seconds_count{job="api-server", instance="server1"} 500
这个样本表示 http_request_duration_seconds
的总结:所有请求的总时长为 350 秒,总请求数为 500。
在 Prometheus 中,样本 是一个时间序列的基本单位,由度量名称、标签、数值和时间戳组成。Prometheus 通过这种方式存储和管理大量的度量数据,从而使得我们能够对系统进行详细的监控和查询。通过 PromQL 查询语言,我们可以灵活地提取和分析这些样本数据,帮助我们更好地理解系统的健康状况和性能瓶颈。