Linux日志管理
- 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、邮件相关信息、各种服务相关信息
- 日志对于安全来说很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或则收到攻击时攻击者留下的痕迹
- 日志是用来记录重大事件的工具
系统常用的日志文件保存位置: /var/log/
系统常用的日志
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录系统在开机时内核自检的信息。使用dmesg查看 |
/var/log/btmp | 记录错误登录日志,二进制文件,需要用lastb查看 |
/var/log/lasllog | 记录系统中所有用户最后一次的登录时间的日志,使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息日志 |
/var/log/message | 记录系统重要信息的日志,这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题,首先需要检查该文件 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会被记录 |
/var/log/wtmp | 永久记录所有用户的登录,注销信息,同时记录系统的启动,重启,关机时间,需要用last命令查看 |
/var/log/ulmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断发生变化,只记录当前登录用户的信息,需要使用w、who、users命令查看你 |
日志管理服务 rsyslogd
CentOS7.6日志服务是 rsyslogd Centos6.x 日志服务是syslogd 。 rsyslogd功能更强大。rsyslogd的使用、日志文件的格式,和syslogd服务兼容的
查询Linux中的rsyslogd服务是否启动
ps aux | grep "rsyslog" |grep -v "grep"
查询rsyslogd服务的自启动状态
systemctl list-unit-files |grep rsyslog
日志配置文件
文件目录:/etc/rsyslog.conf
日志级别
- debug 有调试信息的,日志通信最大
- info 一般信息日志,最常用
- notice 最具有重要性的普通条件的信息
警告级别
- err 错误界别,阻止某个功能或则模块不能正常工作的信息
- crit 严重级别,组织某个系统或整个软件不能正常工作的信息
- alert 需要立刻修改的信息
- emerg 内核崩溃等重要信息
- none 什么都不记录
从上到下,级别从低到高,记录信息越来越少
由日志服务rsyslogd记录的日志文件,日志文件的格式包含一下4列:
- 时间产生的时间
- 产生时间的服务器的主机名
- 产生时间的服务名或程序名
- 时间的具体信息
自定义日志管理服务
#增加自定义的日志
*.* /var/log/ylq.log
[root@rootylq log]# vim /etc/rsyslog.conf
[root@rootylq log]# > /var/log/ylq.log
[root@rootylq log]# cat /var/log/ylq.log
[root@rootylq log]# reboot
[root@rootylq log]# cat ylq.log | grep sshd
Jan 19 13:40:39 rootylq sshd[28778]: Received signal 15; terminating.
Jan 19 13:40:39 rootylq sshd[8950]: pam_unix(sshd:session): session closed for user ylq
Jan 19 13:40:57 rootylq sshd[1272]: Server listening on 0.0.0.0 port 22.
Jan 19 13:41:01 rootylq sshd[1412]: Accepted password for root from 115.236.56.78 port 63087 ssh2
日志轮替
日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存范围之后,就会进行删除
日志轮换文件命名
- CentOS7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext”参数
- 如果配置文件中有“dateext”参数,则日志会用日期作为日志文件的后缀。例如“secure-20201010”。只需要指定保存日志个数,删除多余的日志文件即可
- 如果配置文件中没有“dateext”参数,日志文件就需要进行改名,当第一次进行日志轮替是,当前“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名成“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志,从而依此类推
logrotate配置文件
- daily 日志轮替周期每天
- weekly 日志轮替周期每周
- monthly 日志轮替周期每月
- rotate 数字 保留的日志文件的个数。0指没有备份
- compress 日志轮替时,旧的日志进行压缩
- create mode owner group 建立新日志,用时指定新日志的权限与所有者和所属组
- mail address 当日志轮替时,输出内容通过邮箱发送到指定的邮箱地址
- missingok 如果日志不存在,则忽略该日志的警告信息
- notifempty 如果日志为空文件,则不进行日志轮替
- minsize 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
- size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
- dateext 使用日期作为日志轮替文件的后缀
- sharedscripts 在此关键字之后的脚本只执行一次
- prerotate/endscript 在日志轮替之前执行脚本命令
- postrotate/endscript 在日志轮替之后执行脚本命令
将自己的日志加入日志轮替
- 方法一:直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
- 方法二:在/etc/logrotate.d/目录中新建该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替
[root@rootylq logrotate.d]# cat ylqlog
/var/log/ylq.log
{
missingok
daily
copytruncate
rotate 7
motifempty
}
[root@rootylq logrotate.d]# ll
total 32
-rw-r--r--. 1 root root 91 Sep 30 2020 bootlog
-rw-r--r--. 1 root root 160 Sep 19 2018 chrony
-rw-r--r-- 1 root root 93 Apr 28 2021 firewalld
-rw-r--r-- 1 root root 972 Sep 14 03:07 mysql
-rw-r--r-- 1 root root 224 Jan 14 2022 syslog
-rw-r--r-- 1 root root 100 Mar 16 2021 wpa_supplicant
-rw-r--r-- 1 root root 76 Jan 19 14:58 ylqlog
-rw-r--r--. 1 root root 103 Oct 2 2020 yum
[root@rootylq logrotate.d]#
日志轮替机制原理
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是有logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的
[root@rootylq logrotate.d]# cd /etc/cron.daily/
[root@rootylq cron.daily]# ll
total 12
-rwx------. 1 root root 219 Apr 1 2020 logrotate
-rwxr-xr-x. 1 root root 618 Oct 30 2018 man-db.cron
-rwx------ 1 root root 208 Apr 11 2018 mlocate
[root@rootylq cron.daily]#
查看内存日志
journalctl 可以查看内存日志
命令 | 说明 |
---|---|
journalctl | 查看全部 |
journalctl -n 3 | 查看最新3条 |
journalctl --since 19:00 --until 19:10:10 | 查看起始时间到结束时间的日志可加日期 |
journalctl -p err | 查看报错日志 |
journalctl -o verbose | 查看日志详细内容 |
journalctl_PID=1245 _COMM =sshd | 在详细体制中查看包含这些参数的日志 |
[root@rootylq /]# journalctl | grep sshd