如何在 Linux 上使用 rsyslog 配置系统日志服务器如何在 Linux 上使用 rsyslog 配置系统日志服务器如何在 Linux 上使用 rsyslog 配置系统日志服务器如何在 Linux 上使用 rsyslog 配置系统日志服务器
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 rsyslog 配置系统日志服务器

syslog 服务器代表网络上的中央日志监控点,包括 Linux 或 Windows 服务器、路由器、交换机或任何其他主机在内的各种设备都可以通过网络向其发送日志。通过设置系统日志服务器,您可以过滤来自不同主机和设备的日志并将其合并到一个位置,以便您可以更轻松地查看和归档重要的日志消息。

在大多数 Linux 发行版上,rsyslog 是预安装的标准 syslog 守护进程。在客户端/服务器架构中配置,rsyslog 可以扮演这两个角色。作为系统日志服务器,rsyslog 可以从其他设备收集日志。同时,作为syslog客户端,rsyslog可以将其内部日志传输到远程syslog服务器。

在本教程中,我们将介绍如何在 Linux 上使用 rsyslog 配置集中式 syslog 服务器。在我们讨论细节之前,首先回顾一下 syslog 标准是有启发性的。

Syslog 标准基础

当使用syslog机制收集日志时,必须考虑三个重要事项:

  • 设施级别:要监视的流程类型

  • 严重性(优先级)级别:要收集什么类型的日志消息

  • 目的地:发送或记录日志消息的位置

让我们更详细地看一下配置是如何定义的。

设施级别定义了一种对内部系统流程进行分类的方法。 Linux 中的一些常见标准设施包括:

  • auth: 与身份验证(登录)相关的消息

  • cron:与计划进程或应用程序相关的消息

  • 守护进程: 与守护进程(内部服务器)相关的消息

  • 内核: 与内核相关的消息

  • 邮件: 与内部邮件服务器相关的消息

  • syslog: 与 syslog 守护进程本身相关的消息

  • lpr: 与打印服务器相关的消息

  • local0 - local7:由用户定义的消息(local7通常由Cisco和Windows服务器使用)

严重性(优先级)级别是标准化的,并通过使用标准缩写和分配的数字来定义,其中数字 7 是最高级别。这些级别是:

  • 紧急: 紧急 - 0

  • 警报: 警报 - 1

  • 暴击:严重 - 2

  • 错误: 错误 - 3

  • 警告: 警告 - 4

  • 通知: 通知 - 5

  • 信息: 信息 - 6

  • 调试: 调试 - 7

最后,目标语句强制系统日志客户端执行以下三个任务之一:(1) 将日志消息保存在本地文件上,(2) 通过 TCP/UDP 将它们路由到远程系统日志服务器,或者 (3) 将它们发送到 stdout,例如控制台。

在 rsyslog 中,系统日志配置基于以下架构构建。


[facility-level].[severity-level]  [destination]

在 Linux 上配置 rsyslog

现在我们了解了 syslog,是时候使用 rsyslog 将 Linux 服务器配置为中央 syslog 服务器了。我们还将了解如何将基于 Windows 的系统配置为 syslog 客户端,以将内部日志发送到 syslog 服务器。

第一步:初始系统要求

要将 Linux 主机设置为中央日志服务器,我们需要创建一个单独的 /var 分区,并分配足够大的磁盘大小或创建 LVM 特殊卷组。这样,系统日志服务器将能够随着时间的推移维持收集的日志的指数增长。

第二步:启用 Rsyslog 守护进程

rsyslog 守护进程预安装在现代 Linux 发行版上,但默认情况下未启用。要启用 rsyslog 守护进程接收外部消息,请编辑其位于 /etc/rsyslog.conf 中的配置文件。

打开文件进行编辑后,通过删除行开头的 # 符号来搜索并取消注释以下两行。


$ModLoad imudp 
$UDPServerRun 514

这将使 rsyslog 守护进程能够在 UDP 端口 514 上接收日志消息。 UDP 比 TCP 快得多,但不像 TCP 那样提供数据流可靠性。如果需要可靠传输,可以通过取消注释以下行来启用 TCP。


$ModLoad imtcp 
$InputTCPServerRun 514 

请注意,可以在服务器上同时设置 TCP 和 UDP 以侦听 TCP/UDP 连接。

第三步:创建日志收据模板

下一步我们需要为远程消息创建一个模板,并告诉 rsyslog 守护进程如何记录从其他客户端计算机接收到的消息。

使用文本编辑器打开 /etc/rsyslog.conf,并在 GLOBAL DIRECTIVES 块之前附加以下模板:


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

这个模板需要一些解释。 $template RemoteLogs 指令("RemoteLogs" 字符串可以更改为任何其他描述性名称)强制 rsyslog 守护进程将日志消息写入 /var/log/ 中的单独本地日志文件,其中日志文件名称是根据远程发送计算机的主机名以及生成日志的远程应用程序定义的。第二行 (*.* ?RemoteLogs) 意味着我们将 RemoteLogs 模板应用于所有收到的日志。

& ~ 符号表示重定向规则,用于告诉 rsyslog 守护进程停止进一步处理日志消息,而不是在本地写入它们。如果不使用此重定向,则除了上述日志文件之外,所有远程消息还将写入本地日志文件,这意味着它们实际上会被写入两次。使用此规则的另一个后果是系统日志服务器自己的日志消息只会写入以计算机主机名命名的专用文件中。

如果需要,您可以使用以下架构将具有特定设施或严重性级别的日志消息定向到此新模板。


[facility-level].[severity-level]    ?RemoteLogs

例如:

将所有优先级的所有内部身份验证消息定向到 RemoteLogs 模板:


authpriv.*   ?RemoteLogs 

将所有系统进程生成的信息性消息(邮件、身份验证和 cron 消息除外)定向到 RemoteLogs 模板:


*.info,mail.none,authpriv.none,cron.none    ?RemoteLogs

如果我们希望从远程客户端接收到的所有消息都写入以其 IP 地址命名的单个文件,您可以使用以下模板。我们为此模板分配一个新名称IpTemplate。


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

启用 rsyslog 守护进程并编辑其配置文件后,我们需要重新启动该守护进程。

在 Debian 7、Ubuntu 14.10 或 CentOS/RHEL 6 或更早版本上:


$ sudo service rsyslog restart

在 Ubuntu 15.04、Debian 8、Fedora 15 或 CentOS/RHEL 7 或更高版本上:


$ sudo systemctl restart rsyslog

我们可以使用netstat命令验证rsyslog守护进程是否正常运行。


$ sudo netstat -tulpn | grep rsyslog 

如果 rsyslog 守护程序侦听 UDP 端口,则输出应如下所示。


udp     0 0    0.0.0.0:514    0.0.0.0:*      551/rsyslogd 
udp6    0 0    :::514         :::*           551/rsyslogd 

如果 rsyslog 守护进程设置为侦听 TCP 连接,则输出应如下所示。


tcp     0 0     0.0.0.0:514   0.0.0.0:*     LISTEN    1891/rsyslogd 
tcp6    0 0     :::514        :::*          LISTEN    1891/rsyslogd

将 Windows 日志发送到远程 Rsyslog 服务器

要将基于 Windows 的客户端日志消息转发到我们的 rsyslog 服务器,我们需要一个 Windows syslog 代理。虽然有许多可以在 Windows 上运行的 syslog 代理,但我们可以使用 Datagram SyslogAgent,这是一个免费软件程序。

下载并安装 syslog 代理后,我们需要将其配置为作为服务运行。指定发送数据所使用的协议、远程 rsyslog 服务器的 IP 地址和端口,以及应传输的事件日志类型,如下所示。

设置完所有配置后,我们可以启动服务并使用 tailf 命令行实用程序查看中央 rsyslog 服务器上的日志文件。

结论

通过创建一个可以收集本地或远程主机日志文件的中央 rsyslog 服务器,我们可以更好地了解系统内部发生的情况,并且在其中任何一个主机变得无响应或崩溃时可以更轻松地调试问题。有关设置 syslog 客户端的信息,请参阅本指南。

©2015-2025 艾丽卡 support@alaica.com