前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除
一、Docker监控工具
二、容器日志工具docker logs
三、第三方日志工具
四、容器日志驱动
五、示例
5.1、查看容器中运行的进程的信息
5.2、查看容器的资源使用情况
5.3、使用cAdvisor监控容器
5.4、使用Weave Scope监控容器
六、使用docker logs命令查看容器日志
七、配置日志驱动
7.1、配置默认的日志驱动
7.2、配置容器的日志驱动
八、容器日志清理
九、将容器的日志重定向到Linux日志
9.1、将容器日志记录到syslog
9.2、将容器日志记录到journald
十、使用Logspout收集所有容器的日志
10.1、将所有容器的输出路由到远程syslog
10.2、通过HTTP查看Logsput收集的日志
Docker自带监控命令:docker ps、docker top和docker stats等命令(输出的数据比较有限)。
第三方工具:Google的cAdvisor、
Weave Scope是一款开源的故障诊断与监控工具,除Docker外,还可用于Kubernetes集群
Docker自带的docker logs命令输出正在运行的容器的日志信息,而docker service logs命令显示服务中的所有容器的日志信息(这个命令适用于集群环境)。
常用的是由3个开源组件Elasticsearch、Logstash和Kibana组成的ELK日志系统。
- Elasticsearch是分布式搜索引擎;
- Logstash可以对日志进行收集和分析,并将其存储下来供以后使用;
- Kibana可以为Logstash和Elasticsearch提供日志分析Web界面,用来汇总、分析和搜索重要的日志数据。
在ELK日志系统中,Logstash获取Docker中的日志,然后将日志转发给Elasticsearch进行索引,Kibana提供日志的分析和可视化。
Logspout将来自某个主机上的所有容器的所有日志汇集到所需的何目标中。它是一个无状态的容器化程序,并不是用来管理日志文件或查看日志的,主要用于将所在机上容器的日志转发到其他地方。目前它只捕获容器中的程序发送到STDOUT和STDERR的日志。
Docker默认的日志驱动是json-file。在启动容器时可以通过--log-driver选项配置日志驱动。
使用Docker CE时,docker logs 命令只能用于local、json-file和journald日志驱动。
docker top命令查看容器中正在运行的进程的信息,其语法:
容器运行时不一定提供/bin/bash终端来交互执行top命令,而且容器中可能没有top命令
该命令后面的ps选项是指Linux操作系统ps命令的选项,可用于显示特定信息:例如
查看所有正在运行的容器中的进程信息:
docker stats命令实时查看容器的系统资源使用情况,其语法:
主要选项有下:
若不想持续监控容器使用资源情况,可通过--no-stream选项只输出当前的状态:
可以提供容器名称或ID参数查看指定容器的资源使用情况。
通过--format选项自定义输出的内容和格式:
cAdvisor是一个开源软件,可以在主机上以原生程序的方式安装,也可以作为容器运行。
5.3.1、启动两个容器作为测试
5.3.2、创建并启动cAdvisor容器
其中4个 --volume:选项所定义的绑定挂载都不能缺少,否则会无法连接到Docker守护进程;
--publish 8080:8080:示对外暴露8080以提供服务;
--detach:选项表示容器创建以后以分离方式在后台运行,让其自动完成监视功能。
对于运行CentOS或RHEL操作系统的主机来说,应当加上选项(容器中的root才拥有真正的root权限)。
5.3.3、访问cAdvisor监控服务
5.3.4、cAdvisor配置
--storage_duration:历史数据保存的时间,默认为2min
--allow_dynamic_housekeeping:控制cAdvisor如何和何时执行周期性的容器状态收集工作
--global_housekeeping_interval:设置检测是否有新容器的时间周期
--housekeeping_interval:统计每个容器数据的时间周期,默认每1s读取一次数据,选取统计到的最近60个数据
当然还可设置相应的存储驱动以及配置参数将数据导出到数据库。
功能:
- 实时了解容器状态
- 提供内部细节与深度链接
- 支持容器的交互与管理
- 提供插件进程扩展与定制
5.4.1、安装Weave Scope
(1)创建文件夹并上传weave scope二进制文件
scope.bin资源已上传
(2)修改scope.bin文件为可执行文件
(3)执行文件
5.4.2、熟悉Weave Scope操作界面
5.4.4、监控主机
实验完毕,自行恢复实验环境。
对于一个运行中的容器,Docker会将日志发送到容器的STDOUT和STDERR上,可以将STDOUT和STDERR视为容器的控制台终端。
- 如果容器以前台方式运行,日志就会输出到当前的终端端口。
-
如果容器以后台方式运行,使用docker attach连接到后台容器的控制台终端,查看日志(没必要使用)Docker自带的docker logs命令专门查看容器的日志。
其他选项说明如下:
- --details:显示更为详细的日志信息
- --follow(-f):跟踪日志输出
- --since:显示自某个时间开始的所有日志
- --tail:仅列出最新N条容器日志
- --timestamps(-t):显示时间戳
- --until:显示到某个截止时间的所有日志
将daemon.json文件(Linux主机中一般位于/etc/docker目录,Windows中一般位于C:ProgramDataDockerconfig)中的log-driver值设为日志驱动名称即可配置驱动。
如果日志驱动有可配置的选项,则可以在daemon.json文件的关键字log-opts中以JSON格式设置。
获取当前Docker守护进程的默认日志驱动:
启动容器时,通过选项将其匹配成与Docker守护进程使用不同的日志驱动。如果日志驱动有可配置选项,则可通过一个或多个选项(--log-opt<名称>=<值>)进行设置。
容器的日志文件会占据大量的磁盘空间。在Linux中,容器日志一般放在/var/lib/docker/containers/container_id目录下以josn.log结尾的文件中。
这里提供一个shell脚本清理正在运行的容器的日志:
根本上解决日志占用空间问题--限制容器的日志大小上限。在deamon.json配置文件中为Docker守护进程设置日志驱动时,可通过log-opts选项来限制日志大小的上限
对于某个容器的日志大小限制,可以通过Docker Compose配置文件的max-size选项来实现:
- syslog是Linux标配的日志记录工具,rsyslog是syslog的多线程增强版,也是CentOS7默认的日志系统。
- syslog用来收集系统产生的各种日志,日志文件默认放在/var/log目录下。
-
选择syslog作为日志驱动可将日志定向输出到syslog日志系统中,前提是syslog守护进程必须在容器所在Docker主机运行。
默认情况,系统在日志数据中使用容器ID的前12个字符来标识容器。
使用docker logs命令获取redis容器的日志信息,会给出:
journald是一个收集并存储日志数据的systemd日志系统服务,将日志数据存储在带有索引的结构化二进制文件中,便于集中查看和管理,使用journalctl命令查看
选择journald作为日志驱动可将日志定向输出到systemd日志系统中:
Logspout本身是基于Alpine Linux构建的Docker容器。Docker主机启动一个容器运行Logspout服务,Logspout复制将同一主机上其他容器的日志根据路由设置转发给不同的日志接收端。实际中,Logspout通常将所有容器的全部日志发布到Logstash。这里转发到简单的syslog服务器中为例:
将syslog的URL作为命令即可。这里以本机rsyslog服务作为远程syslog服务器。修改配置文件/etc/rsyslog.conf:
这样就运行rsyslog服务在UDP的514端口上接收日志信息了
保存配置,重启rsyslog,然后检查确认514端口已开启
启动louspout容器,将日志转发到Docker主机的syslog服务中
logspout容器要访问守护进程来获取日志信息,因此将Docker主机的UNIX Socket挂载到容器内部
打开一个终端窗口,使用tail工具监控系统日志文件/var/log/messages:
打开另一个窗口,执行以下命令启动一个redis容器
回到tail监控窗口,会发现显示了关于该容器输出的日志信息,再使用docker logs获取redis容器的日志信息,两者完全一致。实验完毕,关闭删除容器。
只需读取HTTP数据流,即可实时查看生成的聚合日志。使用Logspout的HTTP流模块:
打开另一个终端,执行容器操作。切回前面的终端窗口,会发现关于容器操作的日志流,如果收集到多个容器的日志流,则将以不同的颜色显示不同容器的日志
在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。