日志管理
基本介绍
- 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统
的安全信息、邮件相关信息、各种服务相关信息等。 - 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击
时攻击者留下的痕迹。 - 可以这样理解日志是用来记录重大事件的工具
系统常用的日志
/var/log/
目录就是系统日志文件的保存位置
日志文件 | 说明 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的曰志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信总。也可以使用 dmesg 命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登陆的日志。这个文件是二进制文件,不能直接用Vi查看,而要使用 lastb 命令查看 |
/var/log/lasllog | 记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件。不能直接用Vi查看,而要使用lastlog命令查看 |
/var/log/mailog | 记录邮件信息的日志 |
/var/log/message | 记录系统里要佶息的日志.这个日志文件中会记录 Linux 系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件 |
/var/log/secure | 记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh 的登录、su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中 |
/var/log/wtmp | 永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用 last 命令查看 |
/var/tun/ulmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用 w、who、users 等命令查看 |
除系统默认的日志之外,采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中(源码包安装的服务日志存放在源码包指定的目录中)。不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在,只有安装了相应的服务,日志才会出现。
日志文件 | 说明 |
---|---|
/var/log/httpd/ | RPM 包安装的apache取务的默认日志目录 |
/var/log/mail/ | RPM 包安装的邮件服务的额外日志因录 |
/var/log/samba/ | RPM色安装的Samba服务的日志目录 |
/var/log/sssd/ | 守护进程安全服务目录 |
日志管理服务 rsyslogd
CentOS 7.6日志服务是 rsyslogd,CentOS 6.x 日志服务是 syslogd,rsyslogd 功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd 服务兼容的。
原理:
查询 Linux 中的 rsyslogd 服务是否启动
ps aux | grep "rsyslog" | grep -v "grep"
# -v 表示反向匹配 表示查询不包含grep的服务
查询 rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
配置文件:
/etc/rsyslog.conf
- 编辑文件时的格式:.,其中第一个 代表日志类型,第二个 代表日志类别 | 日志类型 | 说明 | | —- | —- | | auth | 安全和认证相关消息,pam 产生的日志(不推荐使用 authpriv 替代) | | authpirv | 安全和认证相关信息,ssh、ftp 等登录信息的验证信息(私有的) | | cron | 系统定时任务 crond 和 at 产生的日志 | | daemon | 和各个守护进程相关的日志 | | ftp | ftp 守护进程产生的日志 | | kern | 内核产生的日志(不是用户进程产生的) | | lpr | 打印产生的日志 | | mail | 邮件收发信息 | | news | 与新闻服务器相关的日志 | | syslog | 有syslogd服务产生的日志信息(虽然服务名称已经改了 rsyslogd 服务,但是很多配置都还是沿用了 syslogd 的,这里并没有修改服务名) | | user | 用户等级类别的日志信息 | | uucp | uucp 子系统的日志信息,uucp 时早期 Linux 系统进行数据传递的协议,后来也经常用在新闻组服务中 | | local0-local7 | 为本地使用预留的服务 |
日志级别 | 说明 |
---|---|
debug | 一般的调试信息说明,日志通信最多 |
info | 基本的通知信息 |
notice | 普通信息,但是有一定的重要性 |
warning | 警告信息,但是还不会影响到服务或系统的运行 |
err | 错误信息,一般达到 err 等级的信息已经可以影响到服务或系统的运行了 |
crit | 严重错误信息,比 err 等级还要严重,系统或整个软件不能正常工作 |
alert | 需要立刻修改的信息,比 crit 还要严重,必须立即采取行动 |
emerg | 内核崩溃等重要信息,系统已经无法使用了 |
none | 什么都不记录 |
注意:日志级别从上到下,级别从低到高,记录信息越来越少,优先处理的等级就越高,危害就越大。
由日志服务 rsyslogd 记录的日志文件,日志文件的格式包含以下4列:
- (1)事件产生的时间
- (2)发生事件的服务器的主机名
- (3)产生事件的服务名或程序名
- (4)事件的具体信息
日志管理服务应用实例
在
/etc/rsyslog.conf
中添加一个日志文件/var/log/hsp.log
,当有事件发送时,该文件会接收到信息并保存。- 在
/etc/rsyslog.conf
文件中增加如下命令*.* /var/log/hsp.log
- 在
新建
/var/log/hsp.log
文件,重启系统,再查看该文件内容。日志轮替
基本介绍
- 日志是重要的系统文件,记录和保存了系统中所有的重要事件。但是日志文件也需要进行定期的维护,因为日志文件是不断增长的,如果完全不进行日志维护,而任由其随意递增,那么用不了多久,我们的硬盘就会被写满。
- 日志维护的最主要的工作就是把旧的日志文件删除,从而腾出空间保存新的日志文件。这项工作如果靠管理员手工来完成,那其实是非常烦琐的,而且也容易忘记。那么 Linux 系统是否可以自动完成日志的轮替工作呢?
logrotate 就是用来进行日志轮替(也叫日志转储)的,也就是把旧的日志文件移动并改名,同时创建一个新的空日志文件用来记录新日志,当旧日志文件超出保存的范围时就删除。
日志轮替文件的命名规则
日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围时就删除。那么,旧的日志文件改名之后,如何命名呢?主要依靠
/etc/logrotate.conf
配置文件中的“dateext”参数。- 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,如“secure-20130605”。这样日志文件名不会重叠,也就不需要对日志文件进行改名,只需要保存指定的日志个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志;当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志;以此类推。
配置文件:/etc/logrotate.conf
可以设置全局的日志轮替规则,当然也可以单独给某个日志文件指定策略。
在这个配置文件中,主要分为三部分:第一部分是默认设置,如果需要转储的日志文件没有特殊配置,则遵循默认设置的参数;
- 第二部分是读取
/etc/logrotate.d/
目录中的日志轮替的子配置文件,也就是说,在/etc/logrotate.d/
目录中的所有符合语法规则的子配置文件也会进行日志轮替; - 第三部分是对 wtmp 和 btmp 日志文件的轮替进行设定,如果此设定和默认参数冲突,则当前设定生效(如 wtmp 的当前参数设定的轮替时间是每月,而默认参数的轮替时间是每周,则对 wtmp 这个日志文件来说,轮替时间是每月,当前的设定参数生效)。
logrotate 配置文件的主要参数
| 参数 | 参数说明 | | —- | —- | | daily | 日志的轮替周期是毎天 | | weekly | 日志的轮替周期是每周 | | monthly | 日志的轮控周期是每月 | | rotate 数宇 | 保留的日志文件的个数。0指没有备份 | | compress | 当进行日志轮替时,对旧的日志进行压缩 | | create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。如 create 0600 root utmp | | mail address | 当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址 | | missingok | 如果日志不存在,则忽略该日志的警告信息 | | nolifempty | 如果曰志为空文件,則不进行日志轮替 | | minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持,否则就算时间达到也不进行轮替 | | size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如 size 100k | | dateext | 使用日期作为日志轮替文件的后缀,如 secure-20130605 | | sharedscripts | 在此关键宇之后的脚本只执行一次 | | prerotate/cndscript | 在日志轮替之前执行脚本命令。endscript 标识 prerotate 脚本结束 | | postrolaie/endscripl | 在日志轮替之后执行脚本命令。endscripi 标识 postrotate 脚本结束 |
把自己的日志加入日志轮替
如果有些日志默认没有加入日志轮替(比如源码包安装的服务的日志,或者自己添加的日志),那么这些日志默认是不会进行日志轮替的,这样当然不符合我们对日志的管理要求。如果需要把这些日志也加入日志轮替,那该如何操作呢?
这里有两种方法:
- 第一种方法是直接在
/etc/logrotate.conf
配置文件中写入该日志的轮替策略,从而把日志加入轮替; - 第二种方法是在
/etc/logrotate.d/
目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被包含到主配置文件中,所以也可以把日志加入轮替。
推荐第二种方法,因为系统中需要轮替的日志非常多,如果全部直接写入/etc/logrotate.conf
配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
日志轮替服务应用实例
对于自己设置的 /var/log/hsp.log 日志,不是系统默认日志,而是通过 /etc/rsyslog.conf
配置文件自己生成的日志,所以默认这个日志是不会进行轮替的。如果需要把这个日志加入。就采用第二种方法,在 /etc/logrotate.d/
目录中建立此日志的轮替文件。
- 先创建
/etc/logrotate.d/hsplog
轮替文件 - 在文件中写入命令,即事先约定好的日志轮替规则
- 具体轮替的效果可以参考/var/log 下的boot.log 情况:
日志轮替机制原理
logrotate 在很多 Linux 发行版上都是默认安装的。系统会定时运行 logrotate,一般是每天一次。系统是这么实现按天执行的。crond 会每天定时执行 /etc/cron.daily 目录下的脚本,而这个目录下有个文件叫 logrotate。logrotate 通过这个文件依赖定时任务执行的。
查看内存日志
基本介绍
日志管理工具 journalctl 是CentOS 7上专有的日志管理工具,该工具是从 message 这个文件里读取信息。Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用 journalctl 一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是
/etc/systemd/journald.conf
journalctl 用法
- 查看所有日志(默认情况下 ,只保存本次启动的日志):
journalctl
- 查看内核日志(不显示应用日志):
journalctl -k
- 查看系统本次启动的日志:
journalctl -b
- 实时滚动显示最新日志:
journalctl -f
- 显示尾部的最新10行日志:
journalctl -n
- 查看所有日志(默认情况下 ,只保存本次启动的日志):