0%

Kubernetes 集群监控:指标分析

原文: 容器监控实践—K8S常用指标分析

Cadvisor 指标分析

CPU

利用率

查询每个容器中的正在使用的CPU

1
2
3
4
5
# 总的
sum(
rate(container_cpu_usage_seconds_total[5m])
)
by {container_name}

用户的CPU

1
2
3
4
sum(
rate(container_cpu_user_seconds_total [5m])
)
by {container_name}

系统的的CPU

1
2
3
4
sum(
rate(container_cpu_user_seconds_total [5m])
)
by {container_name}

同时,还可以在前者的基础上进行计算得到:

  • 其他的CPU占用百分比
  • 当前空闲的CPU百分比
  • 当前等待IO操作的CPU百分比(这个尚在考虑)

饱和率

1
2
3
sum(
rate(container_cpu_cfs_throttled_seconds_total[5m]))
by (container_name)

错误率

目前找到的资料说, cAdvisior 不对外暴露 CPU 错误;

内存

利用率

这里排除掉 POD , 防止 父级 cgroup 跟踪 pod 中的所有的容器进行统计信息。

1
2
sum(container_memory_working_set_bytes {name!〜“ POD”})
by (container_name)

饱和度

1
2
sum(container_memory_working_set_bytes) by (container_name) / sum(label_join(kube_pod_container_resource_limits_memory_bytes,
"container_name", "", "container")) by (container_name)

其他指标

  • container_memory_cache-页面缓存的字节数。
  • container_memory_rss -RSS的大小(以字节为单位)。
  • container_memory_swap-容器交换使用量(以字节为单位)。
  • container_memory_usage_bytes-当前内存使用情况(以字节为单位,包括所有内存,无论何时访问。)
  • container_memory_max_usage_bytes- 以字节为单位记录的最大内存使用量。
  • container_memory_working_set_bytes-当前工作集(以字节为单位)。
  • container_memory_failcnt-内存使用次数达到限制。
  • container_memory_failures_total-内存 分配失败的累积计数。

衍生指标

  • 剩余内存百分比
  • 内存使用率
  • 用户实际使用的内存

磁盘

IO 读写的字节数

1
2
3
sum(rate(container_fs_writes_bytes_total[5m])) by (container_name,device)

sum(rate(container_fs_reads_bytes_total[5m])) by (container_name,device)

其他的指标

  • container_fs_io_time_seconds_total
  • container_fs_io_time_weighted_seconds_total
  • container_fs_io_current

衍生指标

  • 磁盘使用率
  • 磁盘存储总量
  • 磁盘每秒 读/写 的请求数

网络

利用率

查询将按pod名称显示每个pod的网络利用率

1
2
3
sum(rate(container_network_receive_bytes_total[5m])) by (name)

sum(rate(container_network_transmit_bytes_total[5m])) by (name)

错误数

  • container_network_receive_errors_total
  • container_network_transmit_errors_total

其他指标

  • container_network_receive_packets_dropped_total
  • container_network_transmit_packets_dropped_total

Node Exporter 指标分析

CPU利用率

node_exporter指标node_cpu会跟踪所有CPU mode 在每个内核上花费的所有CPU时间。这些mode是:user, system, nice, idle, iowait, guest, guest_nice, steal, soft_irq and irq。

1
2
3
4
5
sum(rate(
node_cpu{mode!=”idle”,
mode!=”iowait”,
mode!~”^(?:guest.*)$”
}[5m])) BY (instance)

饱和度

获取单节点的 CPU 数

1
count(node_cpu{mode="system"}) by (node)

以百分比的形式拿到 node_load1 的指标

1
sum(node_load1) by (node) / count(node_cpu{mode="system"}) by (node) * 100

node-exporter 里面常见的指标

  • node_cpu:系统CPU使用量
  • node_disk*:磁盘IO
  • node_filesystem*:文件系统用量
  • node_load1:系统负载
  • node_memeory*:内存使用量
  • node_network*:网络带宽
  • node_time:当前系统时间
  • go_*:node exporter中go相关指标
  • process_*:node exporter自身进程相关运行指标

ApiServer 指标分析

请求数率与延迟

Rate 速率

1
2
sum(rate(apiserver_request_count[5m])) 
by (resource, subresource, verb)

Error 错误

查询获取5分钟内错误率与请求率的比率

1
2
rate(apiserver_request_count{code=~"^(?:5..)$"}[5m]) / 
rate(apiserver_request_count[5m])

Duration请求时间

查看 90%情况下请求的时间分布

1
2
histogram_quantile(0.9, sum(rate(apiserver_request_latencies_bucket[5m]))
by (le, resource, subresource, verb) ) / 1e+06

队列情况

  • apiserver_admission_controller_admission_duration_seconds:准入控制器的处理时间 以秒为单位),通过名称进行标识,并针对每个操作以及API资源和类型(验证或准入)进行细分。
  • apiserver_admission_controller_admission_latencies_milliseconds 延迟*

ETCD 的指标

  • etcd_helper_cache_entry_count —缓存中的元素数。
  • etcd_helper_cache_hit_count —缓存命中计数。
  • etcd_helper_cache_miss_count —缓存未命中计数。
  • etcd_request_cache_add_latencies_summary —将条目添加到缓存的时间(以微秒为单位)。

程序指标(这类指标不清楚是否需要体现出来)

apiserver 是 go 程序,目前所有 prometheus 采集的指标都会包含

golang 程序指标

  • go_gc_duration_seconds 程序 GC 的耗时
  • go_gc_duration_seconds_count 程序 GC 的次数
  • go_gc_duration_seconds_quantile 程序 GC 的耗时分布
  • go_goroutines goroutines信息
  • go_info go环境信息

    request

  • apiserver_request 请求信息
  • apiserver_request_count 请求次数
  • apiserver_request_duration_seconds 请求耗时

response

  • apiserver_response_sizes 每个组,版本,动作,资源,子资源,范围和组件的响应大小分布(以字节为单位)
  • apiserver_response_sizes_bucket 区间分布
  • apiserver_response_sizes_count 返回的数量

    audit

  • apiserver_audit_event: 审计事件
  • apiserver_audit_requests_rejected:审核拒绝的请求
这是打赏的地方...

本文标题:Kubernetes 集群监控:指标分析

文章作者:Mr.Sun

发布时间:2020年04月15日 - 10:05:27

最后更新:2020年06月24日 - 14:09:42

原始链接:http://www.blog.sun-iot.xyz/posts/2395f623

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------Thanks for your attention---------