​​容器-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

 

 

 

摘自:

javascript:void(0)

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


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

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