社区电脑网络 → 浏览:帖子主题
* 帖子主题:CentOS7.5 上安装的 Docker 运行的容器的日志文件 journald.conf
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 1 楼 ] 回复
大家都知道docker可以通过命令docker logs container来查看容器的日志,看着日志一天天的增大是不是心慌慌啊,于是我也在网上找找,看看Docker容器的日志文件存在宿主机的什么位置上。

于是按照网上所说,在/var/lib/docker/containers/container_id目录下找,可惜失望了,怎么都找不到json.log文件,可以在百度上找到的都是说在这个目录下,这下心好痛,好像迷途的羔羊。

可以事情并没有想的那么糟,静下心慢慢找,首先看一下容器信息:

docker inspect container_id

在这个输出的Json内容中找到如下信息:

"LogConfig": {
    "Type": "journald",
    "Config": {}
},

从这里可以看到,日志的类型是journald,而不是网上所说的,json-file。

接下来就找journald日志的目录了,百度了一下,在/var/log/journal/c28d40cbc8e3adcb4e32d9779a77b39e这个目录下。下面有两个文件:

system@00000000000000000000000000000000-0000000000000421-00057e5d9c762778.journal
system.journal

我cat了一下,发现不是文本文件,应该是压缩后的日志文件,经过多方验证,它们就是我们使用docker logs查看的日志所在源。当然其它系统有可能是在/run/log/journal/465f5657df1a43b1a0eac7125e439f46个目录下,具体可以查看journal文档,后面32位字符串是随机的,有可能不一样。

文件位已经找到了,你可以重命名看看,docker logs container时就没有日志了,而且后面的日志就无法生成了。这时就要重启journald服务了,大家可以参考下网上的journald日志清理方法。

也可以配置journald的相关参数/etc/systemd/journald.conf。

可以通过journalctl管理journal日志

// 验证journal日志,也可以查看journal日志目录
journalctl --verify
// 查看日志磁盘占用空间
journalctl --disk-usage
// 我们不能通过删除system.journal文件删除,否则会出问题
// 设置日志保留时间
journalctl --vacuum-time=2d
// 设置日志保留大小
journalctl --vacuum-size=500M

也可以通过修改配置文件长久生效:

// /etc/systemd/journald.conf
SystemMaxUse=16M
ForwardToSyslog=no

要重启服务 systemctl restart systemd-journald.service

具体配置可以参见官方文档:https://www.freedesktop.org/software/systemd/man/journald.conf.html

PS:有时候你会发现Linux系统内存使用量越来越小也可能与日志有关,因为journal会先将日志放到内存中,再更新到磁盘上,致于使用多少内存,可以了解journal.conf黙认配置,也可以修改。另外,在日志目录中除了有一个system.journal的日志文件外还有其它的文件,这些是历史日志文件,是可以删除的,而system.journal不要删除,删除日志记录就不能用了。这些历史日志文件的大小也与配置有关。
2022-11-23 14:45:41 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 2 楼 ] 回复
打开/etc/systemd/journald.conf文件,将ratelimitburst从默认的1000修改成5000,根据自己目前的日志输出量进行调整:

[root@ad-official log]# cat /etc/systemd/journald.conf
# this file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the gnu lesser general public license as published by
# the free software foundation; either version 2.1 of the license, or
# (at your option) any later version.
#
# entries in this file show the compile time defaults.
# you can change settings by editing this file.
# defaults can be restored by simply deleting this file.
#
# see journald.conf(5) for details.

[journal]
#storage=auto
#compress=yes
#seal=yes
#splitmode=uid
#syncintervalsec=5m
#ratelimitinterval=30s
ratelimitburst=5000
#systemmaxuse=
#systemkeepfree=
#systemmaxfilesize=
#runtimemaxuse=
#runtimekeepfree=
#runtimemaxfilesize=
#maxretentionsec=
#maxfilesec=1month
forwardtosyslog=no
#forwardtokmsg=no
#forwardtoconsole=no
forwardtowall=no
#ttypath=/dev/console
#maxlevelstore=debug
#maxlevelsyslog=debug
#maxlevelkmsg=notice
#maxlevelconsole=info
#maxlevelwall=emerg
#linemax=48k

顺便将forwardtosyslog和forwardtowall设置成no,因为默认是yes,会导致我们清理了journal的日志文件,而syslog中的没有清除掉,慢慢的就会将磁盘占满。

然后重启一下journald就可以恢复正常使用啦:systemctl restart systemd-journald.service
2022-11-23 14:46:29 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 3 楼 ] 回复
日志位置:

/var/log/journal/
2022-11-23 14:47:17 IP:已设置保密
pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 4 楼 ] 回复
[Journal]

#日志存储到磁盘
Storage=persistent

#压缩日志
Compress=yes

#为日志添加序列号
Seal=yes

#每个用户分别记录日志
SplitMode=uid

#日志同步到磁盘的间隔,高级别的日志,如:CRIT、ALERT、EMERG 三种总是实时同步
SyncIntervalSec=1m

#即制日志的最大流量,此处指 30s 内最多记录 100000 条日志,超出的将被丢弃
RateLimitInterval=30s
#与 RateLimitInterval 配合使用
RateLimitBurst=100000

#限制全部日志文件加在一起最多可以占用多少空间,默认值是10%空间与4G空间两者中的较小者
SystemMaxUse=10G
#默认值是15%空间与4G空间两者中的较大者
SystemKeepFree=1G

#单个日志文件的大小限制,超过此限制将触发滚动保存
SystemMaxFileSize=128M

#日志滚动的最大时间间隔,若不设置则完全以大小限制为准
MaxFileSec=1day
#日志最大保留时间,超过时限的旧日志将被删除
# MaxRetentionSec=1year
# 日志保存时间2周
MaxRetentionSec=2week

#是否转发符合条件的日志记录到本机的其它日志管理系统,如:rsyslog
ForwardToSyslog=yes
ForwardToKMsg=no
#是否转发符合条件的日志到所有登陆用户的终端
ForwardToWall=yes
MaxLevelStore=debug
MaxLevelSyslog=err
MaxLevelWall=emerg
ForwardToConsole=no
#TTYPath=/dev/console
#MaxLevelConsole=info
#MaxLevelKMsg=notice


http://www.manongjc.com/detail/29-xclxdzykkuusxxk.html
2022-11-23 15:46:31 IP:已设置保密
分页: 1, 共 1 页
快速回复主题
账号/密码
用户: 没有注册?密码:
评论内容