日志管理

一、日志管理

处理日志的进程

  • rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron
  • httpd/nginx/mysql等等应用可以以自己的方式记录日志
[root@localhost ~]# ps aux | grep rsyslogd
  • 日志可以存放在本地
  • 日志可以存放在远程服务器

常见的日志文件(系统、进程、应用程序)

日志文件作用描述
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/croncrond、at进程产生的日志
tail /var/log/dmesg和系统启动相关
tail /var/log/audit/audit.log系统审计日志
tail /var/log/yum.logyum
tail /var/log/mysqld.logMysql
w当前登录的用户/var/log/wtmp
last最近登录的用户/var/log/btmp
lastlog所有用户的登录情况/var/log/lastlog

案例

统计登录失败top5
[root@localhost ~]# grep -i 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c |sort -k1 -n -r |head -5
779 hadoop
501 test
261 183.240.132.21
224 user
21 195.54.160.183

统计登录成功
[root@localhost ~]# grep 'Accepted' /var/log/secure |awk '{print $(NF-3)}' |sort |uniq -c
4 117.90.214.165
2 122.194.35.187
# 直接写$(NF) 指的就是最后一列
# 如果是$(NF-3) 减去3,就是倒数第四列

查看网卡是否已被驱动
[root@localhost ~]# grep -i eth /var/log/dmesg
[ 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 ~]# rpm -qc rsyslog 
/etc/logrotate.d/syslog # 日志轮转(切割)相关 
/etc/rsyslog.conf # rsyslogd的主配置文件 
/etc/sysconfig/rsyslog # rsyslogd相关文件
[root@localhost ~]# vim /etc/rsyslog.conf
# 告诉rsyslogd进程 哪个设备(facility),关于哪个级别的信息,以及如何处理
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
authpriv.*                                              *					# 所有终端
authpriv.*                                              @192.168.1.123		# 以UDP的方式发送给远程服务器
authpriv.*                                              @@192.168.1.123		# 以TCP的方式发送给远程服务器
设备类型(表示日志类型)解释
LOG_AUTHPRIV安全认证
LOG_CRONcron 和at
LOG_DAEMON后台进程
LOG_FTPftp进程
LOG_KERN内核信息
LOG_LOCAL0 through LOG_LOCAL7用户自定义设备
LOG_LPR打印子系统
LOG_MAIL邮件系统
LOG_NEWS新闻子系统
LOG_SYSLOGsyslog自身产生的日志
级别(日志重要级别)解释
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/secure
authpriv.* /var/log/auth.log
  • 案例2:改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local
1.设置ssh程序的日志设备为自定义设备

# vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility LOCAL5

2.设置自定义设备日志文件存储位置

# vim /etc/rsyslog.conf
local5.* /var/log/local5.local

3.重启生效

# systemctl restart sshd
# systemctl restart rsyslog

4.尝试登录,触发日志

5.观察日志,理解自定义日志设备

# ll /var/log/local5.local
-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 ~]# cat /etc/cron.daily/logrotate 
#!/bin/sh 

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf 
# 日志轮转状态/var/lib/logrotate/logrotate.status 
# 日志轮转规则按照/etc/logrotate.conf中来
[root@localhost ~]# ls /etc/logrotate.conf /etc/logrotate.d/ 
/etc/logrotate.conf 

/etc/logrotate.d/: 
bootlog chrony syslog wpa_supplicant yum
  • 主配置文件
[root@localhost ~]# vim /etc/logrotate.conf 
weekly # 一周轮转一次 
rotate 4 # 保留4份日志 
create # 主动创建新的日志文件 
dateext # 使用日期来作为文件名的后缀 
#compress # 每次轮转需不需要进行压缩 
include /etc/logrotate.d # 导入其他应用的日志轮转规则 
/var/log/wtmp { # 对该日志文件设置轮转的方法 
    monthly # 一个月轮转一次 
    create 0664 root utmp # 轮转后创建新文件,并设置权限 
    minsize 1M # 最小达到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 ~]# cat /etc/logrotate.d/httpd
/var/log/httpd/*log {
	missingok
	notifempty
	sharedscripts
	#以下脚本只执行一次
	delaycompress
	postrotate
	#在日志轮替结束之后,执行以下脚本
		/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
	#重载apache服务
	endscript
	#脚本结束
}
[root@localhost ~]# mv /etc/logrotate.d/httpd ~
[root@localhost ~]# vim /etc/logrotate.conf
"/var/log/httpd/access_log" /var/log/httpd/error_log {
#日志轮替的是/var/log/httpd/中RPM包默认安装的apache正确访问日志和错误日志
	rotate 5
	#轮替5次
	mail www@my.org
	#把信息发送到指定邮箱
	size 100k
	#日志大于100KB时才进行日志轮替,不再按照时间轮替
	create 644 root root
	sharedscripts
	#以下脚本只执行一次
	postrotate
	#在日志轮替结束之后,执行以下脚本
		/usr/bin/killall -HUP httpd
	#重启apache服务
	endscript
#脚本结束
}
不过改完要记得去手动执行一下/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf这个命令,这个是每天他会自己去定时任务启动轮替的,执行一次就切割一次
[root@localhost ~]# cat /etc/cron.daily/logrotate
#!/bin/sh

/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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值