cAdvisor+Pro+Grafana 监控Docker容器
cAdvisor(Container Advisor)
Google
开源的一个容器监控工具,可用于对容器资源的使用情况和性能进行监控。用于收集、聚合、处理和导出正在运行容器的有关信息。
cAdvisor 可以采集到两大类指标,分别是容器指标和机器的指标
容器的指标有 CPU、内存、文件系统、网络流量、启动时间等等参数
cadvisor/docs/storage/prometheus.md at release-v0.33 · google/cadvisor (github.com) 指标汇总
机器的硬件指标有宿主机的 CPU 核数、内存容量、hugepage 、NVM 等等指标,如果用参数打开了 GPU 的采集,估计也能有一些,当然这些指标不能和 Node Exporter 以及 GPU Exporter 去比较,会少很多
cadvisor/docs/runtime_options.md at master · google/cadvisor (github.com)
--application_metrics_count_limit=100: Max number of application metrics to store (per container) (default 100) --collector_cert="": Collector's certificate, exposed to endpoints for certificate based authentication. --collector_key="": Key for the collector's certificate --disable_metrics=<metrics>: comma-separated list of metrics to be disabled. Options are advtcp,app,cpu,cpuLoad,cpu_topology,cpuset,disk,diskIO,hugetlb,memory,memory_numa,network,oom_event,percpu,perf_event,process,referenced_memory,resctrl,sched,tcp,udp. (default advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sched,tcp,udp) --enable_metrics=<metrics>: comma-separated list of metrics to be enabled. If set, overrides 'disable_metrics'. Options are advtcp,app,cpu,cpuLoad,cpu_topology,cpuset,disk,diskIO,hugetlb,memory,memory_numa,network,oom_event,percpu,perf_event,process,referenced_memory,resctrl,sched,tcp,udp. --prometheus_endpoint="/metrics": Endpoint to expose Prometheus metrics on (default "/metrics") --disable_root_cgroup_stats=false: Disable collecting root Cgroup stats
默认采集的指标
app,cpu,cpuLoad,disk,diskIO,memory,network,oom_event,percpu,perf_event
cAdvisor
本身就对 Docker
容器支持,并且还对其它类型的容器尽可能的提供支持,力求兼容与适配所有类型的容器。
Kubernetes
已经默认将其与 Kubelet
融合作为容器监控指标的默认工具,所以,对于云原生集群直接使用 Kubelet
组件提供的指标采集地址即可。
一、cAdvisor部署
1、启动cAdvisor
:
docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --name=cadvisor \ --privileged=true \ google/cadvisor:v0.33.0 \ --disable_metrics=tcp,udp,process,hugetlb \ # 禁用不需要的指标 --housekeeping_interval=10s \ # 采集间隔,默认是1s --docker_only=true # 仅收集 Docker 容器的指标
2、此时,cAdvisor组件
已经启动,我们可以使用浏览器访问 http://自己IP地址:8080
访问到cAdvisor组件
的Web UI
:
3、cAdvisor
默认只保存2分钟的监控数据。cAdvisor
已经内置了对Prometheus
的支持。
访问http://自己的IP地址:8080/metrics
即可获取到标准的Prometheus
监控样本输出
4、下面表格中列举了一些cAdvisor
中获取到的典型监控指标:
指标名称 | 类型 | 含义 |
---|---|---|
container_cpu_load_average_10s | gauge | 过去10秒容器CPU的平均负载 |
container_cpu_usage_seconds_total | counter | 容器在每个CPU内核上的累积占用时间 (单位:秒) |
container_cpu_system_seconds_total | counter | System CPU累积占用时间(单位:秒) |
container_cpu_user_seconds_total | counter | User CPU累积占用时间(单位:秒) |
container_fs_usage_bytes | gauge | 容器中文件系统的使用量(单位:字节) |
container_fs_limit_bytes | gauge | 容器可以使用的文件系统总量(单位:字节) |
container_fs_reads_bytes_total | counter | 容器累积读取数据的总量(单位:字节) |
container_fs_writes_bytes_total | counter | 容器累积写入数据的总量(单位:字节) |
container_memory_max_usage_bytes | gauge | 容器的最大内存使用量(单位:字节) |
container_memory_usage_bytes | gauge | 容器当前的内存使用量(单位:字节 |
container_spec_memory_limit_bytes | gauge | 容器的内存使用量限制 |
machine_memory_bytes | gauge | 当前主机的内存总量 |
container_network_receive_bytes_total | counter | 容器网络累积接收数据总量(单位:字节) |
container_network_transmit_bytes_total | counter | 容器网络累积传输数据总量(单位:字节) |
二、Prometheus部署
1、创建prometheus
存储数据外挂目录,避免容器重启丢失:
mkdir -p /disk/docker-monitor/prometheus/data chmod 777 /disk/docker-monitor/prometheus/data
2、prometheus配置文件外挂出来,方便修改,vi /disk/docker-monitor/prometheus/prometheus.yml
:
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 rule_files: - rule/record/*.yml scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "cadvisor" static_configs: - targets: ["124.222.45.207:8080"]
当有多台主机上的docker容器需要采集时
- targets: ['ip:8090','ip:8090']
3、docker版本
docker run -d -p 9090:9090 --name prometheus \ -v /disk/docker-monitor/prometheus/conf:/opt/bitnami/prometheus/conf \ -v /disk/docker-monitor/prometheus/data:/opt/bitnami/prometheus/data \ bitnami/prometheus:2.42.0 \ --web.enable-lifecycle --web.enable-admin-api\ --config.file=/opt/bitnami/prometheus/conf/prometheus.yml\ --storage.tsdb.path=/opt/bitnami/prometheus/data
--web.enable-lifecycle --web.enable-admin-api提供rest api接口方式管理prometheus,比如配置热加载:curl -XPOST http://localhost:9090/-/reload。
注意:这里将prometheus配置文件和存储目录外挂出来,避免容器重启后数据丢失。
4、当能够正常采集到cAdvisor
的样本数据后,可以通过以下表达式计算容器的CPU使用率
:
sum(irate(container_cpu_usage_seconds_total{image!=""}[1m])) without (cpu)
三、部署Grafana
1、docker run
docker run -d --name=grafana -p 3000:3000 -v grafana:/var/lib/grafana grafana/grafana
2、导入Docker
容器监控面板,这里使用11277
Prometheus监控多台Docker服务器 - 简书 (jianshu.com)