容器-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)
-
container_spec_cpu_period
当对容器进行 CPU 限制时,CFS 调度的时间窗口,又称容器 CPU 的时钟周期通常是 100,000 微秒
-
container_spec_cpu_quota
是指容器的使用 CPU 时间周期总量,如果 quota 设置的是 700,000,就代表该容器可用的 CPU 时间是 7*100,000 微秒,通常对应 kubernetes 的 resource.cpu.limits 的值
-
container_spec_cpu_share
是指 container 使用分配主机 CPU 相对值,比如 share 设置的是 500m,代表窗口启动时向主机节点申请 0.5 个 CPU,也就是 50,000 微秒,通常对应 kubernetes 的 resource.cpu.requests 的值
-
container_cpu_usage_seconds_total
统计容器的 CPU 在一秒内消耗使用率,应注意的是该 container 所有的 CORE
-
container_cpu_system_seconds_total
统计容器内核态在一秒时间内消耗的 CPU
-
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