cAdvisor、Beszel 监控Docker容器

一、cAdvisor(Container Advisor) 

1、简单介绍

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 组件提供的指标采集地址即可。

2、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 容器网络累积传输数据总量(单位:字节)

3、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)

4、部署Grafana

1、docker run

docker run -d --name=grafana -p 3000:3000 -v grafana:/var/lib/grafana grafana/grafana

2、导入Docker容器监控面板,这里使用11277

二、Beszel 

1、什么是Beszel 

Beszel 是一个轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能。

它拥有友好的 Web 界面、简单的配置,并且开箱即用。它支持自动备份、多用户、OAuth 身份验证和 API 访问。

功能

  • 轻量级: 比主要解决方案更小,资源占用更少。
  • 简单: 易于设置,无需公网暴露。
  • Docker 统计: 跟踪每个容器的 CPU、内存和网络使用历史。
  • 警报: 可配置 CPU、内存、磁盘、带宽、温度和状态的警报。
  • 多用户: 用户管理自己的系统。管理员可以在用户之间共享系统。
  • OAuth / OIDC: 支持多种 OAuth2 提供程序。可以禁用密码验证。
  • 自动备份: 从磁盘或 S3 兼容的存储保存和恢复数据。
  • REST API: 在您自己的脚本和应用程序中使用或更新您的数据。

架构

Beszel 由两个主要组件组成:中心 (hub) 和 代理 (agent)。

  • 中心 (hub): 一个基于 PocketBase 构建的 Web 应用程序,提供用于查看和管理连接系统的仪表板。
  • 代理 (agent): 在您要监控的每个系统上运行,创建一个最小的 SSH 服务器以将系统指标传递到中心。

支持的指标

  • CPU 使用率 - 主机系统和 Docker / Podman 容器。
  • 内存使用率 - 主机系统和容器。包括交换分区和 ZFS ARC。
  • 磁盘使用率 - 主机系统。支持多个分区和设备。
  • 磁盘 I/O - 主机系统。支持多个分区和设备。
  • 网络使用率 - 主机系统和容器。
  • 温度 - 主机系统传感器。
  • GPU 使用率 / 温度 / 功耗 - 仅限 Nvidia 和 AMD。必须使用二进制代理。

2、部署

https://beszel.dev/zh/guide/what-is-beszel

1、docker 安装Hub

mkdir -p ./beszel_data && \
docker run -d \
  --name beszel \
  --restart=unless-stopped \
  -v ./beszel_data:/beszel_data \
  -p 8090:8090 \
  henrygd/beszel

2、agent安装

docker run -d \
  --name beszel-agent \
  --network host \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -e KEY="<公钥>" \
  -e PORT=45876 \
  henrygd/beszel-agent:latest

 

 

 

 

 Prometheus监控多台Docker服务器 - 简书 (jianshu.com)

 

 

posted @ 2023-03-29 18:11  凡人半睁眼  阅读(730)  评论(0)    收藏  举报