网站搜索

如何在 CentOS/RHEL 7 中使用 Rsyslog 创建集中式日志服务器


为了使系统管理员能够识别或解决 CentOS 7RHEL 7 服务器系统上的问题,它必须了解并查看系统上在特定时间内发生的事件。系统中/var/log目录中存储的日志文件的一段时间。

Linux 机器上的 syslog 服务器可以充当网络上的中央监控点,所有服务器、网络设备、路由器、交换机以及生成日志的大多数内部服务(无论是与特定内部问题相关还是仅提供信息性消息)都可以发送日志。

CentOS/RHEL 7 系统上,Rsyslog 守护进程是预安装的主日志服务器,其次是 Systemd Journal Daemon (journald强>)。

Rsyslog服务器构建为客户端/服务器架构服务,并且可以同时实现这两个角色。它可以作为服务器运行并收集网络中其他设备传输的所有日志,也可以通过将记录的所有内部系统事件发送到远程端点系统日志服务器来作为客户端运行。

当 rsyslog 配置为客户端时,日志可以本地存储在本地文件系统上的文件中,也可以远程发送,而不是将它们写入存储在计算机上的文件中,或者在本地写入事件日志文件并将其发送到远程系统日志服务器同一时间。

Syslog 服务器使用以下方案操作任何日志消息:

type (facility).priority (severity)  destination(where to send the log)

A.设施或类型数据由生成消息的内部系统进程表示。在 Linux 中,生成日志的内部流程(设施)标准化如下:

  • auth=身份验证过程(登录)生成的消息。
  • cron= 由计划进程 (crontab) 生成的消息。
  • 守护进程=由守护进程(内部服务)生成的消息。
  • kernel=Linux 内核本身生成的消息。
  • 邮件 = 邮件服务器生成的消息。
  • syslog = rsyslog 守护进程本身生成的消息。
  • lpr=由本地打印机或打印服务器生成的消息。
  • local0 – local7=由管理员定义的自定义消息(local7 通常分配给 Cisco 或 Windows)。

B.优先级(严重性)级别也是标准化的。每个优先级都分配有标准缩写和数字,如下所述。第七优先级是所有优先级中的最高级别。

  • emerg=紧急情况 – 0
  • 警报=警报 – 1
  • 错误=错误 – 3
  • 警告=警告 – 4
  • 通知=通知 – 5
  • 信息=信息 – 6
  • 调试=调试 – 7

特殊 Rsyslog 关键字:

  • *=所有设施或优先事项
  • =设施没有给定优先级,例如:mail.none

C. 系统日志架构的第三部分由目标指令表示。 Rsyslog 守护进程可以发送日志消息,将其写入本地文件系统上的文件中(主要是在 /var/log/ 目录中的文件中),或者通过管道传输到另一个本地进程,或者发送到本地用户控制台(到标准输出),或通过 TCP/UDP 协议将消息发送到远程系统日志服务器,甚至将消息丢弃到 /dev/null

为了将CentOS/RHEL 7配置为中央日志服务器,首先我们需要检查并确保记录所有日志文件的/var分区足够大(至少几 GB),以便能够存储其他设备将发送的所有日志文件。使用单独的驱动器(LVM、RAID)来挂载 /var/log/ 目录是一个不错的决定。

要求

  1. CentOS 7.3安装过程
  2. RHEL 7.3 安装过程

如何在 CentOS/RHEL 7 服务器中配置 Rsyslog

1. 默认情况下,Rsyslog 服务会自动安装,并应在 CentOS/RHEL 7 中运行。要检查系统中是否启动了守护进程,请使用 root 权限发出以下命令。

systemctl status rsyslog.service

如果该服务默认未运行,请执行以下命令启动 rsyslog 守护进程。

systemctl start rsyslog.service

2. 如果您打算用作集中式日志服务器的系统上未安装 rsyslog 软件包,请发出以下命令来安装 rsyslog 软件包。

yum install rsyslog

3. 为了将 rsyslog 守护进程配置为集中式日志服务器,我们需要在系统上执行的第一步是使用您的打开和编辑最喜欢的文本编辑器,主要配置文件来自 /etc/rsyslog.conf,如下面的摘录所示。

vi /etc/rsyslog.conf

在 rsyslog 主配置文件中,搜索并取消注释以下行(删除行开头的井号标签#),以便通过 514 向 Rsyslog 服务器提供 UDP 传输接收港口。 UDP是Rsyslog用于日志传输的标准协议。

$ModLoad imudp 
$UDPServerRun 514

4. UDP协议没有TCP开销,这使得它比TCP协议传输数据更快。另一方面,UDP协议不保证传输数据的可靠性。

但是,如果您需要使用 TCP 协议进行日志接收,则必须从 /etc/rsyslog.conf 文件中搜索并取消注释以下行,以便将 Rsyslog 守护进程配置为绑定和侦听 514 上的 TCP 套接字港口。可以在 Rsyslog 服务器上同时配置用于接收的 TCP 和 UDP 侦听套接字。

$ModLoad imtcp 
$InputTCPServerRun 514 

5. 在下一步中,先不要关闭文件,创建一个用于接收远程消息的新模板。该模板将指示本地 Rsyslog 服务器在哪里保存收到的 syslog 网络客户端发送的消息。该模板必须添加在 GLOBAL DIRECTIVES 块的开头之前,如下面的摘录所示。

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
. ?RemoteLogs & ~

上述 $template RemoteLogs 指令指示 Rsyslog 守护进程根据客户端计算机名称和生成消息的远程客户端设施(应用程序)收集所有收到的日志消息并将其写入不同的文件。定义的属性出现在模板配置中:%HOSTNAME%%PROGRAMNAME%

所有这些日志文件都将写入本地文件系统,以客户端计算机的主机名命名的专用文件,并存储在 /var/log/ 目录中。

& ~ 重定向规则指示本地 Rsyslog 服务器停止进一步处理收到的日志消息并丢弃这些消息(不将其写入内部日志文件)。

RemoteLogs 名称是为此模板指令指定的任意名称。您可以使用您认为最适合您的模板的任何名称。

为了将所有从客户端接收到的消息写入以远程客户端的 IP 地址命名的单个日志文件中,而不过滤生成消息的工具,请使用以下摘录。

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

模板的另一个示例,其中带有身份验证设施标志的所有消息都将记录到名为“TmplAuth”的模板中。

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

以下是 Rsyslog 7 服务器模板定义的摘录:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

上面的模板摘录也可以写成:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

要编写复杂的 Rsyslog 模板,请通过发出 man rsyslog.conf 命令来阅读 Rsyslog 配置文件手册或查阅 Rsyslog 在线文档。

6. 按照上述说明使用自己的设置编辑 Rsyslog 配置文件后,重新启动 Rsyslog 守护程序,以便通过发出以下命令应用更改:

service rsyslog restart

7. 到目前为止,Rsyslog 服务器应该配置为充当集中式日志服务器并记录来自 syslog 客户端的消息。要验证 Rsyslog 网络套接字,请使用 root 权限运行 netstat 命令并使用 grep 过滤 rsyslog 字符串。

netstat -tulpn | grep rsyslog 

8. 如果您在 CentOS/RHEL 7 中启用了 SELinux,请发出以下命令将 SELinux 配置为根据网络套接字类型允许 rsyslog 流量。

semanage -a -t syslogd_port_t -p udp 514
semanage -a -t syslogd_port_t -p tcp 514 

9. 如果防火墙已启用并处于活动状态,请运行以下命令以添加在 Firewalld 中打开 rsyslog 端口所需的规则。

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd –reload

就这样! Rsyslog 现在配置为服务器模式,可以集中来自远程客户端的日志。在下一篇文章中,我们将了解如何在 CentOS/RHEL 7 服务器上配置 Rsyslog 客户端。

使用 Rsyslog 服务器作为远程日志消息的中央监控点,您可以检查日志文件并观察客户端的健康状态或在系统崩溃或受到某种攻击时更轻松地调试客户端的问题。