cadvisor 容器安装部署

tags: exporters

在这里插入图片描述

1. 介绍

cAdvisor 是谷歌公司用来分析运行中的Docker容器的资源占用以及性能特性的工具.

cAdvisor部署为一个运行中的daemon,它会收集、聚集、处理并导出运行中容器的信息。这些信息能够包含容器级别的资源隔离参数、资源的历史使用状况、反映资源使用和网络统计数据完整历史状况。对docker的监控能力非常强大。

cAdvior功能已经被集成到了kubelet组件中,也就是说,安装好kubernetes后,cAdvisor就已经安装到了每一个计算节点上。

2. 原理

使用GrafanaPrometheuscAdvisor来建立仪表板监控系统。仪表板用于研究服务器实例、它们的正常运行时间、异常、错误和上下文场景等。

所有数据都显示在自定义 Grafana 仪表板上,从仪表板触发查询,该仪表板命中 Prometheus,该仪表板作为数据源插入 Grafana。

容器信息从 cAdvisor 流入 Prometheus。

下图显示了这些开源工具之间的数据流,一种基于 Grafana、Prometheus、cAdvisor 的仪表板监控架构流。有关如何部署 Grafana 的更多信息,请阅读此处
在这里插入图片描述

3. 部署

3.1 容器部署

#存储对接influxdb

#存储对接influxdb
$ docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -p 8083:8080 -p 8082:8082 --detach=true  --name cadvisor google/cadvisor:canary -storage_driver=influxdb -storage_driver_index="cadvisor" -storage_driver_host=influxsrv:8086


$ docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=9101:8080 \
--detach=true \
--name=cadvisor \
--restart=always \
local.harbor.io/google-containers/cadvisor:latest

注意:
服务起不来如何解决?

$ mount -o remount,rw '/sys/fs/cgroup'
$ ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu

它也可以与 Canary 一起运行。以下是详细信息。

此外,该工具是一个没有外部依赖的静态 Go 二进制文件。如果我们愿意,我们可以独立运行它。运行时行为可以通过一系列标志来控制。

cAdvisor 还定期执行一些内务管理。使用这些标志,我们可以控制工具执行任务的方式和时间。

3.2 docker-compose 部署

创建一个docker-compose.yml文件

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
    depends_on:
    - redis
  redis:
    image: redis:latest
    container_name: redis
    ports:
    - 6379:6379

此配置指示 Docker Compose 运行三个服务,每个服务对应一个Docker容器:

  • prometheus服务使用本地prometheus.yml配置文件(通过参数导入到容器中volumes)。
  • cadvisor服务公开端口 8080(cAdvisor 指标的默认端口)并依赖于各种本地卷(/、、/var/run等)。
  • redis服务是一个标准的 Redis 服务器。cAdvisor 将自动从该容器收集容器指标,即无需任何进一步配置。

运行安装:

$ docker-compose up

#查看容器状态
$ docker-compose ps
 Name                 Command               State           Ports
----------------------------------------------------------------------------
cadvisor     /usr/bin/cadvisor -logtostderr   Up      8080/tcp
prometheus   /bin/prometheus --config.f ...   Up      0.0.0.0:9090->9090/tcp
redis        docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp

4. 探索 cAdvisor Web UI

您可以访问 cAdvisor Web UI ,网址为http://localhost:8080。您可以在我们的安装中探索特定 Docker 容器的统计信息和图表http://localhost:8080/docker/<container>。例如,Redis 容器的指标可以在http://localhost:8080/docker/redis、Prometheus:http://localhost:8080/docker/prometheus等处访问。cAdvisor 收集的数据可以在其端口公开的基于 Web 的 UI的帮助下进行查看。

它还通过REST API公开其数据

通常,返回的容器信息是容器名称、子容器列表、容器规格、容器最近 N 秒的详细使用统计、资源使用直方图等。

返回的机器信息是可调度逻辑核心 CPU 的数量、内存容量(以字节为单位)、支持的最大 CPU 频率、可用文件系统、网络设备、机器拓扑 - 节点、核心、线程等。

5. promethues 配置 cadvisor

  - job_name: "cadvisor"
    static_configs:
    - targets:
      - '192.168.1.120:9101'

或者:

scrape_configs:
- job_name: cadvisor
  scrape_interval: 5s
  static_configs:
  - targets:
    - cadvisor:8080

6. cadvisor metrics

container_start_time_seconds指标开始,该指标记录容器的启动时间(以秒为单位)。name="<container_name>"您可以使用表达式按名称选择特定容器。容器名称对应container_name,Docker Compose 配置中的参数。container_start_time_seconds{name="redis"}例如,表达式显示容器的开始时间redis。

cadvisor metrics 列表:

process_virtual_memory_bytes 1.42579712e+09
process_start_time_seconds 1.66521371663e+09
process_resident_memory_bytes 6.3102976e+07
process_open_fds 14
process_max_fds 1.048576e+06
process_cpu_seconds_total 53.33
machine_memory_bytes 8.181809152e+09
machine_cpu_cores 4
go_threads 19
go_memstats_sys_bytes 7.2349944e+07
go_memstats_stack_sys_bytes 1.671168e+06
go_memstats_stack_inuse_bytes 1.671168e+06
go_memstats_other_sys_bytes 727622
go_memstats_next_gc_bytes 2.8742496e+07
go_memstats_mspan_sys_bytes 458752
go_memstats_mspan_inuse_bytes 423016
go_memstats_mcache_sys_bytes 16384
go_memstats_mcache_inuse_bytes 6912
go_memstats_mallocs_total 5.109018e+06
go_memstats_lookups_total 0
go_memstats_last_gc_time_seconds 1.6652145196693025e+09
go_memstats_heap_sys_bytes 6.5437696e+07
go_memstats_heap_released_bytes 0
go_memstats_heap_objects 182977
go_memstats_heap_inuse_bytes 2.0832256e+07
go_memstats_heap_idle_bytes 4.460544e+07
go_memstats_heap_alloc_bytes 1.5082544e+07
go_memstats_gc_sys_bytes 2.482176e+06
go_memstats_gc_cpu_fraction 0.0004565680065549785
go_memstats_frees_total 4.926041e+06
go_memstats_buck_hash_sys_bytes 1.556146e+06
go_memstats_alloc_bytes_total 9.62135304e+08
go_memstats_alloc_bytes 1.5082544e+07
go_goroutines 91
go_gc_duration_seconds_sum 0.097979934
go_gc_duration_seconds_count 115
go_gc_duration_seconds
container_tasks_state
container_start_time_seconds
container_spec_memory_swap_limit_bytes
container_spec_memory_reservation_limit_bytes
container_spec_memory_limit_bytes
container_spec_cpu_shares
container_spec_cpu_period
container_scrape_error 0
container_network_transmit_packets_total
container_network_transmit_packets_dropped_total
container_network_transmit_errors_total
container_network_transmit_bytes_total
container_network_receive_packets_total
container_network_receive_packets_dropped_total
container_network_receive_errors_total
container_network_receive_bytes_total
container_memory_working_set_bytes
container_memory_usage_bytes
container_memory_swap
container_memory_rss
container_memory_max_usage_bytes
container_memory_mapped_file
container_memory_failures_total
container_memory_failcnt
container_memory_cache
container_last_seen
container_fs_writes_total
container_fs_writes_merged_total
container_fs_write_seconds_total
container_fs_writes_bytes_total
container_fs_usage_bytes
container_fs_sector_writes_total
container_fs_sector_reads_total
container_fs_reads_total
container_fs_reads_merged_total
container_fs_read_seconds_total
container_fs_reads_bytes_total
container_fs_limit_bytes
container_fs_io_time_weighted_seconds_total
container_fs_io_time_seconds_total
container_fs_io_current
container_fs_inodes_total
container_fs_inodes_free
container_cpu_user_seconds_total
container_cpu_usage_seconds_total
container_cpu_system_seconds_total
container_cpu_load_average_10s
cadvisor_version_info

promSQL表达式

ExpressionDescriptionFor
rate(container_cpu_usage_seconds_total{name=“redis”}[1m])cgroup在最后一分钟的 CPU使用率redis容器_
container_memory_usage_bytes{name=“redis”}cgroup 的总内存使用量(以字节为单位)redis容器_
rate(container_network_transmit_bytes_total[1m])容器在最后一分钟每秒通过网络传输的字节数所有容器
rate(container_network_receive_bytes_total[1m])容器在最后一分钟每秒通过网络接收的字节数所有容器

参考:

Logo

开源、云原生的融合云平台

更多推荐