🌈个人主页:人不走空
💖系列专栏:算法专题
⏰诗词歌赋:斯是陋室,惟吾德馨
目录
🌈个人主页:人不走空
💖系列专栏:算法专题
⏰诗词歌赋:斯是陋室,惟吾德馨
1. 时间戳(Timestamp)
2. 度量名称(Metric Name)
3. 标签(Labels)
4. 度量值(Value)
示例:Prometheus 样本的结构
5. Prometheus 中的时间序列
6. Prometheus 查询语言(PromQL)
7. Prometheus 样本的类型
示例:不同类型的样本
1. Counter 样本
2. Gauge 样本
3. Histogram 样本
4. Summary 样本
总结:
作者其他作品:
在 Prometheus 中,"样本"(Sample)是指时间序列数据的一个基本单位,包含了某个特定时刻的一个度量值。一个样本由以下几部分组成:
1. 时间戳(Timestamp)
- 样本会记录数据的时间戳,表示这个数据值是在什么时候被采集的。
- Prometheus 会根据配置的抓取间隔定期拉取目标的度量数据。每次采集的数据都会附带一个时间戳,表示数据的时间点。
2. 度量名称(Metric Name)
- 每个样本都关联着一个度量(或指标)名称,这个名称用于描述被监控的事物。例如,
http_requests_total
(HTTP请求总数)或cpu_usage
(CPU使用率)。
3. 标签(Labels)
- Prometheus 允许你为每个样本添加一组键值对标签,用于进一步细分和过滤数据。标签可以帮助你区分相同名称的不同度量,通常用于区分不同的实例、应用程序、环境、区域等。
- 例如,你可以使用
job="api-server"
和instance="server1"
等标签来区分同一度量的不同来源。
4. 度量值(Value)
- 每个样本包含一个度量值,即采集到的数值。例如,一个计数器可能表示某个事件发生的次数,或者一个
gauge
(仪表)指标可能表示某个资源的当前使用量。
示例:Prometheus 样本的结构
假设我们有一个 HTTP 请求的计数器指标 http_requests_total
,用于表示服务接收到的 HTTP 请求总数。这个度量可能会有以下样本数据:
plaintext
复制代码
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
(这个样本的时间戳,单位为毫秒)
5. Prometheus 中的时间序列
Prometheus 中的时间序列是由一系列带有时间戳的样本组成的。每个时间序列都有一个度量名称和一组标签,而这些标签帮助 Prometheus 区分不同的时间序列。例如,假设有两个不同的 job
(如 api-server
和 db-server
),它们会有不同的时间序列,尽管它们可能使用相同的指标名称(例如 http_requests_total
)。
6. Prometheus 查询语言(PromQL)
Prometheus 查询语言(PromQL)可以用来查询时间序列数据,并操作这些样本。例如,可以查询过去某个时间段内的最大值、平均值、总和等:
-
查询一个时间序列的最新值:
prometheus
复制代码
http_requests_total{job="api-server", instance="server1"}
这个查询会返回
job="api-server"
和instance="server1"
下所有 HTTP 请求的最新计数值。 -
查询某个时间段内的总和:
prometheus
复制代码
sum(http_requests_total{job="api-server"}) by (status)
这条查询会返回
job="api-server"
下按status
标签汇总的 HTTP 请求总数。 -
查询某个时间段内的最大值:
prometheus
复制代码
max_over_time(http_requests_total[1h])
这个查询会返回过去 1 小时内
http_requests_total
指标的最大值。
7. Prometheus 样本的类型
Prometheus 支持多种度量类型,它们定义了样本值的含义和如何增长:
- Counter(计数器):计数器值只能增加,表示某个事件的累计发生次数(例如 HTTP 请求总数)。
- Gauge(仪表):仪表可以增加也可以减少,表示一个瞬时的测量值(例如当前 CPU 使用率、内存使用量等)。
- Histogram(分布):直方图用于表示数据分布,记录某个度量的不同范围值的数量。例如,HTTP 响应时间的分布。
- Summary(概述):概述也用于表示分布,但它不仅记录范围分布,还提供如百分位数(例如 95% 响应时间)的信息。
示例:不同类型的样本
1. Counter 样本
plaintext
复制代码
http_requests_total{method="GET", status="200", job="api-server", instance="server1"} 10234
这个样本表示 http_requests_total
的计数器,当前值为 10234
。
2. Gauge 样本
plaintext
复制代码
cpu_usage{job="api-server", instance="server1"} 0.75
这个样本表示 cpu_usage
(CPU 使用率)为 0.75
,即 75%。
3. Histogram 样本
plaintext
复制代码
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 个。
4. Summary 样本
plaintext
复制代码
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 查询语言,我们可以灵活地提取和分析这些样本数据,帮助我们更好地理解系统的健康状况和性能瓶颈。
作者其他作品:
【Java】Spring循环依赖:原因与解决方法
OpenAI Sora来了,视频生成领域的GPT-4时代来了
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
【Java】深入理解Java中的static关键字
[Java·算法·简单] LeetCode 28. 找出字a符串中第一个匹配项的下标 详细解读
了解 Java 中的 AtomicInteger 类
算法题 — 整数转二进制,查找其中1的数量
深入理解MySQL事务特性:保证数据完整性与一致性
Java企业应用软件系统架构演变史