当前位置: 首页 > news >正文

Docker 监控体系总结

Docker 监控体系总结

一、监控背景与必要性

随着线上服务全面容器化,传统物理机监控无法区分单个物理机上多个容器的资源占用情况,无法满足容器化环境下的精细化监控需求,因此需针对性的 Docker 监控方案

二、Docker 自带监控工具

Docker 内置pstopstats三个子命令,适用于快速了解容器实时状态,但存在数据维度有限、无历史数据记录的缺陷

命令功能示例(核心输出)优缺点
docker ps查看当前运行的容器列表展示容器 ID(CONTAINER ID)、镜像(IMAGE)、创建时间(CREATED)、状态(STATUS)等优点:快速查看运行中容器;缺点:仅显示基础状态,无资源数据
docker top [容器名]查看指定容器内运行的进程展示进程 UID、PID、PPID、CMD 等(如 nginx 的 master/worker 进程)优点:定位容器内进程;缺点:仅实时进程信息,无资源占用
docker stats实时显示所有容器资源使用情况包含 CPU 使用率、内存使用 / 可用量、网络 IO、磁盘 IO优点:实时资源数据全面;缺点:无历史趋势,容器未指定内存 limit 时显示主机总内存,易误导

三、主流 Docker 监控解决方案:cAdvisor+Prometheus+Grafana

该组合是目前主流方案,分工明确:cAdvisor 负责数据采集Prometheus 负责数据存储与作为数据源Grafana 负责可视化展示,解决了自带工具无历史数据、展示简陋的问题

(一)组件功能与定位

组件开发方核心功能定位
cAdvisorGoogle(开源)1. 采集 Docker host 和容器两层监控数据;2. 记录历史变化数据;3. 支持将数据导出给第三方工具监控数据收集器(强项:数据采集与导出;弱项:自带展示界面简陋,仅支持单主机监控)
Prometheus最初由 SoundCloud 开发(开源)1. 时间序列数据库,存储 cAdvisor 采集的数据;2. 通过 HTTP 协议周期性抓取被监控组件状态;3. 支持多种 exporter(如 Nginx、MySQL、Linux 系统等)数据源与数据存储中心,适配 Docker/K8s 等虚拟化环境
Grafana开源1. 可视化仪表盘(Dashboard),支持多种数据源;2. 提供丰富图形化选项、日夜模式、自定义布局;3. 直观展示 CPU、内存、IO 等资源趋势前端展示工具,实现监控数据的可视化与多维度分析

(二)组件部署步骤(基于 Docker 部署)

1. cAdvisor 部署
  1. 拉取镜像:docker pull google/cadvisor
  2. 启动容器(挂载主机关键目录,暴露 8080 端口):
docker run -d -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg google/cadvisor
  1. 验证:访问http://[主机IP]:8080/containers/docker,查看 host 和容器监控界面
2. Prometheus 部署
  1. 准备配置文件:

    • 创建目录:mkdir -p /etc/prometheus
    • 编写prometheus.yml(添加 cAdvisor 为数据源,设置抓取间隔 15s):
    global:scrape_interval: 15sevaluation_interval: 15s
    alerting:alertmanagers:- static_configs:- targets:
    rule_files:
    scrape_configs:
    - job_name: 'prometheus'static_configs:- targets: ['localhost:9090']
    - job_name: 'cadvisor'static_configs:- targets: ['[cAdvisor所在主机IP]:8080']
    
    • 授权配置文件:chmod 777 /etc/prometheus/prometheus.yml
    • 时钟同步:systemctl restart chronyd && systemctl enable chronyd(避免时间不一致导致数据异常)
  2. 拉取并启动容器(挂载配置文件,启用远程热加载):

docker pull prom/prometheus
docker run -itd --name=prometheus -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
  1. 验证:访问http://[主机IP]:9090/targets,确认prometheuscadvisor数据源状态为 “UP”
3. Grafana 部署
  1. 拉取并启动容器(暴露 3000 端口):
docker pull grafana/grafana
docker run -itd --name=grafana -p 3000:3000 grafana/grafana
  1. 初始化与配置:
    • 访问http://[主机IP]:3000/login,默认账号密码均为admin,首次登录需重置密码
    • 添加数据源:点击 “Add data source”→选择 “Prometheus”→填写 URL 为http://[Prometheus所在主机IP]:9090→点击 “Save & Test”
    • 导入 Docker 监控仪表盘:点击左侧 “+”→“Import”→输入仪表盘 ID “193”→选择 Prometheus 数据源→点击 “Import”
  2. 验证:导入后即可查看容器 CPU、内存、IO 等资源的可视化监控画面

具体示例:

随着线上服务的全面容器化,对Docker容器的监控就很重要了。传统的监控系统是物理机的监控,在一个物理机跑多个容器的情况 下 , 我 们 是 没 法 从 一 个 监 控 图 表 里 面 区 分 各 个 容 器 的 资 源 占 用 情 况 的 。 为 了 更 好 的 监 控 容 器 运 行 情 况 , 建 议 采 用cAdvisor+Prometheus+Grafana组合进行Docker监控,或者采用cAdvisor+InfluxDB+Grafana组合进行Docker监控。首先我们先学
习Docker自带的几个监控子命令:ps、top和stats。Docker 自带的监控子命令如下:
docker ps是我们早已熟悉的命令了,方便我们查看当前运行的容器,示例如下:

[root@docker ~]# docker ps
CONTAINER ID   IMAGE                                                                          COMMAND                  CREATED          STATUS          PORTS                                                           NAMES
2e53e21f3c58   nginx:latest                                                                   "/docker-entrypoint.…"   28 minutes ago   Up 28 minutes   0.0.0.0:32768->80/tcp, :::32768->80/tcp                         test123
76e7e71eb37f   portainer/portainer                                                            "/portainer"             44 minutes ago   Up 44 minutes   8000/tcp, 9443/tcp, 0.0.0.0:9001->9000/tcp, :::9001->9000/tcp   syportainer
9b7bf30d7fd9   swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/uifd/ui-for-docker:latest   "/ui-for-docker"         3 hours ago      Up 3 hours      0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                       dockerui

如果想知道某个容器中运行了哪些进程,可以执行docker top命令,示例如下:

[root@docker ~]# docker top test123 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                18210               18188               0                   19:30               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 18283               18210               0                   19:30               ?                   00:00:00            nginx: worker process
101                 18284               18210               0                   19:30               ?                   00:00:00            nginx: worker process
101                 18285               18210               0                   19:30               ?                   00:00:00            nginx: worker process
101                 18286               18210               0                   19:30               ?                   00:00:00            nginx: worker process

docker stats用于显示每个容器各种资源的使用情况,示例如下:

[root@docker ~]# docker statsCONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT    MEM %     NET I/O           BLOCK I/O         PIDS
2e53e21f3c58   test123       0.00%     5.238MiB / 3.84GiB   0.13%     656B / 0B         33.4MB / 21.5kB   5
76e7e71eb37f   syportainer   0.02%     22.95MiB / 3.84GiB   0.58%     2.89MB / 6.63MB   0B / 2.84MB       7
9b7bf30d7fd9   dockerui      0.00%     4.012MiB / 3.84GiB   0.10%     39.3kB / 1.25MB   0B / 0B           5

cAdvisor部署
cAdvisor是google开发的容器监控工具,下面部署cAdvisor,示例如下,基于docker部署cAdvisor,对外提供8080服务端口号

[root@docker ~]# docker pull google/cadvisor
Using default tag: latest
latest: Pulling from google/cadvisor
ff3a5c916c92: Pull complete 
44a45bb65cdf: Pull complete 
0bbe1a2fe2a6: Pull complete 
Digest: sha256:815386ebbe9a3490f38785ab11bda34ec8dacf4634af77b8912832d4f85dca04
Status: Downloaded newer image for google/cadvisor:latest
docker.io/google/cadvisor:latest
[root@docker ~]# docker run -itd --name cadvisor -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -v /dev/disk:/dev/disk:ro -p 8080:8080 --detach=true --privileged --device=/dev/kmsg google/cadvisor:latest
5bad33a52a1cb3d28f8fa5466e22ab9dec0cd7f8cafe15b5e4fb0b6aa2aa39bd

部署完毕后,访问http://ip:8080/containers/docker,即可看到监控界面。如图1所示,显示的是
Docker host的监控。如图2所示,显示的是docker容器的监控

在这里插入图片描述

在这里插入图片描述

prometheus部署
基于docker部署Prometheus,需要先编写Prometheus配置文件,将cAdvisor数据源添加进来,然后做好时钟同步,示例如下:

[root@docker ~]# mkdir /etc/prometheus
[root@docker ~]# cd /etc/prometheus/
[root@docker prometheus]# vim prometheus.yml
global:scrape_interval: 15sevaluation_interval: 15s
alerting:alertmanagers:- static_configs:- targets:
rule_files:
scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'cadvisor'static_configs:- targets: ['192.168.100.10:8080']
~  
~  
[root@docker prometheus]# chmod 777 prometheus.yml 
[root@docker prometheus]# systemctl restart chronyd
[root@docker prometheus]# systemctl enable chronyd
Created symlink from /etc/systemd/system/multi-user.target.wants/chronyd.service to /usr/lib/systemd/system/chronyd.service.
[root@docker prometheus]# hwclock -w

部署Prometheus,将编辑好的文件映射到容器中,启动时加上–web.enable-lifecycle的作用是启用远程热加载配置文件,在修改prometheus配置文件后不用重启容器即可生效

[root@docker ~]# docker pull prom/prometheus
Using default tag: latest
latest: Pulling from prom/prometheus
9fa9226be034: Pull complete 
1617e25568b2: Pull complete 
15e2cd5823b3: Pull complete 
d14d9311398e: Pull complete 
4314b14247f8: Pull complete 
03def9af9150: Pull complete 
7dc70dd519ad: Pull complete 
92fd369f57f0: Pull complete 
0357ac67262f: Pull complete 
e9fa37e588a8: Pull complete 
Digest: sha256:76947e7ef22f8a698fc638f706685909be425dbe09bd7a2cd7aca849f79b5f64
Status: Downloaded newer image for prom/prometheus:latest
docker.io/prom/prometheus:latest
[root@docker ~]# docker run -itd --name prometheus -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
2fe2e9bfc663eac343a3b36f53f93f578595c8f7b49346109c997845d15297ec
[root@docker ~]# docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS                                       NAMES
2fe2e9bfc663   prom/prometheus:latest   "/bin/prometheus --c…"   4 seconds ago   Up 3 seconds   0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   prometheus

如图所示,部署完毕后,访问http://ip:9090/targets,可以看到两个数据源已经UP,其中一个就是cAdvisor:

在这里插入图片描述

Grafana部署
Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源。其项目官方地址为https://grafana.com
基于Daocker部署Grafana,示例如下:

[root@docker ~]# docker pull grafana/grafana
Using default tag: latest
latest: Pulling from grafana/grafana
9824c27679d3: Pull complete 
f28af41ca6c1: Pull complete 
08b443d0d1f0: Pull complete 
01a7b2849125: Pull complete 
b24c04af690f: Pull complete 
f04b4ef9a69c: Pull complete 
0a5ad0679b58: Pull complete 
41d23bd5dd1c: Pull complete 
ef84c8d2bf22: Pull complete 
f671127533d7: Pull complete 
Digest: sha256:74144189b38447facf737dfd0f3906e42e0776212bf575dc3334c3609183adf7
Status: Downloaded newer image for grafana/grafana:latest
docker.io/grafana/grafana:latest
[root@docker ~]# docker run -itd --name grafana -p 3000:3000 grafana/grafana
e1ecb131b7abe95cfb4d33bcc6c32a642b6d425df7be0b29f876a85dcaf8966c

部署完毕后,访问http://ip:3000/login,默认账号密码都是admin,如图所示。接下来Grafana会强制用户重新设置登陆密码,如图所示:

在这里插入图片描述

在这里插入图片描述

如图所示,登陆成功后,点击Add data source,创建数据源。或者点击左侧设置图标,也可以创建数据源:

在这里插入图片描述

如图所示,点击第一个Prometheus:

在这里插入图片描述

如图所示,填写数据源信息,在URL填写http://ip:9090,点击Save & Test:

在这里插入图片描述

如图所示,添加仪表盘,鼠标移到左侧的加号位置,点击Import,输入ID号:193:

在这里插入图片描述

在这里插入图片描述

如图所示,点击空白处,就会自动从Grafana官网下载所对应的仪表盘,在prometheus处,选择数据源,点击Import:

在这里插入图片描述

接下来既可以看到docker容的监控画面,会显示每个容器对CPU、内存和IO的使用情况,如图所示:

在这里插入图片描述

四、关键注意事项与总结

  1. 核心结论:cAdvisor+Prometheus+Grafana 是 Docker 监控的优选方案,弥补了自带工具的不足,实现 “采集 - 存储 - 展示” 全流程监控
  2. 组件分工:cAdvisor(采集)、Prometheus(存储)、Grafana(展示),需明确各组件定位,确保部署配置正确
  3. 常见问题:若 Grafana 无数据,优先检查 Docker host 与本地机器的时间同步(需通过chronyd确保时间一致)
  4. 监控价值:帮助 Linux 系统工程师实时掌握容器运行状态,通过历史数据分析容器资源趋势,保障容器化服务稳定运行
http://www.dtcms.com/a/483909.html

相关文章:

  • 公司网站标题优化网站建设运营规划
  • 台州cms建站系统网站建设要注意哪些问题
  • 杭州网站推广方式建设官网站
  • 地形匹配导航技术
  • 网站的图书资源建设wordpress 5.0.2 中文
  • 二分查找模板全集
  • FPGA基础 -- cocotb仿真之任务调度cocotb.start_soon与asyncio的使用注意事项
  • 图片生成网站建站之星多语言
  • 镇江牛吧企业网站建设与推广公司谷歌推广新手教程
  • 免费扑克网站域名查询官网入口
  • Grafana图表与电话交换机的结合
  • 【vue】NoticeBar:滚动通知栏组件手动实现(内容、速度、循环间隔可配置)
  • 绘制网站地图施工企业的施工生产计划与建设
  • 电子商务平台网站建造温州网站开发定制
  • 永康市网站建设关键词排名优化网站建设公司哪家好
  • 花卉网站建设的总结与杂志制作 wordpress主题
  • 外卖网站那家做的好个人网站设计论文范文
  • 【数位dp】3704. 统计和为 N 的无零数对|2419
  • 快速学制作网站株洲seo优化公司
  • 【Datawhale组队学习】math-for-ai TASK01
  • 个人网站主页模板wp用户前端化专业版wordpress插件[中英双语]
  • 看设计比较好的网站在线装修设计平台
  • 网站建设目标分析学校网站建设工作方案
  • 【Linux】Linux驱动开发与BSP开发:嵌入式系统的两大基石
  • 郑州机械网站建设张家港网站制作服务
  • 动叫建个网站刷排名郑州高端做网站
  • 波矢 行波 和 相速度推导
  • LeetCode算法日记 - Day 72: 下降路径最小和、珠宝的最高价值
  • 天津专业智能建站wordpress 转换app
  • 周口市住房和城乡建设局门户网站wordpress邮件服务器怎么设置