Docker快速入门-第11章 日志管理
📜 第11章 日志管理
11.1 查看引擎日志
在CentOS系统中,Docker引擎日志通常由systemd管理。可以使用以下命令查看日志:
bash
Copy
journalctl -u docker.service
11.2 查看容器日志
容器日志通常指容器的标准输出。在容器启动失败或其他场景下,可以通过控制台查看容器日志,以帮助定位相关问题。
使用docker logs命令
可以使用docker logs命令查看容器的日志,命令格式如下:
bash
Copy
docker logs [OPTIONS] CONTAINER
参数选项说明:
选项 说明
–details 显示更多信息。
-f, --follow 跟踪实时日志。
–since string 显示自某个时间戳之后的日志,或相对时间。
–tail string 从日志末尾显示指定行数的日志,默认全部显示。
-t, --timestamps 显示时间戳。
–until string 显示自某个时间戳之前的日志,或相对时间。
11.3 清理容器日志
如果Docker容器正在运行中,使用rm -rf命令删除日志文件后,通过df -h会发现磁盘空间并没有释放。这是因为在Linux或Unix系统中,通过rm -rf命令删除文件仅从文件系统的目录结构上解除链接(unlink),如果文件仍被打开(至少有一个进程在使用),进程将继续可以读取该文件,磁盘空间仍然被占用。
正确的日志清理方法
可以使用以下命令清理日志:
bash
Copy
cat /dev/null > *-json.log
当然,也可以通过rm -rf删除后再重启Docker。
日志清理脚本示例
bash
Copy
#!/bin/sh
echo “======== docker containers logs file size ========”
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
11.4 日志驱动程序
11.4.1 日志驱动概述
Docker日志驱动程序有以下几种类型:
日志驱动 说明
none 运行的容器没有日志,docker logs命令不返回任何输出。
local 日志以自定义格式存储,旨在实现最低开销。
json-file 日志格式为JSON,Docker的默认日志记录驱动程序。
syslog 将日志消息写入syslog,syslog守护程序必须在主机上运行。
journald 将日志消息写入journald,journald守护程序必须在主机上运行。
gelf 将日志消息写入Graylog扩展日志格式(GELF)端点。
fluentd 将日志消息写入fluentd(转发输入)。
awslogs 将日志消息写入Amazon CloudWatch Logs。
splunk 使用HTTP事件收集器将日志消息写入splunk。
etwlogs 将日志消息写为Windows事件跟踪(ETW)事件,仅适用于Windows平台。
gcplogs 将日志消息写入Google Cloud Platform(GCP)Logging。
logentries 将日志消息写入Rapid7 Logentries。
11.4.2 local日志驱动
local日志驱动记录从容器的STDOUT/STDERR输出,并写到主机硬盘。默认情况下,local日志驱动为每个容器保留100M的日志信息,并启用压缩以节省空间。
配置选项 说明
max-size 切割之前日志的最大大小,默认为20M。
max-file 可以存在的最大日志文件数,默认为5。
compress 是否启用压缩,默认启用。
11.4.3 json-file日志驱动
json-file日志驱动记录从容器的STDOUT/STDERR输出,并用JSON格式写到文件中。
日志路径为:
text
Copy
/var/lib/docker/containers/容器ID/容器ID-json.log
11.4.4 syslog日志驱动
syslog日志驱动将日志路由到syslog服务器,接收方可以提取以下消息元数据:
消息元数据类型 说明
level 日志等级(debug、warning等)。
timestamp 时间戳。
hostname 事件发生的主机。
facility 系统模块。
process name 进程名称和进程ID。
修改全局日志驱动为syslog的示例配置:
json
Copy
{
“log-driver”: “syslog”,
“log-opts”: {
“syslog-address”: “udp://1.2.3.4:1111”
}
}
11.4.5 日志驱动的选择
Docker官方提供的日志驱动主要用于收集容器的STDOUT/STDERR输出的日志。容器中的日志可分为两类:
标准输出STDOUT/STDERR日志:这类日志可以通过Docker官方的日志驱动进行收集。例如,NGINX的日志有access.log和error.log,Docker Hub上可看到Nginx的Dockerfile对这两个日志的处理方式为:
bash
Copy
RUN ln -sf /dev/stdout /var/log/nginx/access.log
&& ln -sf /dev/stderr /var/log/nginx/error.log
这两个日志文件都是软链接到/dev/stdout和/dev/stderr。