运行一段时间以后,系统日志日益庞大(du -sh /var/log
),放着不闻不问的话就会爆满;根据业务的不同,对日志的处理方式也不一样,基本分为两种:
- 需要永久保留的日志->线上保留指定时间的日志&其余的存档备份
- 无需永久保留的日志->线上保留指定时间的日志
最好的做法:是搭建日志服务器,统一进行管理(看企业的重视程度及业务合规程度)
日志分类
系统日志
1 2 3 4 5 6 7 8 9 10 11
| /var/log/messages
/var/log/mailing
/var/log/secure
/var/log/cron
/var/log/spooler /var/log/journal
|
rsyslog 是 Linux 系统中用来实现日志功能的服务,默认安装且自动启用。
1 2 3 4
| vi /etc/rsyslog.conf
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
|
服务日志
为了便于统一管理,建议日志文件都存放在统一的文件夹中,例如:/app/logs
1 2 3 4 5 6 7 8
| /app/logs/httpd /app/logs/nginx
/app/logs/php-fpm
/app/logs/redis
|
管理方案
将需要备份的日志文件转存(转存后删除原始文件),然后打包存档并转移到专用服务器或者硬盘进行备份
日志存档
logrotate 是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志;这个过程称为“转储”
配置文件:/etc/logrotate.conf 和 /etc/logrotate.d/*.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| # see "man logrotate" for details # rotate log files weekly weekly
# keep 4 weeks worth of backlogs rotate 4
# create new (empty) log files after rotating old ones create
# use date as a suffix of the rotated file dateext
# uncomment this if you want your log files compressed #compress
# RPM packages drop log rotation information into this directory include /etc/logrotate.d
# no packages own wtmp and btmp -- we /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 }
/var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
# system-specific logs may be also be configured here.
|
删除日志
不需要备份的日志,直接采用删除指定时段(如:一个月)前的日志;使用非 root 用户创建脚本文件
1 2 3 4 5 6 7 8 9
| vi auto_delete_logs.sh
cd /var/log/ logs_dir="find -type d" for dir in ${logs_dir} do find ${dir} -type f -ctime +30 -name "*.log" -exec /bin/rm -rf {} \; done
|
设置定时任务 [[Linux 系统定时任务]]
1 2 3 4 5
| #添加可执行权限 chmod +x auto_delete_logs.sh crontab -e #每月 1 号 23:30 执行 30 23 1 * * /app/temp/auto_delete_logs.sh >/dev/null 2>&1
|
[[Linux 定时服务 - crontab]]
关闭邮件提示
Linux 系统会定时查看系统各种状态做汇总,每经过一段时间会把汇总的信息发送到 root 的邮箱里
1 2 3 4 5
| cat /var/spool/mail/root
> /var/spool/mail/root echo "unset MAILCHECK" >> /etc/profile source /etc/profile
|