宿主机监控
Interpreting Prometheus metrics for Linux disk I/O utilizatio
Node_exporter IO指标详解
Understanding Machine CPU usage
Node_exporter CPU指标详解,教你看懂CPU适用率是怎么算出来的
介绍
docker stats
中的docker原生CPU信息收集的细节。
容器监控
在调研方案中发现,基本都是采用cAdvisor,K8S内部也是采用cAdvisor。选取版本 v0.37.5。
cAdvisor CPU过高
之前使用 cAdvisor 时发现CPU占用率太高,发现遇到此问题的人有很多,相关issue也有人提到,处理的方式是减少收集间隔期、减少收集的指标。
1 | command: |
cAdvisor中有Housekeeping
的概念,控制指标收集的周期行为。--housekeeping_interval
默认情况值为1s,但是并不是每秒都进行采集。因为--allow_dynamic_housekeeping
默认为true,动态的间隔时长依赖于容器的活动情况进行收集,此项设为 false 则会增加资源开销,因此不做变动。在动态收集的前提下,试验下来:设置为1s,1分钟收集12次左右;设置为5s后,1分钟采集大概7或8次;设置为10s,1分钟收集4次左右。
设置--docker_only
:会只收集docker容器的状态,像id="/system.slice"
等指标都不会再收集。
设置disable_metrics
:考虑到我们实际场景,在默认列表的基础上加上了disk
。磁盘IO相关的指标还剩下container_fs_reads_bytes_total
、container_fs_reads_total
、container_fs_writes_bytes_total
、container_fs_writes_total
。
设置以上三个条件后,在我们的双机空置服务上跑监控大概会降低5%的CPU消耗。
设备映射
官方示意的docker run 中加入了--device=/dev/kmsg
设备映射,如果不包含此参数,则会在启动时报出警告:
1 | 1 manager.go:288] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory |
由于Swarm下没有device的选项,可以考虑docker compose的方式启动服务堆栈。
Grafana图表
看了一圈没啥品质高的图表,dockprom的 dashboards 可以参考下。
参考文档
Monitoring cAdvisor with Prometheus[官方文档]
Prometheus指标细节。吐槽下,文档感觉和实际有出入,在实验 disable_metrics 时(比如关闭disk,开启diskIO)关闭的指标和文中的不一样。
cAdvisor Runtime Options[官方文档]
cadvisor启动参数,也可进容器里
cadvisor --help
,参数前缀试验下来--
和-
都是可以的。
cAdvisor中关于内存的监控项。
Memory_working_set vs Memory_rss in Kubernetes, which one you should monitor?
cAdvisor中内存指标最关键的两项。
Docker monitoring - with Grafana, prometheus, cadvisor and exporter
一套标准的基于docker compose监控方案。
dockprom - A monitoring solution for Docker hosts and containers
一套标准的宿主机和docker通用监控方案,Prometheus, Grafana, cAdvisor, NodeExporter and alerting with AlertManager。Grafana图表可参考。