总结

我们将探讨高级的 Prometheus 查询技术,包括速率计算、聚合和复杂的连接。到最后,你将像数据忍者一样切割和分析指标,发现隐藏的模式,让你的系统如歌般运转。

基础知识:快速回顾

在我们进入高级领域之前,先快速回顾一下基础知识:

  • Prometheus 收集时间序列数据作为指标
  • PromQL(Prometheus 查询语言)用于查询这些指标
  • 简单的查询示例如:http_requests_total

好了,基础知识回顾完毕,让我们卷起袖子,深入学习一些高级查询技术吧!

速率:指标的心跳

Prometheus 中最强大的函数之一是 rate()。它计算指定时间窗口内时间序列的每秒平均增长率。你可以这样使用它:

rate(http_requests_total[5m])

这将为你提供过去 5 分钟内每秒的 HTTP 请求速率。但为什么止步于此呢?让我们来点更有趣的:

sum(rate(http_requests_total{status="500"}[5m])) / sum(rate(http_requests_total[5m]))

这个令人惊叹的查询计算了 HTTP 500 错误与总请求的比率。突然间,你不仅仅是在计算请求数量;你在衡量系统的健康状况!

聚合:有时候,大小很重要

Prometheus 中的聚合函数就像是数据工具箱中的多功能工具。它们允许你将多个时间序列合并为一个结果。让我们看看几个例子:

sum()

sum(rate(http_requests_total[5m])) by (method)

这个查询按 HTTP 方法分组汇总请求速率。就像在问:“每种请求类型有多忙?”

topk()

topk(3, sum(rate(http_requests_total[5m])) by (path))

这个查询为你提供了最繁忙的 3 个端点。它是你的 API 的 VIP 列表!

专业提示:结合使用 withoutby 子句来创建强大且有洞察力的查询。

向量匹配:指标配对的艺术

Prometheus 中的向量匹配就像是指标的约会应用。它允许你结合不同的指标类型以创建新的见解。让我们来做媒:

rate(http_requests_total[5m]) 
/ 
on(instance) 
group_left 
avg by(instance) (rate(process_cpu_seconds_total[5m]))

这个查询计算了每个实例的每 CPU 秒 HTTP 请求数。就像在衡量你的服务器处理请求的效率。

子查询:数据的盗梦空间

子查询允许你对范围向量的结果应用即时向量操作。就像在查询你的查询。令人费解?是的。强大?绝对是。

max_over_time(rate(http_requests_total[5m])[1h:])

这个查询在过去一小时内的 5 分钟窗口中找到 HTTP 请求的最大速率。就像在寻找你最繁忙时刻中的最繁忙时刻。

黑暗艺术:预测未来

谁需要水晶球,当你有 Prometheus?让我们涉足一些预测分析:

predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4 * 3600)

这个魔法基于过去一小时的数据预测你在 4 小时内将有多少磁盘空间。就像拥有一台时间机器,但用于你的基础设施!

综合运用:一个真实的例子

让我们结合这些技术来创建一个可以在生产中拯救你的查询:

100 * (
  1 - (
    avg_over_time(rate(node_cpu_seconds_total{mode="idle"}[5m])[1h:5m])
    /
    avg_over_time(sum(rate(node_cpu_seconds_total[5m])) by (instance)[1h:5m])
  )
)

这个庞大的查询计算了过去一小时内的平均 CPU 利用率,使用 5 分钟的速率样本。就像每 5 分钟为你的系统进行一次全面的健康检查!

总结:从指标到洞察

高级的 Prometheus 查询不仅仅是数字运算。它是关于用数据讲述一个故事。我们学到了什么:

  • 使用 rate() 理解指标的变化速度
  • 明智地聚合以看到全局
  • 匹配向量以创建新的、有洞察力的指标
  • 使用子查询分析时间趋势
  • 使用 predict_linear() 预测未来(某种程度上)

记住,目标不仅仅是收集指标;而是要获得可操作的洞察,以改善你的系统,取悦你的用户,甚至可能让你的老板印象深刻。

接下来是什么?

现在你已经掌握了这些高级查询技术,是时候将它们付诸实践了。以下是一些可以开始的想法:

  • 基于复杂查询设置警报规则
  • 创建展示系统性能故事的仪表板
  • 使用预测查询自动化容量规划

记住,能力越大,责任越大。明智地使用这些技术,愿你的指标总是充满洞察力!

“目标是将数据转化为信息,并将信息转化为洞察。” - Carly Fiorina

祝查询愉快,数据战士们!