logrotate日志切割(Centos)

本文详细介绍了logrotate工具的功能,包括日志切割、安装与配置,以及如何处理权限问题和优化rsyslog服务内存。重点讲解了配置参数、常见问题解决方案和使用技巧,适合运维人员提升日志管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务介绍

logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。可以节省磁盘空间。
使用logrotate指令,可让你轻松管理系统所产生的记录文件。它提供自动替换,压缩,删除和邮寄记录文件,每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,预设的配置文件存放在/etc目录下,文件名称为logrotate.conf。

服务安装

yum -y install logrotate crontabs

日志切割(示例nginx)

创建切割配置文件

cd /etc/logrotate.d
vim  nginx
/data/nginx/log/error.log
{
    missingok
    daily
    copytruncate
    rotate 30
    notifempty
    compress
    dateext
}

重启服务载入配置

systemctl	restart	rsyslog

手动切割日志(日志过大第一次建议手动切割)

logrotate  -vf  /etc/logrotate.d/nginx

参数说明

cat /etc/logrotate.d/nginx

/var/log/boot.log    #日志位置
{
    missingok	#如果文件丢失不报错
    daily		#按天进行回滚(monthly按月回滚,weekly按天回滚,yearly按年回滚)
    compress	#在轮转完成后使用gzip进行压缩
    nocompress	#不压缩
    copytruncate	#用于还在打开中的日志文件,把当前日志备份并截断
    nocopytruncate	#备份日志文件但是不截断
    dateext		#命名格式为当前日期
    dateformat.%s  #配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s %H 这四个参数
    notifempty	#如果日志为空,轮转不进行
    olddir directory	#转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统	
    create mode owner group		#按照指定权限创建全新的日志文件
    minsize xM	#日志超过x则立即进行回滚(如果未超过则按照设置得天或月进行回滚)	
    rotate x	#日志切割后历史文件保存x个
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript			#在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
}
logrotate命令格式:
logrotate  参数   配置文件(/etc/logrotate)

-d, --debug :debug模式,测试配置文件是否有错误。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。

常见问题

权限不足问题

报错:
error: skipping “/data/mysql/log/mysql-slow.log” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.
截图:
在这里插入图片描述
解决办法:指定使用root用户进行切割或其他对此文件具有最大权限的用户

vim /etc/logrotate.d/mysql-sqlow 
/data/mysql/log/mysql-slow.log
{
    su root root      #增加切换root权限配置
}

重启rsyslog

systemctl	restart	rsyslog

使用优化

服务内存限制

vim /usr/lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
;Requires=syslog.socket
Wants=network.target network-online.target
After=network.target network-online.target
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/rsyslog
ExecStart=/usr/sbin/rsyslogd -n $SYSLOGD_OPTIONS
Restart=on-failure
UMask=0066
StandardOutput=null
Restart=on-failure
#增加内存限制参数
MemoryAccounting=yes    #开启内存限制
MemoryMax=80M            #设置最大使用内存为80M
MemoryHigh=8M           #设置使用内存为8M
#通常情况下rsyslogd大小只有5M,所以将内存上限设置为8M,然后将绝对内存限制为80M。

[Install]
WantedBy=multi-user.target
;Alias=syslog.service

重启服务加载配置

systemctl daemon-reload
systemctl restart rsyslog
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值