基本介绍
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关的信息等。
日志对于安全来说也很重要、它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
可以这样理解日志是记录重大事件的工具。
系统常用的日志
系统日志文件
/var/log/
目录就是系统日志文件的保存位置,看张图
系统常用的日志
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/cups | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信总,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接用vi查看,而要使用lastb命令查看。命令如下:lastb |
/var/log/lasllog | 记录系统中所有用户最后一次的登录时间的日志,这个文件也是二进制文件,要使用lastb命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/message | 记录系统重要信息的日志。这个日志文件会记录Linux系统的绝大多数重要信息。如果系统出现问题,首先要检查的就应该是这个日志文件 |
/var/log/secure | 记录验证和授权信息的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户、sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。是二进制文件。要使用lastb命令查看 |
/var/log/ulmp | 记录当前已经登录的用户信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息,这个文件不能用vi查看,而要使用w、who、user等命令查看 |
日志管理器 rsyslogd
CenOS7.6日志服务是rsyslogd
,CenOS6.x日志服务是syslogd
。rsyslogd
功能更强大。rsyslogd
的使用、日志文件的格式,和syslogd
服务兼容的。
原理示意图:
rsyslogd基本指令
# 查询Linux的rsyslogd服务是否启动
ps aux | grep "rsyslog" | grep -v "grep"
# 查询rsyslogd服务的自启动状态
systemctl list-unit-files | grep rsyslog
# 所有服务及服务启动状态
systemctl list-unit-files
rsyslog.conf配置文件说明(所在目录为/etc/rsyslog.conf)
配置文件:/etc/rsyslog.conf
编辑文件时的格式为:
*.* 存放日志文件
# 其中第一个*代表日志类型,第二个*代表日志级别
如图:
日志类型分为:
auth #pam产生的日志
authpriv #ssh、ftp等登录信息的验证信息
corn #时间任务相关
kern #内核
lpr #打印
mail #邮件
mark(syslog)-rsyslog #服务内部的信息,时间标识
news #新闻组
user #用户程序产生的相关信息
uucp #unix to nuix copy主机之间相关的通信
local 1-7 #自定义的日志设备
日志级别:
debug #有调试信息的,日志通信最多
info #─般信息日志,最常用
notice #最具有重要性的普通条件的信息
warning #警告级别
err #错误级别,阻止某个功能或者模块不能正常工作的信息
crit #严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert #需要立刻修改的信息
emerg #内核崩溃等重要信息
none #什么都不记录
# 注意:从上到下,级别从低到高,记录信息越来越少
由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
事件产生的时间
产生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
日志查看实例
cat /var/log/secure | grep sshd
自定义日志服务
输出所有日志内容输出到wqj.log中
# 编辑日志服务配置文件
vim /etc/rsyslog.conf
# 添加配置
*.* /var/log/wqj.log
# 生成日志文件
> /var/log/wqj.log
日志轮替
基本介绍
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超过保存的范围之后,就进行删除
日志轮替文件命名
centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中”dateext”参数
如果配置文件中有”dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20201010”。这样日志名不会重叠,也就不需要日志文件的改名了,只需要指定保存日志个数,删除多余的日志文件即可
如果配置文件中没有”dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的”secure”日志会自动改名为”secure.1”,然后新建“secure”日志,用来保存新的日志。但第二次进行日志轮替时,”secure.1”会自动改名为”secure.2”,当前的“secure”日志会自动改名为”secure.1”,然后也会新建”secure”日志,用来保存新的日志文件,依次类推
logrotate配置文件
/etc/logrotate.conf为logrotate的全局配置文件
# rotate log files weekly
,每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs
,共保存4份日志文件,当建立新的日志文件时,旧的将会被删除
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
# 包含/etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录中的所有子配置文件读取进来
include /etc/logrotate.d
# 以下是单独配置,centos8的配置中没有下面的配置,这里是做说明使用
/var/log/btmp{
missingok # 如果日志不存在,这忽略该日志的警告
monthly
create 0600 root utmp
rotate 1
}
/var/log/wtmp{
monthly # 每月对日志文件进行一次校验
create 0664 root utmp # 建立新的日志文件,权限是0664,所有者是root,所属组是utmp组
minsize 1m
minsize 1m # 日志文件最小轮替大小是 1MB 。也就是日志一定要超过1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储
rotate 1 # 仅保留一个日志备份。也就是只有 wtmp和 wtmp.1日志保留而已
}
参数说明:
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天。 |
weekly | 日志的轮替周期是每周。 |
monthly | 日志的轮替周期是每月。 |
rotate 数字 | 保留的日志文件的个数。0指没有备份。 |
compress | 日志轮替时,旧的日志进行压缩。 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。如create 0600 root utmp。 |
mail address | 当日志轮替时,输出的内容通过邮件发送到指定的邮件地址。如mail xxxx@lamp.net。 |
missingok | 如果日志不存在,则忽略该日志的警告信息。 |
notifempty | 如果日志为空文件,则不进行日志轮替。 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替。 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k。(也就是只按大小,不按时间) |
dateext | 使用日期作为日志轮替文件的后缀。如secure-20200616。 |
sharedscripts | 在此关键字之后的脚本只执行一次。(要使用下面两个参数,该参数一定要使用) |
prerotate/endscript | 在日志轮替之前执行脚本命令。endscript标示prerotate脚本结束。 |
postrotate/endscript | 在日志轮替之后执行脚本命令。endscript标示postrotate脚本结束。 |
这些参数中较为不好理解的应该就是prerotate/endscript
和postrotate/endscript
参数了,我们利用"man logrotate"
中的列子来解释下这两个参数。例如:
# 日志轮替的是/var/log/httpd/中RPM包安装的apache正确访问日志和错误日志。
/var/1og/httpd/access.log
/var/1og/httpd/error.log
{
# 轮替5次。
rotate 5
# 信息发送到指定邮箱。
mail www@sina.com
# 日志大于100KB时才进行日志轮替,不再按照时间轮替。
size 100k
# 以下脚本只执行一次。
sharedscripts
# 在日志轮替结束之后,执行以下脚本。
postrotate
# 重启apache服务的相关服务。
/usr/bin/killall -HUP httpd
# 脚本结束。
endscript
}
把自己的日志加入日志轮替
第一种方法是直接在
/etc/logrotate.conf
配置文件中写入该日志的轮替策略第二种方法是在
/etc/logrotate.d/
目录中新建立该日志的轮替文件,在轮替文件中写入正确的轮替策略,因为该目录的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替
注意:推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全部直接写入到/etc/logrotate.conf配置文件中,那么这个文件的可管理性就会非常差,不利于文件的维护
在/etc/logrotate.d/
配置轮替文件一览
日志轮替原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/
目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的,以下是脚本内容:
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
查看内存日志(journalcl命令)
journalcl
可以查看内存日志,这里我们看看常用的指令
journalctl ##查看全部
journalctl -n 3 ##查看最新三条
journalctl --since 19:00 --until 19:10:10 ##查看起始时间到结束时间的日志可加日期
journalctl -p err ##报错日志
journalctl -o verbose ##日志详细内容
journalctl _PID=1245 _COMN=sshd ##查看包含这些参数的日志(再详细日志中查看)
或者journalctl | grep sshd
注意:journalctl 查看的是内存日志,重启清空