11

我正在尝试监视安装和运行 Prometheus 的机器的 cpu 利用率。我有一个指标process_cpu_seconds_total。我可以找到这个指标的愤怒或比率。但我不太确定如何得出 CPU 利用率的百分比值。无论如何我可以使用这个process_cpu_seconds_total指标来找到运行 Prometheus 的机器的 CPU 利用率吗?

4

2 回答 2

14

也为他人的利益提供了迟到的答案:

如果您只想监控prometheus 进程使用的 CPU 百分比,您可以使用process_cpu_seconds_total,例如:

avg by (instance) (irate(process_cpu_seconds_total{job="prometheus"}[1m]))

但是,如果您想像我怀疑的那样对机器 CPU 进行常规监控,您应该设置节点导出器,然后使用与上述类似的查询,使用 metric node_cpu_seconds_total。例如:

avg by (instance,mode) (irate(node_cpu_seconds_total{mode!='idle'}[1m]))

或等于百分比(1 中) rateirate因为它们是一秒中使用的秒数,但通常需要跨机器上的内核/cpu 聚合。
Brian Brazil 关于 Prometheus CPU 监控的帖子非常相关和有用:https ://www.robustperception.io/understanding-machine-cpu-usage

于 2019-02-15T04:35:52.147 回答
1

一种方法是利用适当的 cgroup 资源报告。Cgroup 将一个 CPU 核心时间分成 1024 份。因此,通过了解进程消耗了多少份额,您总能找到 CPU 利用率的百分比。

现在在你的情况下,如果你有 CPU 秒的变化率,这是进程在最后一个时间单位中使用 CPU 时间的时间(假设从现在开始为 1 秒)。然后取决于你有多少核心,最后 1 个单元中的 1 个 CPU 将有 1 个 CPU 秒。因此,如果您的变化率为 3 并且您有 4 个核心。

3/4 = 75% CPU utilization.

这只是一个粗略的估计,因为由于延迟和延迟等原因,您的 process_total_cpu 时间可能不是很准确。

于 2018-02-21T22:53:34.627 回答