Prometheus监控K8s资源常用指标说明

举报
可以交个朋友 发表于 2023/12/12 19:50:25 2023/12/12
【摘要】 很多场景下,需要查询node CPU利用率 、pod CPU利用率等。 现对Prometheus监控K8S资源常用指标进行说明。

一、背景

Promethues的使用不仅需要学会安装部署,还要掌握PromQL的编写。很多场景下,需要查询node CPU利用率 、pod CPU利用率等。
现对Prometheus监控K8S资源常用指标进行说明。


二、 指标说明

K8S集群指标可以按维度分为 节点指标 和容器pod指标。

  • 节点维度指标
    包括节点cpu使用率,节点内存使用率等
  • pod维度指标
    包括pod cpu使用率等

2.1 node节点CPU使用率

  • node_cpu_seconds_total (counter类型指标,用来统计cpu每种模式下所花费的时间,是cpu时间片的一个累积值)
    image.png
    如果要计算node节点cpu使用率:cpu使用率是cpu除空闲(idle)状态之外的其他所有cpu状态的时间总和除以总的cpu时间得到的结果。即:
    (1- sum(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total[1m])) by (instance)) *100
    image.png

  • 如果需要采集节点vcpu指标信息
    例如4u的一个节点,监控每个u的使用率
    可参考公式:
    (1- sum(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance,cpu) / sum(rate(node_cpu_seconds_total[1m])) by (instance,cpu)) *100
    image.png


2.2 Node节点内存使用率

节点内存监控相关指标解释

  • node_memory_MemTotal_bytes :节点总内存
  • node_memory_MemFree_bytes :节点真正尚未被使用的物理内存数量
  • node_memory_MemAvailable_bytes :从应用程序的角度看到的可用内存;linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据。就是buffer和cache,对于内核来说 buffer和cache 都属于已经被使用的内存,只是应用程序需要内存时,如果没有足够的free内存可用,内核就会从buffer和cache中回收内存满足应用程序的请求。所以从应用程序角度来说avaliable = free + buffer +cache, 不过这只是一个理想的公式,实际中的数据会有较大偏差

所以 理想情况下节点内存使用率可以 这样计算:
(1-(node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes )/node_memory_MemTotal_bytes)*100
或者使用以下计算方式:
(1- node_memory_MemAvailable_bytes/node_memory_MemTotal_bytes)*100
image.png


2.3 节点磁盘容量监控

节点磁盘监控,主要说明下磁盘空间使用率相关指标,磁盘使用率通常是指挂载在某个目录的磁盘分区的使用率。一个磁盘分区会由对应的文件系统进行管理,通过该文件系统就能获取到该分区的使用情况。

  • node_filesystem_avail_bytes 磁盘可用空间
    image.png
  • node_filesystem_size_bytes 磁盘总空间
    image.png

所以k8s集群中磁盘使用率可以这样计算:
1- (node_filesystem_avail_bytes{fstype="ext4"}) / (node_filesystem_size_bytes{fstype="ext4"})
不同的磁盘文件分区,磁盘使用情况不一样,一般关注容器引擎空间和pod容器空间的使用率:
image.png


2.4 节点磁盘IO监控

磁盘IO表示磁盘的输入和输出(向磁盘写入数据,从磁盘读取数据)

  • node_disk_reads_completed_total: 读IO
  • node_disk_writes_completed_total : 写IO

sum by (instance) (rate(node_disk_reads_completed_total[5m]))
image.png
sum by (instance) (rate(node_disk_writes_completed_total[5m]))
image.png


2.5 Pod cpu使用率

  • container_cpu_usage_seconds_total 是容器累计使用的cpu时间,用它除以cpu总时间,就可以得到容器的cpu使用率,首先计算容器的cpu占用时间,由于节点上的cpu有多个,所以需要将容器在每个cpu上占用的时间累加起来。pod在3m 内累积使用的cpu时间为(根据pod和namespace 进行分组查):
    (sum(rate(container_cpu_usage_seconds_total{namespace="default",pod!=""}[3m])) by (pod))

  • 然后计算cpu的总时间,这里的cpu数量是容器分配到的cpu数量,container_spec_cpu_quota 这个指标就是容器的cpu配额。它的值是容器指定的 cpu核数100000 ,所以pod在1s内cpu总时间为: Pod 的 CPU 核数1s
    (sum(container_spec_cpu_quota{namespace="default",pod!=""}) by (pod) /100000)

  • container_spec_cpu_quota是容器的cpu 配额。所以只有配置了resource.cpu.limits CPU 的pod 才有该指标。将上面 这两个语句的结果 相除。就得到了容器的cpu利用率:
    (sum(rate(container_cpu_usage_seconds_total{namespace="default",pod!="",image!=""}[3m])) by (pod)) / (sum(container_spec_cpu_quota{namespace="default",pod!="",image!=""}) by (pod) /100000) *100

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。