使用 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]))
rate
或 irate
等于百分比(取 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利用率 教程