日志管理

基本介绍

  1. 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统
    的安全信息、邮件相关信息、各种服务相关信息等。
  2. 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击
    时攻击者留下的痕迹。
  3. 可以这样理解日志是用来记录重大事件的工具

    系统常用的日志

    /var/log/ 目录就是系统日志文件的保存位置
    image.png
日志文件 说明
/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 服务兼容的。
原理:
image.png

  • 查询 Linux 中的 rsyslogd 服务是否启动

    1. ps aux | grep "rsyslog" | grep -v "grep"
    2. # -v 表示反向匹配 表示查询不包含grep的服务
  • 查询 rsyslogd 服务的自启动状态

    1. 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)事件的具体信息

image.png

日志管理服务应用实例

  • /etc/rsyslog.conf 中添加一个日志文件 /var/log/hsp.log,当有事件发送时,该文件会接收到信息并保存。

    • /etc/rsyslog.conf 文件中增加如下命令
      1. *.* /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 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。

在/etc/logrotate.d/ 配置轮替文件一览:
image.png

日志轮替服务应用实例

对于自己设置的 /var/log/hsp.log 日志,不是系统默认日志,而是通过 /etc/rsyslog.conf 配置文件自己生成的日志,所以默认这个日志是不会进行轮替的。如果需要把这个日志加入。就采用第二种方法,在 /etc/logrotate.d/ 目录中建立此日志的轮替文件。

  • 先创建 /etc/logrotate.d/hsplog 轮替文件
  • 在文件中写入命令,即事先约定好的日志轮替规则
  • 具体轮替的效果可以参考/var/log 下的boot.log 情况:

image.png

日志轮替机制原理

  • 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