一、日志管理
处理日志的进程
rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cronhttpd/nginx/mysql等等应用可以以自己的方式记录日志
[root@localhost ~]
常见的日志文件(系统、进程、应用程序)
| 日志文件 | 作用描述 |
|---|
| tail /var/log/messages | 系统日志文件 |
| tail 20 /var/log/messages | |
| tail -f /var/log/messages | 动态查看日志文件的尾部 |
| tail /var/log/secure | 认证、安全 |
| tail /var/log/maillog | 和邮件postfix相关 |
| tail /var/log/cron | crond、at进程产生的日志 |
| tail /var/log/dmesg | 和系统启动相关 |
| tail /var/log/audit/audit.log | 系统审计日志 |
| tail /var/log/yum.log | yum |
| tail /var/log/mysqld.log | Mysql |
| w | 当前登录的用户/var/log/wtmp |
| last | 最近登录的用户/var/log/btmp |
| lastlog | 所有用户的登录情况/var/log/lastlog |
案例
统计登录失败top5
[root@localhost ~]
779 hadoop
501 test
261 183.240.132.21
224 user
21 195.54.160.183
统计登录成功
[root@localhost ~]
4 117.90.214.165
2 122.194.35.187
查看网卡是否已被驱动
[root@localhost ~]
[ 2.090634] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:bb:9a:bb
[ 2.090642] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
rsyslog子系统
[root@localhost ~]
/etc/logrotate.d/syslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog
[root@localhost ~]
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
authpriv.* *
authpriv.* @192.168.1.123
authpriv.* @@192.168.1.123
| 设备类型(表示日志类型) | 解释 |
|---|
| LOG_AUTHPRIV | 安全认证 |
| LOG_CRON | cron 和at |
| LOG_DAEMON | 后台进程 |
| LOG_FTP | ftp进程 |
| LOG_KERN | 内核信息 |
| LOG_LOCAL0 through LOG_LOCAL7 | 用户自定义设备 |
| LOG_LPR | 打印子系统 |
| LOG_MAIL | 邮件系统 |
| LOG_NEWS | 新闻子系统 |
| LOG_SYSLOG | syslog自身产生的日志 |
| 级别(日志重要级别) | 解释 |
|---|
| LOG_EMERG | 紧急,致命,服务无法继续运行,如配置文件丢失 |
| LOG_ALERT | 报警,需要立即处理,如磁盘空间使用95% |
| LOG_CRIT | 致命行为 |
| LOG_ERR | 错误行为 |
| LOG_WARNING | 警告信息 |
| LOG_NOTICE | 普通 |
| LOG_INFO | 标准信息 |
| LOG_DEBUG | 调试信息,排错才开,一般不建议使用 |
- 案例1:将authpriv设备日志记录到/var/log/auth.log
vim /etc/rsyslog.conf
authpriv.* /var/log/auth.log
- 案例2:改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local
1.设置ssh程序的日志设备为自定义设备
SyslogFacility LOCAL5
2.设置自定义设备日志文件存储位置
local5.* /var/log/local5.local
3.重启生效
4.尝试登录,触发日志
5.观察日志,理解自定义日志设备
-rw-------. 1 root root 201 /var/log/local5.local
cat /var/log/local5.local
- 案例3:使用logger程序写日志到指定的设备及级别
logger "run....."
logger -p emerg "run......"
logger -p authpriv.info "run......"
二、 logrotate 日志轮转
注:针对任何日志文件(rsyslog日志、Nginx访问或错误日志)
logrotate(轮转,日志切割)
- 如果没有日志轮转,日志文件会越来越大
- 将丢弃系统中最旧的日志文件,以节省空间
- logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
[root@localhost ~]
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
[root@localhost ~]
/etc/logrotate.conf
/etc/logrotate.d/:
bootlog chrony syslog wpa_supplicant yum
[root@localhost ~]
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
| monthly | 日志文件按月轮询。其他可用值为’daily‘,’weekly‘或者’yearly |
|---|
| rotate 5: | 一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 |
| compress: | 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。 |
| delaycompress: | 总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。 |
| missingok: | 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 |
| notifempty: | 如果日志文件为空,轮替不会进行。 |
| sharedscripts: | 以下脚本只执行一次 |
| create 644 root root: | 以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。 |
| postrotate/endscript: | 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。 |
| size大小: | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size100k |
| minsize大小: | 日志轮替的最小值,也就是日志一定要达到这个最小值才会进程轮转,否则就算达到时间也不轮替 |
http自己有自己预先写好的轮替,不过我们可以把他移走,自己写一个
[root@localhost ~]
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
[root@localhost ~]
[root@localhost ~]
"/var/log/httpd/access_log" /var/log/httpd/error_log {
rotate 5
mail www@my.org
size 100k
create 644 root root
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
不过改完要记得去手动执行一下/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf这个命令,这个是每天他会自己去定时任务启动轮替的,执行一次就切割一次
[root@localhost ~]
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status
/etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0