JohnShen's Blog.

Linux宿主机及Docker监控

字数统计: 701阅读时长: 2 min
2021/05/19 Share

宿主机监控

Interpreting Prometheus metrics for Linux disk I/O utilizatio

Node_exporter IO指标详解

Understanding Machine CPU usage

Node_exporter CPU指标详解,教你看懂CPU适用率是怎么算出来的

Docker CPU Usage

介绍docker stats中的docker原生CPU信息收集的细节。

容器监控

在调研方案中发现,基本都是采用cAdvisor,K8S内部也是采用cAdvisor。选取版本 v0.37.5。

cAdvisor CPU过高

之前使用 cAdvisor 时发现CPU占用率太高,发现遇到此问题的人有很多,相关issue也有人提到,处理的方式是减少收集间隔期、减少收集的指标。

1
2
3
4
command:
- '--docker_only'
- '--housekeeping_interval=10s'
- '--disable_metrics=disk,udp,referenced_memory,cpu_topology,resctrl,tcp,advtcp,sched,process,hugetlb'

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_totalcontainer_fs_reads_totalcontainer_fs_writes_bytes_totalcontainer_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内存使用率指标

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图表可参考。

CATALOG
  1. 1. 宿主机监控
  2. 2. 容器监控
    1. 2.1. cAdvisor CPU过高
    2. 2.2. 设备映射
    3. 2.3. Grafana图表
    4. 2.4. 参考文档