容器-promQL语法之内存指标

容器-promQL语法之内存指标

 

在容器内进行内存监控的常用指标包括

1、 内存中的cache用量

container_memory_cache

2、 常驻的内存用量

container_memory_rss

3、 交换分区用量

container_memory_swap

4、 内存的总占用量

container_memory_usage_bytes

 

      由于container_memory_usage_bytes包括container_memory_cache,所以在计算容器的实际内存占用时,是将container_memory_usage_bytes减去container_memory_cache统计的。

      内存指标都是仪表盘类型的数据,可以直接通过标签获取每个pod的内存指标

5、获取内存用量的sql

container_memory_usage_bytes{pod="kubernetes-dashboard-74d688b6bc-stl4c"}

 

在监控k8s时,通过上面的查询条件会获取3条监控指标:sanbox容器内存、业务容器内存和整个pod的内存。可以追加过滤条件获取其中的某个指标

    容器过程中如果达到了上限,就会触发OOM事件。堆内存OOM的判断并不是通过container_memory_usage_bytes指标进行的。而是通过《container_memory_working_set_bytes{name!~"POD"}》指标进行的。所以通过 container_memory_working_set_bytes / kube_pod_container_resource_limits_memory_bytes获得内存使用率

 

 

使用内存数
sum(rate(container_memory_working_set_bytes{namespace!=""}[5m])) by (namespace,pod)

总内存数
container_memory_usage_bytes

请求内存数
kube_pod_container_resource_requests{resource="memory",namespace!=""}

限制内存数
sum(kube_pod_container_resource_limits{resource="memory",namespace!=""}) by (namespace,pod)


内存占用率
sum(rate(container_memory_working_set_bytes{namespace!=""}[5m])) by (namespace,pod) / sum(kube_pod_container_resource_limits{resource="memory",namespace!=""}) by (namespace,pod)


  1. container_spec_cpu_period

    当对容器进行 CPU 限制时,CFS 调度的时间窗口,又称容器 CPU 的时钟周期通常是 100,000 微秒

  2. container_spec_cpu_quota

    是指容器的使用 CPU 时间周期总量,如果 quota 设置的是 700,000,就代表该容器可用的 CPU 时间是 7*100,000 微秒,通常对应 kubernetes 的 resource.cpu.limits 的值

  3. container_spec_cpu_share

    是指 container 使用分配主机 CPU 相对值,比如 share 设置的是 500m,代表窗口启动时向主机节点申请 0.5 个 CPU,也就是 50,000 微秒,通常对应 kubernetes 的 resource.cpu.requests 的值

  4. container_cpu_usage_seconds_total

    统计容器的 CPU 在一秒内消耗使用率,应注意的是该 container 所有的 CORE

  5. container_cpu_system_seconds_total

    统计容器内核态在一秒时间内消耗的 CPU

  6. container_cpu_user_seconds_total

    统计容器用户态在一秒时间内消耗的 CPU

 

container_cpu_usage_seconds_total是container累计使用的CPU时间,用它除以CPU的总时间,就得到了容器的CPU使用率。


Pod 在1s内累计使用的CPU时间为:
sum(rate(container_cpu_usage_seconds_total{image!=""}[1m])) by (pod_name, namespace)
 container_spec_cpu_quota是容器的CPU配额,它的值是:为容器指定的CPU个数*100000。
故,Pod在1s内CPU的总时间为:Pod的CPU核数 * 1s:

(sum(container_spec_cpu_quota{image!=""}/100000) by (pod_name, namespace))


将上面两个公式的结果相除,就得到了容器的CPU使用率:

sum(rate(container_cpu_usage_seconds_total{image!=""}[1m])) by (pod_name, namespace) / (sum(container_spec_cpu_quota{image!=""}/100000) by (pod_name, namespace)) * 100
 

 

 

 

摘自:

https://www.cnblogs.com/suyj/p/15621392.html

https://www.jianshu.com/p/8b4cb143d174

posted @ 2022-06-29 14:29  fengjian1585  阅读(1285)  评论(0编辑  收藏  举报