问题:公司服务器在部署一套业务后,message日志记录大量的dockerd、kubelet、warpdrive、containerd应用日志,每天增加2G大小的日志
解决方案:
前期吐槽下:发现某个帖子,需要会员或者花钱才能看,看了之后直接无语了人家给的方案
在/etc/rsyslog.conf中某个地方改为*.none /var/log/messages
我的看法:大哥,这是公司服务器,你啥都不记录,最起码你得保证系统日志得有吧,以后服务器出问题了怎么办,你怎么排查?查鸡毛啊,出现错误后因为你这配置没找到错误出现的原因,你不顶锅谁顶锅。
来自花钱看了没用的文档,从而导致心里不平衡弱小无辜的人的吐槽
###########################################华丽的分割线#####################################################
吐槽完了,说正事,其实有两套解决方案
第一套:类似于上面的,就是不接收docker、kubelet、warpdrive、containerd应用日志(提前你得和应用相关得人员确认好,我系统message不接收这些日志,你们应用出错误后有没有别的日志能供你排查)应用确认无所谓,这些对我没用,那么配置开始
1. 在/etc/rsyslog.d/下新增配置文件(注意是新增,内容如下)
[root@localhost]# vim /etc/rsyslog.d/ignore-docker.conf
#内容如下:
if $programname == 'dockerd' then {
stop
}
2. 重启日志服务
保存后,重启 rsyslog
systemctl restart rsyslog
3. 测试查看
tail -f /var/log/messages
解释:
if $programname == 'dockerd': 这是一个条件语句。$programname 是一个 rsyslog 的内置变量,它代表日志条目的程序名称。== 'dockerd' 表示条件是检查程序名称是否等于 'dockerd'。dockerd 是 Docker 的守护进程的程序名。
then { ... }: 这是条件满足时执行的代码块的开始部分。花括号 { ... } 包围了条件满足时的所有指令。
stop: 这是在 rsyslog 配置中的一个指令,表示停止对匹配日志的进一步处理。
也就是说,一旦日志的程序名是 'dockerd',这个日志条目就不会被进一步处理或记录到其他日志文件中。
其他应用只需要把dockerd变成应用名就可以
第二套:那么我们把docker、kubelet、warpdrive、containerd应用日志记录到别的日志中,从而和系统日志分开,因为docker、kubelet、warpdrive、containerd应用日志增长量大,和应用人员商量留七天够不够,够就写个周期性计划任务,每七天删除一次应用日志
1. 在/etc/rsyslog.d/下新增配置文件(注意是新增,内容如下)
[root@localhost]# vim /etc/rsyslog.d/ignore-docker.conf
#内容如下:
if $programname == 'dockerd' then /var/log/docker.log
& stop
2. 重启日志服务
保存后,重启 rsyslog
systemctl restart rsyslog
3. 测试查看
tail -f /var/log/messages
if $programname == 'dockerd':这是匹配 dockerd 程序的日志。
/var/log/docker.log:指定将匹配的日志写入到这个文件。
& stop:指示 rsyslog 停止进一步处理这些日志,这样它们不会被记录到其他日志文件(如 messages)中
周期性计划任务就不过多写了,写道这里就可以让message日志和应用日志拆开了
祝大家别碰到那种花了钱还没用的帖子!!!!!!!!!!!!!
上面来自我的吐槽,看我帖子没用的话也别喷,最起码我没收费