服务介绍
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