原创 吴就业 229 0 2024-03-28
本文为博主原创文章,未经博主允许不得转载。
本文链接:https://wujiuye.com/article/e71bcecfe598448e9329eabf64bb645a
作者:吴就业
链接:https://wujiuye.com/article/e71bcecfe598448e9329eabf64bb645a
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。
前面《如何获取Pod的CPU和内存指标,使用Grafana Agent收集指标,上传到Prometheus》这篇介绍的指标获取只拿到了cpu使用率,怎么转成cpu使用量呢?
如果我们需要的是cpu使用量,而不是cpu使用率的话,其实只需要用使用率*1000毫核即可(1cpu=1000m)。
假如cpu使用率是200%的话,以一分钟计算的话,因为一分钟只有60秒,200%就是占用了120秒,一个cpu肯定只有60秒的时间,所以200%,就是用了两个cpu。
由于/metrics/resource
接口没有提供节点的cpu核数,我们想知道cpu核数,所以指标收集我们换了个接口:/metrics/cadvisor
。可以使用/metrics/cadvisor
取代/metrics/resource
。
/metrics/cadvisor
我们可以通过此接口拿到一些我们关心的指标,例如:
container_cpu_usage_seconds_total ## 容器cpu使用秒数
container_memory_usage_bytes ## 容器内存使用
machine_cpu_cores ## cpu核数
由于/metrics/cadvisor
也并不直接给出cpu使用率,而是给出容器的cpu使用时间:container_cpu_usage_seconds_total
。
所以我们还是需要先计算使用率,再计算使用量,计算公式:
举例:
发送两次curl请求取container_cpu_usage_seconds_total指标,并记录下来。
container_cpu_usage_seconds_total 440622.88009 1710842537802
container_cpu_usage_seconds_total 440624.781901 1710842567875
container_cpu_usage_seconds_total后面有两个数字:一个是使用时间,单位核心/秒;一个是时间戳,单位毫秒。单位不一样,所以需要换算一下,所示计算利用率的公式是:
(440624.781901 - 440622.88009) / ((1710842567875 - 1710842537802) / 1000)
= 1.901811 / 30.073
= 0.06324
= 6.324%
那么计算使用量为:
0.06324 * 1000 = 63.24m (毫核)
然后,如果我们想要的是Pod的CPU使用率,由于/metrics/cadvisor
只提供容器的,就需要我们将Pod上所有容器的使用量相加。不过一般情况下一个Pod都只会有一个容器。
声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。
我们使用自定义的调度器来调度pod,有自定义的Filter插件。Autoscaler在执行扩容之前,会调用Filter插件,尝试是不是真的没有node满足调度这个pod再去扩容。而默认情况下,Autoscaler拿的是默认的Filter插件,拿不到我们自定义的Filter插件,所以没有走我们的Filter逻辑,所以不会扩容。
本篇简单描述(Autopilot: workload autoscaling at Google)论文中描述的资源request预测算法,不需要理解论文中那复杂的数学公式。
通常指标和日志收集这两者是一起的,可观测即离不开指标,也离不开日记。当两者都需要的时候,就没必要部署两个DaemonSet了。本篇将两者结合成一个完整的案例,大家可以直接拿去部署使用。
本篇是作者在云原生PaaS平台项目中实战可观测能力做的技术调研,将关键技术知识点讲透,涉及:如何获取Pod的cpu和内存指标、使用Grafana Agent收集指标、上传到Prometheus。
订阅
订阅新文章发布通知吧,不错过精彩内容!
输入邮箱,提交后我们会给您发送一封邮件,您需点击邮件中的链接完成订阅设置。