使用 Prometheus 监控 CPU 利用率

Posted

技术标签:

【中文标题】使用 Prometheus 监控 CPU 利用率【英文标题】:Monitoring CPU Utilization using Prometheus 【发布时间】:2018-08-01 16:14:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

为了他人的利益而迟到的答案:

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

avg by (instance) (irate(process_cpu_seconds_totaljob="prometheus"[1m]))

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

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

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

【讨论】:

【参考方案2】:

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

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

3/4 = 75% CPU utilization.

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

【讨论】:

还有其他方法可以获取 CPU 利用率吗? @ArnavBose 一些谷歌搜索建议 -- robustperception.io/understanding-machine-cpu-usage

以上是关于使用 Prometheus 监控 CPU 利用率的主要内容,如果未能解决你的问题,请参考以下文章

prometheus cAdvisor 监控docker CPU利用率 教程

prometheus grafana监控 各个cpu核心利用率

prometheus 监控用例

监控工具之---Prometheus表达式

监控指标以及prometheus规则-不断完善中

容器云平台监控告警体系—— Golang应用接入Prometheus