第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,解决国外镜像拉取慢问题。
逐行解释
-
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 访问与使用
- 浏览器访问地址:http://宿主机IP:8080。
- 首次打开加载较慢,程序需要采集数据绘制监控图表。
- 页面**点击Docker Containers**,** 查看各个容器详细资源监控信息**。
2.4 总结
缺点:操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host。
优点:可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。
结论:把 cAdvisor 定位为一个监控数据收集器,并导出数据给第三方工具,而非展示数据。
本章考点速记
docker ps:查看运行容器;docker top:查看容器内进程;docker stats:实时查看容器CPU/内存/IO资源。docker stats不加内存限制时,显示宿主机总内存,不等于容器可用上限。- 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。
本章简答考点速记
- 容器的日志输出:STDOUT标准输出、STDERR标准错误。
- attach缺点:看不到历史日志;Ctrl+C会终止容器。
- docker logs:查看完整历史日志;
-f实时跟踪日志。