网站搜索

如何在 RHEL 7 中管理系统日志(配置、轮换和导入到数据库) - 第 5 部分


为了确保您的 RHEL 7 系统安全,您需要了解如何通过检查日志文件来监控此类系统上发生的所有活动。因此,您将能够检测任何异常或潜在的恶意活动,并执行系统故障排除或采取其他适当的操作。

RHEL 7中,rsyslogd守护进程负责系统日志记录并从/etc/rsyslog.conf读取其配置(该文件指定所有系统日志的默认位置)来自 /etc/rsyslog.d 内的文件(如果有)。

Rsyslogd 配置

快速检查 rsyslog.conf 将有助于开始。该文件分为 3 个主要部分:模块(因为 rsyslog 遵循模块化设计)、全局指令(用于设置 rsyslogd 守护进程的全局属性)和 >规则。您可能会猜到,最后一部分指示记录或显示的内容(也称为选择器)以及位置,这将是我们整篇文章的重点。

rsyslog.conf 中的典型行如下:

在上图中,我们可以看到一个选择器由一对或多对以分号分隔的 Facility:Priority 组成,其中 Facility 描述了消息的类型(请参阅 RFC 3164 中的第 4.1.1 节来了解rsyslog 可用的设施的完整列表)和优先级指示其严重性,可以是以下不言自明的单词之一:

  1. 调试
  2. 信息
  3. 注意
  4. 警告
  5. 暴击
  6. 警报
  7. 新兴

尽管本身不是优先级,但关键字表示所有给定设施都没有优先级。

注意:给定的优先级表示应记录该优先级及以上优先级的所有消息。因此,上面示例中的行指示rsyslogd守护进程记录优先级信息或更高优先级的所有消息(无论设施如何),除了那些属于mail的消息authprivcron 服务(不会考虑来自此设施的消息)到 /var/log/messages

您还可以使用冒号对多个设施进行分组,以对所有设施应用相同的优先级。因此,该行:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

可以重写为

*.info;mail,authpriv,cron.none                /var/log/messages

换句话说,mailauthprivcron 设施被分组,并且关键字 none 应用于其中三个。

创建自定义日志文件

要将所有守护进程消息记录到 /var/log/howtoing.log,我们需要在 rsyslog.conf 或单独的文件中添加以下行(更易于管理) )在 /etc/rsyslog.d 内:

daemon.*    /var/log/tecmint.log

让我们重新启动守护进程(请注意,服务名称不以 d 结尾):

systemctl restart rsyslog

并在重新启动两个随机守护进程之前和之后检查我们的自定义日志的内容:

作为自学练习,我建议您尝试使用这些设施和优先级,并将附加消息记录到现有日志文件中,或者像前面的示例一样创建新消息。

使用 Logrotate 旋转日志

为了防止日志文件无休止地增长,logrotate实用程序用于轮换、压缩、删除或邮寄日志,从而简化对生成大量日志文件的系统的管理。

建议阅读:如何在 Linux 中使用 Logrotate 设置和管理日志轮转

Logrotate 作为 cron 作业 (/etc/cron.daily/logrotate) 每天运行,并从 /etc/logrotate 读取其配置.conf 以及位于 /etc/logrotate.d 中的文件(如果有)。

与 rsyslog 的情况一样,即使您可以在主文件中包含特定服务的设置,为每个服务创建单独的配置文件也将有助于更好地组织您的设置。

让我们看一下典型的 logrotate.conf

在上面的示例中,logrotate 将对 /var/loh/wtmp 执行以下操作: 尝试每月仅轮换一次,但前提是文件至少 <大小为 1 MB,然后创建一个全新的日志文件,并将权限设置为 0664,并将所有权授予用户 root 和组 utmp。接下来,仅保留一个存档日志,如旋转指令所指定:

现在让我们考虑 /etc/logrotate.d/httpd 中的另一个示例:

您可以在其手册页(man logrotate 和 man logrotate.conf)中阅读有关 logrotate 设置的更多信息。这两个文件均以 PDF 格式随本文提供,以方便您阅读。

作为一名系统工程师,您可以决定日志的存储时间和格式,具体取决于您是否在单独的分区中有 /var /< 逻辑卷。否则,您确实需要考虑删除旧日志以节省存储空间。另一方面,根据公司或客户的内部政策,您可能被迫保留多个日志以供将来的安全审核。

将日志保存到数据库

当然,检查日志(即使借助诸如 grep 和正则表达式之类的工具)可能会成为一项相当乏味的任务。因此,rsyslog 允许我们将它们导出到数据库(OTB 支持的 RDBMS 包括 MySQL、MariaDB、PostgreSQL 和 Oracle)。

本教程的这一部分假设您已经在管理日志的同一 RHEL 7 机器中安装了 MariaDB 服务器和客户端:

yum update && yum install mariadb mariadb-server mariadb-client rsyslog-mysql
systemctl enable mariadb && systemctl start mariadb

然后使用 mysql_secure_installation 实用程序设置 root 用户的密码和其他安全注意事项:

注意:如果您不想使用 MariaDB root 用户向数据库插入日志消息,您可以配置其他用户帐户这样做。解释如何做到这一点超出了本教程的范围,但在 MariaDB 知识库中有详细解释。在本教程中,为简单起见,我们将使用 root 帐户。

接下来,从 GitHub 下载 createDB.sql 脚本并将其导入到您的数据库服务器中:

mysql -u root -p < createDB.sql

最后,将以下行添加到 /etc/rsyslog.conf 中:

$ModLoad ommysql
$ActionOmmysqlServerPort 3306
*.* :ommysql:localhost,Syslog,root,YourPasswordHere

重新启动 rsyslog 和数据库服务器:

systemctl restart rsyslog 
systemctl restart mariadb

使用SQL语法查询日志

现在执行一些将修改日志的任务(例如停止和启动服务),然后登录到数据库服务器并使用标准 SQL 命令在日志中显示和搜索:

USE Syslog;
SELECT ReceivedAt, Message FROM SystemEvents;

概括

在本文中,我们解释了如何设置系统日志记录、如何轮换日志以及如何将消息重定向到数据库以便于搜索。我们希望这些技能在您准备 RHCE 考试和履行日常职责时有所帮助。

一如既往,我们非常欢迎您提供反馈。请随时使用下面的表格来联系我们。