docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解

第7章 容器监控

摘要 :本章讲解 Docker 容器监控与日志两大主题。监控方面,一是 Docker 自带的监控子命令(docker ps 查看运行容器、docker top 查看容器内进程、docker stats 实时查看资源使用率);二是 Google 开发的 cAdvisor 可视化监控工具,通过挂载宿主机目录、开放 8080 端口收集宿主机与所有容器的资源数据,并导出给第三方工具进一步加工处理。日志方面,首先介绍容器日志概述(STDOUT/STDERR 标准输出与错误),然后对比前台与后台运行容器的日志区别,接着介绍两种查看后台容器日志的方式:docker attach(实时查看新日志,但看不到历史日志且退出麻烦)和 docker logs(推荐使用,可打印容器启动以来的全部完整日志,-f 参数实时跟踪)。文末附两章考点速记。

1、Docker自带监控子命令

背景:Docker集群规模变大之后,需要可视化监控容器性能、健康状态。

1.1 docker ps

作用:查看当前正在运行的容器。

输出字段:容器ID、镜像、启动命令、创建时间、状态、端口映射、容器名称。

1.2 docker top

作用:查看容器内部运行的进程。

语法:**docker top 容器名/容器ID **

  • 别名:docker container top
  • 支持追加Linux ps命令参数,例如==docker top sshtest -au ==,查看进程详细信息(用户、CPU、内存等)。
  • 输出:UID、PID、PPID、启动时间、命令等进程信息。

1.3 docker stats

作用:实时**列出容器资源使用率**(CPU、内存、网络IO、磁盘IO)。

语法:docker stats 选项 容器名/ID

常用选项:

  • -a / --all:展示所有容器(默认只展示运行中的容器)
  • --no-stream:只输出一次结果,不持续实时刷新
  • --no-trunc:不截断容器ID
  • --format:自定义输出格式,支持table、json模板

输出内容:容器ID、名称、CPU使用率、内存使用/内存限制、内存占比、网络收发、磁盘读写、进程数量PIDS。

重要考点:容器启动未指定内存limit限制时,stats会显示宿主机内存总量,不代表容器可以使用全部宿主机内存。


2、cAdvisor监控工具

2.1 简介

cAdvisor是Google开发的**容器可视化监控工具**。

2.2 启动cAdvisor容器命令

bash 复制代码
[root@docker ~]# docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest

备选国内镜像:hub.c.163.com/xbingo/cadvisor:latest,解决国外镜像拉取慢问题。

逐行解释
  1. docker run:创建并启动容器

复制代码
   --volume=/:/rootfs:ro
  • --volume(简写 -v):数据卷挂载,格式 宿主机路径:容器内路径:权限
  • /:宿主机根目录
  • /rootfs:容器里的挂载点
  • ro = read-only 只读权限
  • 作用:让cAdvisor读取宿主机根文件系统,用来采集硬件信息;只读防止修改宿主机文件。
复制代码
   --volume=/var/run:/var/run:rw
  • rw = read-write 读写权限
  • /var/run:存放系统运行时socket文件(docker的socket就在这里)
  • 作用:cAdvisor要和Docker引擎通信,获取容器列表;必须读写。
复制代码
   --volume=/sys:/sys:ro
  • 挂载宿主机/sys目录(系统硬件、内核信息目录),只读
  • 作用:读取CPU、内存、硬件传感器数据,用于监控指标。
复制代码
   --volume=/var/lib/docker/:/var/lib/docker:ro
  • 挂载Docker的数据目录,只读
  • 作用:读取容器磁盘占用、存储层信息。
复制代码
   --publish=8080:8080

(简写 -p)

  • 端口映射:宿主机端口:容器内端口
  • 宿主机8080端口映射容器8080端口
  • 访问:浏览器 http://宿主机IP:8080 打开cAdvisor监控页面。
复制代码
   --detach=true

简写 -d)

  • 后台守护进程运行容器,不占用终端。
复制代码
   --name=cadvisor
  • 给容器命名为 cadvisor,后续操作(stop/logs)直接用这个名字。
复制代码
   google/cadvisor:latest
  • 使用镜像:google/cadvisor,latest代表最新版本。

总结:后台启动cAdvisor监控容器,挂载宿主机多个系统目录(大部分只读,仅/var/run读写),开放8080端口,用来收集宿主机与所有容器的资源监控数据。

2.3 访问与使用

  1. 浏览器访问地址:http://宿主机IP:8080。
  2. 首次打开加载较慢,程序需要采集数据绘制监控图表。
  3. 页面**点击Docker Containers**,** 查看各个容器详细资源监控信息**。

2.4 总结

缺点:操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host。

优点:可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。

结论:把 cAdvisor 定位为一个监控数据收集器,并导出数据给第三方工具,而非展示数据。

本章考点速记

  1. docker ps:查看运行容器;
  2. docker top:查看容器内进程;
  3. docker stats:实时查看容器CPU/内存/IO资源。
  4. docker stats不加内存限制时,显示宿主机总内存,不等于容器可用上限。
  5. cAdvisor:谷歌开发容器可视化监控,部署成容器,网页8080端口访问。

第8章 容器日志

1、容器日志概述

日志、监控对保障系统稳定运行、故障排查至关重要。

微服务架构下容器数量多、生命周期短;容器销毁后日志容易丢失,集中式日志管理系统是生产环境必备组件。

对于一个运行的容器,Docker 会将日志发送到 容器标准输出设备(STDOUT)和标准错误设备(STDERR),STDOUT 和 STDERR 实际上就是容器的控制台终端。

2、容器前台、后台运行日志区别

  • 前台启动容器(不加 -d) :docker run -p 80:80 httpd,日志直接打印在当前终端。

  • 后台守护式启动容器(加 -d) :docker run -d -p 80:80 httpd,终端看不到实时输出。

后台容器查看日志有两种方式:docker attach 和 docker logs。

3、docker attach

作用:连接到正在运行的容器,实时查看新产生日志。

缺点:

① 只能看到attach连接之后 新产生的日志,容器历史旧日志看不到。

② 退出操作麻烦:需要快捷键 Ctrl+p 然后 Ctrl+q ;如果直接按Ctrl+C,会把容器直接停止。

4、docker logs(推荐使用)

作用:打印容器从启动以来全部完整日志。

常用参数:-f 持续跟踪实时日志,效果等同于Linux tail -f。

对比:docker logs 优于attach,生产环境排查日志优先使用docker logs。

本章简答考点速记

  1. 容器的日志输出:STDOUT标准输出、STDERR标准错误。
  2. attach缺点:看不到历史日志;Ctrl+C会终止容器。
  3. docker logs:查看完整历史日志;-f实时跟踪日志。
相关推荐
派小心.2 分钟前
多端数据分析平台的漏斗可以跨端搭建吗?5 步搭出跨端转化漏斗
大数据·运维·服务器·前端·数据分析
芷栀夏6 分钟前
极空间部署Photopea:Docker运行、网页修图与多设备使用
运维·docker·容器
见闻小天地11 分钟前
数据中心柴发出口保护怎么选?Emax 与 Tmax XT 的定位与分工
大数据·运维·人工智能·业界资讯
暖核19 分钟前
Redis 从基础到集群实战:数据类型、客户端、高可用架构完整梳理
数据库·redis·架构
迈威通信25 分钟前
迈威 MISCOM8212GP-4XGF-8GTPoE90-DC48 接入层实践:高密度 PoE++ 与万兆上行的整合方案
运维·网络·信息与通信
小小的木头人26 分钟前
CentOS 7.9 离线安装 NVIDIA Container Toolkit:1.14.0 与 1.20.1 两种版本方案
linux·运维·centos
FfHUCisI28 分钟前
pprof 火焰图(Flame Graph)阅读与热点代码重构实战
架构·golang
哭哭啼30 分钟前
Linux 资源紧缺模拟:CPU、内存、磁盘与文件描述符压力测试
linux·运维·压力测试
酒神dnspup41 分钟前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
mldong1 小时前
审批详情页高亮的那个节点,"名字"其实是一串 id:jeeflow 工作流引擎的四块数据来源
后端·架构