Prometheus 历史峰值看不到了,这监控不准啊

部署运行你感兴趣的模型镜像

经常在夜莺社区收到用户反馈,说查询某个监控指标,昨天的峰值是 xx,今天再次查询,发现昨天的峰值看不到了,然后开始吐槽,你们这监控怎么搞的,一点都不准啊。事实真的是这样吗?

真实原因

本质上这是因为 Prometheus 生态在查询历史数据时提供了一个 step 参数,大多数人对这个知识匮乏导致的疑问。

在这里插入图片描述

上图是 Prometheus 的官方文档,其他的时序库比如 VictoriaMetrics、Thanos 都是兼容 Prometheus 接口的,所以逻辑是相同的。其中说明了 step 参数的含义:Query resolution step width in duration format or float number of seconds。

比如 step=15,返回的数据就是每 15 秒一个数据点,如果 step=60,返回的数据就是每分钟一个数据点。假设原始数据采集的时候,是每 15 秒采集一次,那 step=15 就能完整展示原始数据,如果 step=60,就会有部分数据被丢掉,导致历史峰值看不到。

怎么控制 step 参数

大部分用户查询监控数据的时候,压根没有关注这个值,但是仍然可以查询数据。这是因为,Prometheus、Grafana、Nightingale 等都会根据用户选择的时间范围自动计算 step,以保证返回的数据不会太密集太多,也不会太稀疏太少。

不同的监控系统,对于数据稀疏与否的配置不同,以 Nightingale 举例。比如你要查询最近 1 小时的数据,Nightingale 自动计算的 step 就是 15:

在这里插入图片描述

如果查询最近 24h 的数据,Nightingale 自动计算的 step 就是 360:

在这里插入图片描述

当然,你也可以手工指定 step 的值,比如手工指定为 15:

在这里插入图片描述

可以看到,手工指定 step 为 15,返回的数据就是每 15 秒一个数据点,这样就能完整展示原始数据了,但是数据量会比较大,图表看起来也很稠密。如果要看一年的数据,仍然强制 step 为 15 话,返回的数据可能会把浏览器干蹦。

如何知道实际采集频率

Prometheus 这个设计逻辑,一个是可以保证查询效率,另一个是为了时间戳对齐,方便不同的指标之间做计算,并非是监控不准。如果你想使用原始数据绘图,那就把 step 的大小设置为监控数据采集时的频率即可。

但是作为用户,如果采集规则不是你配置的,你不知道采集频率怎么办?此时可以到 Nightingale 的即时查询页面,使用 Table 视图,查看指标一段时间的数据,比如:

在这里插入图片描述

Promql 最后加了一个 [5m] 是查询 5 分钟的数据,这是 Promql 的知识不展开了。下面的内容展示的是 5 分钟内的原始数据,并且时间戳自动展示为人类易读的方式,而且自动计算了时间戳之间的差值,这样就很方便知道采集频率了。上图中可以看到采集频率是 60 秒一次。

另外,在这个视图中如果你发现某个指标的采集频率不固定,那很可能是相同的数据重复采集了,比如同时有两个 categraf 在采集相同的一个监控目标,这种情况通常是不符合预期的,需要排查。

总结

Prometheus 生态的 step 参数是一个很重要的概念,对于监控数据的查询有着重要的影响。大部分情况下,用户不需要关心这个参数,因为监控系统会自动计算 step,以保证查询效率和数据展示的合理性。但是如果你想看原始数据,或者想了解监控数据的采集频率,那就需要了解 step 参数的含义,以及如何手工指定 step 参数啦。

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### Prometheus 历史监控数据存储与查询 #### 数据存储机制 Prometheus 存储的是时序数据,即按照相同时序(相同的名字和标签),以时间维度存储连续的数据的集合[^2]。这种设计使得 Prometheus 可以高效地处理大量的时间序列数据。 每个样本由三部分组成: - **度量名称 (Metric Name)**:标识特定的时间序列。 - **标签 (Labels)**:提供额外的信息来区分不同的实例或环境。 - **数值 (Value)** 和 时间戳 (Timestamp) 为了优化读写性能,Prometheus 使用了一种基于 LSM 树的日志结构化合并树作为其内部数据库引擎。这允许快速追加新记录并支持高效的压缩操作。 #### 配置文件设置 通过指定 `--config.file` 参数可以加载自定义配置文件路径,例如 `/data/monitor/prometheus/conf/prometheus.yml` 文件用于定义 scrape jobs 和 alerting rules 等重要参数[^3]。 ```yaml scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] ``` 此段 YAML 定义了一个简单的抓取任务(job),它会定期从本地运行的服务收集指标信息。 #### 查询历史数据 虽然 Prometheus 主要关注实时监测,但也提供了强大的 PromQL 来帮助用户检索过去一段时间内的数据。使用 HTTP API 或者内置 Web UI 的表达式浏览器都可以执行这些查询命令。 一些常用的 PromQL 函数包括但不限于: - `rate()` : 计算每秒平均增长率,在给定区间向量上。 - `increase()` :计算增长总量,在给定区间向量上。 - `avg_over_time()` :求解某个时间段内所有点值的均值。 例如,获取最近一小时内某服务请求速率的变化情况可以通过如下语句实现: ```promql rate(http_requests_total[1h]) ``` 这条指令告诉 Prometheus 返回在过去一个小时里 http 请求次数变化率的结果集。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜莺开源监控

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值