Docker容器监控

2026-08-17 7
Docker

类型:虚拟化技术

简介:基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器。

随着Docker在网站部署、微服务架构和企业应用中的普及,越来越多的业务开始运行在容器环境中。

相比传统服务器部署方式,Docker可以快速创建和管理应用环境,但随着服务器中运行的容器数量增加,运维人员也面临新的问题:如何快速了解每个容器的资源使用情况?如何定位CPU占用过高、内存不足或网络异常的问题?

虽然Docker自带docker stats命令可以查看实时资源占用,但它无法保存历史数据,也无法生成长期趋势分析。

因此,在生产环境中通常会结合cAdvisor、Prometheus和Grafana搭建完整的容器监控系统:

  • cAdvisor:负责采集Docker容器资源指标;
  • Prometheus:负责存储和查询监控数据;
  • Grafana:负责生成可视化监控面板。

本文将介绍如何部署Docker容器监控环境,实现对容器CPU、内存、网络流量以及运行状态的持续监控,适用于个人服务器、企业应用和Docker化网站部署场景。


Docker容器监控架构

Docker容器监控整体流程如下:

Docker容器

      ↓

cAdvisor

      ↓

Prometheus

      ↓

Grafana

各组件作用:

组件 作用
Docker 运行应用容器
cAdvisor 采集容器资源指标
Prometheus 保存和查询监控数据
Grafana 展示监控图表

通过这套架构,可以实现:

  • 查看每个容器CPU使用情况;
  • 分析内存占用变化;
  • 监控网络流量;
  • 查看容器运行状态;
  • 根据历史数据定位性能问题。

部署环境准备

本文测试环境:

软件 版本
操作系统 Ubuntu 22.04
Docker 29.x
cAdvisor v0.57.0
Prometheus 最新稳定版本
Grafana 最新稳定版本

服务器建议:

  • CPU:2核以上;
  • 内存:4GB以上;
  • 已安装Docker环境。

安装Docker环境

如果服务器尚未安装Docker,可以执行:

apt update

安装Docker:

apt install docker.io -y

启动Docker并设置开机启动:

systemctl enable --now docker

查看Docker状态:

systemctl status docker

查看版本:

docker --version

如果正常返回版本信息,说明Docker安装成功。


创建测试Docker容器

为了验证监控效果,先运行一个测试容器。

启动Nginx容器:

docker run -d \
--name nginx-demo \
--restart unless-stopped \
-p 18080:80 \
nginx:alpine

查看运行中的容器:

docker ps

输出示例:

CONTAINER ID   IMAGE
xxxxxx         nginx:alpine

此时服务器已经运行一个Docker服务,可以通过cAdvisor采集资源数据。


安装并部署cAdvisor

cAdvisor是Google推出的容器监控工具,可以自动收集Docker容器的:

  • CPU使用率;
  • 内存占用;
  • 文件系统使用情况;
  • 网络流量;
  • 容器运行状态。

拉取cAdvisor镜像

执行:

docker pull gcr.io/cadvisor/cadvisor:v0.57.0

启动cAdvisor容器

执行:

docker run -d \
--name cadvisor \
--restart unless-stopped \
-p 18081:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.57.0

参数说明:

参数 作用
-p 18081:8080 映射访问端口
/rootfs 读取宿主机文件系统
/sys 获取系统指标
/var/lib/docker 获取Docker容器数据
privileged 提供必要权限

验证cAdvisor运行状态

查看容器:

docker ps

查看日志:

docker logs cadvisor

测试指标接口:

curl http://127.0.0.1:18081/metrics

如果返回大量监控指标,说明cAdvisor部署成功。

访问:

http://服务器IP:18081

即可查看cAdvisor监控页面。


配置Prometheus采集Docker数据

Prometheus需要配置cAdvisor作为数据来源。

编辑Prometheus配置文件:

vim /etc/prometheus/prometheus.yml

添加:

scrape_configs:

  - job_name: cadvisor

    static_configs:

      - targets:

          - localhost:18081

保存后检查配置:

promtool check config /etc/prometheus/prometheus.yml

如果返回:

SUCCESS

说明配置正确。

重启Prometheus:

systemctl restart prometheus

查看Prometheus监控目标

打开Prometheus页面:

http://服务器IP:9090

进入:

Status → Targets

如果看到:

cadvisor UP

说明Prometheus已经成功采集Docker数据。


常用Docker监控PromQL查询

Prometheus通过PromQL查询容器指标。

查看运行中的容器数量

count(container_last_seen{name!=""})

查看容器CPU使用率

sum by(name)(
rate(container_cpu_usage_seconds_total{name!=""}[5m])
)*100

可以查看不同容器CPU消耗情况。


查看容器内存使用

container_memory_usage_bytes{name!=""}

用于分析:

  • 内存增长;
  • 内存泄漏;
  • 高占用容器。

查看容器网络流量

接收流量:

sum by(name)(
rate(container_network_receive_bytes_total{name!=""}[5m])
)

发送流量:

sum by(name)(
rate(container_network_transmit_bytes_total{name!=""}[5m])
)

使用Grafana创建Docker监控面板

Grafana可以将Prometheus中的数据转换为可视化图表。

安装Grafana后:

  1. 登录Grafana后台;
  2. 添加Prometheus数据源;
  3. 导入Docker监控Dashboard;
  4. 查看容器运行状态。

常见监控指标:

  • CPU使用率;
  • 内存占用;
  • 网络流量;
  • 容器数量;
  • 容器运行时间。

通过Grafana,可以更加直观地观察服务器和容器长期变化趋势。


Docker监控常见问题

cAdvisor启动失败

可能原因:

  • 端口被占用;
  • Docker权限不足;
  • 参数配置错误。

检查端口:

ss -lntp | grep 18081

查看日志:

docker logs cadvisor

Prometheus显示cAdvisor为DOWN

检查cAdvisor是否正常:

curl http://127.0.0.1:18081/metrics

如果无法返回数据:

docker restart cadvisor

重新启动。


Grafana显示大量无用容器数据

Prometheus默认可能采集系统cgroup数据。

查询时增加过滤:

name!=""

即可只显示实际运行的Docker容器。


Docker容器监控的应用场景

Docker监控适用于:

网站服务器

监控:

  • Web容器CPU;
  • 数据库容器内存;
  • 网络访问压力。

SaaS应用

分析:

  • 服务负载;
  • 容器性能;
  • 资源趋势。

AI应用部署

监控:

  • 模型服务资源占用;
  • 推理服务压力;
  • GPU相关资源变化。
  • 广告合作

  • QQ群号:4114653

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。