Docker从json-file到syslog的集中化管理实战指南

 更新时间:2025年12月30日 11:21:37   作者:酒城译痴无心剑  
本次实战通过对比 json-file 与 syslog 两种日志驱动,演示了 Docker 容器日志的本地存储与系统日志集成方式,并成功将默认日志驱动全局配置为 syslog,实现日志集中化管理,感兴趣的朋友跟随小编一起看看吧

1. 实战概述

  • 本次实战通过对比 json-filesyslog 两种日志驱动,演示了 Docker 容器日志的本地存储与系统日志集成方式,并成功将默认日志驱动全局配置为 syslog,实现日志集中化管理。

2. 实战步骤

2.1 使用默认日志驱动 - json-file

2.1.1 查看日志驱动

执行命令:docker info | grep -i logging

结果说明:当前 Docker 日志驱动为 json-file,表示容器日志以 JSON 格式写入本地文件(如 /var/lib/docker/containers/<id>/<id>-json.log),可通过 docker logs 查看。未启用 syslog 或其他远程日志驱动。

2.1.2 启动测试容器

执行命令

docker run -d \
  --name testlog1 \
  --log-opt tag="testlog1" \
  busybox \
  sh -c 'i=1; while true; do echo "Message $((i++)) from testlog1"; sleep 1; done'

结果说明:已成功启动名为 testlog1 的容器,使用默认日志驱动(json-file),并设置日志标签为 testlog1。容器内执行循环脚本,持续输出消息至 stdout,日志将被 Docker 捕获并存储在本地文件中。

2.1.3 查看日志信息

查看前3条日志

执行命令:docker logs testlog1 | head -3

结果说明:通过 docker logs testlog1 | head -3 成功获取容器 testlog1 的前 3 条日志,显示初始输出内容为 “Message 1 from testlog1” 至 “Message 3 from testlog1”,验证了日志可正常读取并按需截取。

查看指定时间范围内的日志

执行命令:docker logs -f --since="2025-12-29T10:23:19" --until="2025-12-29T10:23:25" testlog1

结果说明:成功获取容器 testlog1 在指定时间范围(2025-12-29T10:23:19 至 10:23:25)内的日志,共输出 6 条消息,显示日志按时间筛选功能正常,且容器持续运行并产生日志。

查看最后3条日志

执行命令:docker logs --tail 3 testlog1

结果说明:成功使用 docker logs --tail 3 testlog1 获取容器 testlog1 的最后 3 条日志,输出显示为 Message 980 至 982,验证了日志尾部内容可正常查看,符合预期。

2.1.4 查看日志文件路径

执行命令:docker inspect testlog1 | grep -i LogPath

结果说明:容器 testlog1 的日志路径为 /var/lib/docker/containers/.../json.log,表明使用默认 json-file 日志驱动,日志以 JSON 格式存储在本地文件中,可通过 docker logs 查看。

2.1.5 查看日志文件内容

执行命令:cat /var/lib/docker/containers/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55-json.log | head -3

结果说明:查看了容器 testlog1 的日志文件,内容为 JSON 格式,包含每条日志的输出内容、时间戳和标签(tag),验证了默认 json-file 日志驱动将 stdout/stderr 写入本地文件,且数据结构完整。

2.2 使用非默认日志驱动 - syslog

2.2.1 确保rsyslog启用imuxsock

执行命令:sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf

结果说明:执行 sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf 命令,成功将 /etc/rsyslog.conf 中以 # 开头的 imuxsock 模块行取消注释,使其启用,以便接收 Docker 通过 Unix socket 发送的日志。

执行命令:systemctl restart rsyslog

结果说明:执行 systemctl restart rsyslog 成功重启 rsyslog 服务,使配置文件中的修改(如启用 imuxsock 模块)生效,确保 Docker 日志可通过 syslog 驱动正常发送并记录。

2.2.2 启动测试容器

执行命令

docker run -d \
  --name testlog2 \
  --log-driver=syslog \
  --log-opt tag="testlog2" \
  busybox \
  sh -c 'i=1; while true; do echo "Message $((i++)) from testlog2"; sleep 1; done'

  • 结果说明:成功启动名为 testlog2 的容器,使用 syslog 日志驱动,并设置标签为 testlog2,容器内执行循环脚本持续输出日志,日志将通过 syslog 发送到系统日志服务(如 rsyslog),不再写入本地文件。

2.2.3 查看日志信息

查看前3条日志

执行命令:docker logs testlog2 | head -3

结果说明:通过 docker logs testlog2 | head -3 成功获取容器 testlog1 的前 3 条日志,显示初始输出内容为 “Message 1 from testlog2” 至 “Message 3 from testlog2”,验证了日志可正常读取并按需截取。

查看指定时间范围内的日志

执行命令:docker logs -f --since="2025-12-29T10:56:19" --until="2025-12-29T10:56:25" testlog2

结果说明:成功获取容器 testlog2 在指定时间范围(2025-12-29T10:56:19 至 10:56:25)内的日志,共输出 6 条消息,显示日志按时间筛选功能正常,且容器持续运行并产生日志。

查看最后3条日志

执行命令:docker logs --tail 3 testlog2

结果说明:成功使用 docker logs --tail 3 testlog1 获取容器 testlog1 的最后 3 条日志,输出显示为 Message 253 至 255,验证了日志尾部内容可正常查看,符合预期。

2.2.4 查看日志文件路径

执行命令:docker inspect testlog2 | grep -i LogPath

结果说明:容器 testlog2LogPath 为空,表明其使用了非默认日志驱动(如 syslog),日志不写入本地文件,而是通过 syslog 驱动发送至系统日志服务,符合预期配置。

执行命令:grep testlog2 /var/log/messages

结果说明:通过 grep testlog2 /var/log/messages 成功查到容器 testlog2 的日志输出,显示其日志已通过 syslog 驱动正确发送至系统日志文件,每条日志包含标签、进程号和消息内容,验证了 syslog 日志驱动配置生效。

2.3 修改默认日志驱动

2.3.1 设置默认日志驱动

执行命令:vim /etc/docker/daemon.json,编辑Docker守护进程配置文件

结果说明:配置文件中设置默认日志驱动为 syslog,并指定设施为 local0,标签格式为容器名与ID组合,实现容器日志统一通过 syslog 输出,便于集中管理和监控。

2.3.2 重载并重启Docker

执行命令:systemctl daemon-reload

执行命令:systemctl restart docker

2.3.3 启动测试容器

执行命令

docker run -d \
  --name testlog3 \
  --log-opt tag="testlog3" \
  busybox \
  sh -c 'i=1; while true; do echo "Message $((i++)) from testlog3"; sleep 1; done'

结果说明:成功启动名为 testlog3 的容器,使用默认日志驱动(syslog),并设置标签为 testlog3,容器内执行循环脚本持续输出日志,日志通过 syslog 驱动发送至系统日志服务,验证了默认配置生效。

2.3.4 检查容器采用的日志驱动

执行命令:docker inspect testlog3 --format='容器采用的日志驱动:{{.HostConfig.LogConfig.Type}}'

结果说明:容器 testlog3 采用的日志驱动为 syslog,表明其日志已通过 syslog 驱动输出至系统日志服务,验证了 Docker 默认日志驱动配置成功生效。

2.3.5 查看日志文件内容

执行命令:grep testlog3 /var/log/messages,查看日志文件/var/log/messages里包含testlog3的条目

3. 实战总结

  • 本次实战系统验证了 Docker 日志驱动的两种典型使用场景:默认的 json-file 驱动将日志以 JSON 格式保存在本地文件中,支持 docker logs 查看;而 syslog 驱动则将日志转发至系统日志服务(如 rsyslog),适用于集中日志管理。通过启用 rsyslog 的 imuxsock 模块,确保容器日志能正确写入 /var/log/messages。最终,通过配置 /etc/docker/daemon.json 将默认日志驱动设为 syslog,并验证新容器自动继承该配置。整个过程完整展示了从单容器日志定制到全局策略部署的运维实践,为生产环境日志规范化奠定了基础。

到此这篇关于Docker实战:从json-file到syslog的集中化管理的文章就介绍到这了,更多相关docker json-file到syslog管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker容器无法解析域名的处理

    Docker容器无法解析域名的处理

    这篇文章主要介绍了Docker容器无法解析域名的处理问题,具有很好的参考价值,希望对大家有所帮助,
    2023-11-11
  • docker下安装Elasticsearch设置账号密码的步骤记录

    docker下安装Elasticsearch设置账号密码的步骤记录

    这篇文章主要介绍了docker下安装Elasticsearch设置账号密码的步骤,包括拉取镜像、创建配置文件和用户密码文件、挂载文件到容器、使用Kibana或API创建用户、验证配置、以及持久化数据和日志,需要的朋友可以参考下
    2025-04-04
  • Docker获取镜像报错docker: Error response from daemon

    Docker获取镜像报错docker: Error response from daemon

    这篇文章主要介绍了Docker获取镜像报错docker: Error response from daemon, 出现了镜像获取报错的问题,找到了解决的方法记一下,需要的朋友可以参考下
    2018-08-08
  • docker环境下安装jenkins容器的详细教程

    docker环境下安装jenkins容器的详细教程

    这篇文章主要介绍了docker环境下安装jenkins容器的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Docker从默认网络到自定义网络实现方式

    Docker从默认网络到自定义网络实现方式

    本文介绍了Docker默认网络机制的局限性,特别是IP地址动态变动导致的问题,通过创建自定义网络,可以有效解决这一问题,实现容器间通过容器名进行通信,文章详细讲解了如何创建和管理自定义网络,包括创建自定义网络、将容器加入网络、验证容器名通信等功能
    2025-12-12
  • Windows10在wsl2上面安装docker全攻略

    Windows10在wsl2上面安装docker全攻略

    作为开发者,你可能会遇到不同操作系统和环境带来的挑战,Docker 可以帮助你创建隔离和可移植的容器,使应用程序运行得更加高效,这篇文章主要介绍了Windows10在wsl2上面安装docker的相关资料,需要的朋友可以参考下
    2025-11-11
  • Docker文件映射实现主机与容器间目录的双向映射

    Docker文件映射实现主机与容器间目录的双向映射

    本地文件系统和容器中的文件系统之间的交互是一项必不可少的功能,本文主要介绍了Docker文件映射实现主机与容器间目录的双向映射,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 使用Docker自动化部署项目的全过程

    使用Docker自动化部署项目的全过程

    文章介绍了两个项目的Docker部署方案:一是通过Dockerfile构建Boost搜索引擎镜像并配置依赖库,二是使用docker-compose编排Web应用、MySQL、Redis及编译器服务,实现多容器协同部署与环境隔离
    2025-07-07
  • 让非root用户构建Docker镜像的三种方法

    让非root用户构建Docker镜像的三种方法

    在默认情况下,Docker 需要 root 权限或 sudo 才能运行,这对于日常开发和 CI/CD 流水线可能不够方便,那么,如何让 非 root 用户 也能构建和运行 Docker 容器呢?本篇文章将介绍 三种方法 来实现这一目标,需要的朋友可以参考下
    2025-04-04
  • debian12安装docker的实现步骤

    debian12安装docker的实现步骤

    本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05

最新评论