当服务器系统在持续运行时,服务器中部署的各类服务就会产生日志,久而久之服务器中保存的日志文件会愈来愈大,一个日志文件可能占用数百G的磁盘容量,难以保存,也难以经过查看日志文件进行排错。所以,咱们须要对日志进行轮转操做,只须要保留近期的日志信息,对比较久远的日志信息进行压缩并转存到日志服务器,这样作可让大大下降日志占用的磁盘空间,同时保证咱们能够在服务出现问题的时候经过日志信息进行排错和解决
工具
logrotate日志轮转工具能够很轻松的管理系统所产生的日志,它提供自动压缩、删除、分割日志文件的功能,logrotate日志轮状的优势有:
1)能够分隔,如按天,按月,按年分割日志,减少日志大小,下降分析难度
2)能够及时清除在rotate轮转期限外的多于日志数据
3)结合计划任务执行
经常使用参数node
compress:经过gzip对转储之后的日志进行压缩 nocompress:不对日志进行gzip压缩处理 copytruncate:用于处理还在打开中的日志文件,以先拷贝再清空的方式对当前日志进行备份并截断操做;因为拷贝和清空之间有一个时间差,可能会丢失部分日志数据 nocopytruncate:备份日志文件但不进行截断操做 create mode owner group:轮转时指定建立新文件,可指定权限、属主和属组 nocreate:日志轮转后不建立新的日志文件 delaycompress:发生轮转的日志文件到下一次转储时才压缩 nodelaycompress:日志轮转同时进行压缩 missingok:若是日志丢失,忽略此日志不产生报错 errors address:轮转时产生的错误信息发送到指定的Email地址 ifempty:空日志也进行日志轮转 notifempty:空日志不进行轮转 olddir directory:轮转后的日志文件放入指定的目录,指定目录和当前日志文件须要在同一个文件系统 noolddir:轮转后的日志文件和当前日志文件放在同一个目录下 sharedscripts:全部日志都轮转后统一执行postrotate脚本 prerotate:在logrotate轮转以前须要执行的指令,如修改文件的属性 postrotate:在logrotate转储以后须要执行的指令,如重启(kill -HUP)服务 daily:指定轮转周期为天天 weekly:指定轮转周期为每周 monthly:指定轮转周期为每个月 rotate count:指定日志文件删除以前轮转的次数,0:没有备份,5:保留5个备份 dateext:使用当期日期做为轮转日志的后缀名 dateformat .%s:配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,只支持 %Y %m %d %s 这四个参数 size(或minsize) log-size:当日志文件到达指定的大小时才轮转,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). 当日志文件 >= log-size 的时候就轮转 size = 5 或 size 5 (>= 5 个字节就轮转) size = 100k 或 size 100k size = 100M 或 size 100M
手动日志轮转mysql
[root@localhost ~]# logrotate -f /etc/logrotate.conf
修改配置文件nginx
[root@localhost ~]# vi /etc/ssh/sshd_config #指定rsyslog管理日志的设备载体为local1 SyslogFacility local1
设定日志管理sql
[root@localhost ~]# vi /etc/rsyslog.conf #设置SSH服务的全部级别日志经过local1载体设备保存到本地文件夹中 local1.* /var/log/ssh.log
配置日志轮转shell
[root@localhost ~]# vi /etc/logrotate.d/ssh /var/log/ssh.log{ #设定文件不存在也不报错 missingok #设置轮转周期 weekly #日志轮转后新建日志文件 create #设置轮转保留的文件数 rotate 4 #设置轮转文件的大小 size 5M #以日期为日志轮转后缀 #若使用nodateext设置不以日期为后缀,则以1,2,3为文件后缀 dateext }
配置日志轮转apache
[root@localhost ~]# vi /etc/logrotate.d/mysqld /var/log/mysql/mysqld.log { missingok create 600 mysql mysql notifempty weekly rotate 4 dateext postrotate #当MySQL服务正在运行时 if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then #对日志进行清洗,产生新的binlog日志 /usr/bin/mysqladmin flush-logs fi endscript }
配置日志轮转服务器
[root@localhost ~]# vi /etc/logrotate.d/httpd /var/log/httpd/*log { missingok weekly #空文件不轮转 notifempty #延迟压缩 delaycompress create sharedscripts postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
配置日志轮转ssh
[root@localhost ~]# vi /etc/logrotate.d/nginx /usr/local/nginx/logs/access.log{ daily missingok rotate 4 #把旧的文件进行压缩 compress #延迟压缩 delaycompress #空文档不轮转 notifempty create 640 root root sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx.pid ]; then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi endscript } /usr/local/nginx/logs/error.log{ daily missingok rotate 4 #把旧的文件进行压缩 compress #延迟压缩 delaycompress #空文档不轮转 notifempty create 640 root root sharedscripts postrotate if [ -f /usr/local/nginx/logs/nginx.pid ]; then kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` fi endscript }