带有 Actuator Micrometer 和 Prometheus 的 Spring Webflux 应用程序 Grafana 中的 CPU 指标

问题描述

关于如何构建 cpu 指标的可视化和洞察力的小问题。

我有一个 Spring Boot Webflux 应用程序,没什么特别的。 我引入了 Actuator、Micrometer 和 Prometheus 依赖项。

该应用程序具有开箱即用的 cpu 指标,我认为这非常酷。 我也相信这些指标包含大量信息。 不幸的是,我认为不了解 Grafana 或指标本身以充分发挥其潜力。

指标是:

system_cpu_usage
process_cpu_usage
system_cpu_count
system_load_average_1m

不知道如何正确使用它们,我使用了那些非常基本的菜鸟查询

system_cpu_usage{_ns_=“my_namespace",cluster=~”my_cluster"}
process_cpu_usage{_ns_=“my_namespace",cluster=~”my_cluster"}
system_cpu_count{_ns_=“my_namespace",cluster=~”my_cluster”}
system_load_average_1m{_ns_=“my_namespace",cluster=~”my_cluster"}

有了这些,我确实得到了一些结果。问题是,我得到的只是一些扁平的线条,在这些线条中无法采取进一步的见解或行动。

我在网上看到一些更复杂的查询,例如

avg_over_time(process_cpu_usage{_ns_=“my_namespace",cluster=~”my_cluster"}[1h])

或者一些使用 delta rate irate。但不确定他们来这里是为了什么。

使用这些指标的正确方法是什么,我当前的查询有什么问题,因为现在和有意义的指标之间存在差距。

谢谢。

解决方法

最后一个 avg_over_time1h 用法在您想为警报管理器制定规则的情况下很有用。想象一个用例,其中 CPU 上的每个尖峰都会触发警报管理器规则。这是不可取的。顺便说一下,在这个特定的用例中,我更喜欢使用 histogram_quantile 因为平均值可以隐藏高值(仅仅因为它是平均值)。此处提供了一些有关百分位数的最佳做法:https://prometheus.io/docs/practices/histograms/#quantiles。然后使用 rate 确定分位数的时间窗口。

histogram_quantile(0.9,rate(
  process_cpu_usage{_ns_=“my_namespace",cluster=~”my_cluster"}[1h]
))