怎样在 Linux 上设置 Rsyslog 远程日志记录
每个 Linux 发行版都有某种记录机制来记录所有系统活动。不久前,我们提供了存储在 /var/log 下的20 个日志文件的列表,这些文件在故障排除时可能会有所帮助。这些日志对于系统管理员进行故障排除非常重要。
以下是记录消息的三种常用方法:
- 在同一台服务器上登录:消息被写入本地硬盘驱动器/本地数据库
- 在远程服务器上登录:许多系统通过网络将其日志转发到中央日志服务器。在中央日志服务器上,来自各种系统的消息被写入本地硬盘驱动器/数据库。
- 中继日志记录:分支“A”和分支“B”在 2 个不同的服务器上记录消息。这些服务器依次将消息记录到“总部”。
Rsyslog 是多个 Linux 发行版(包括基于 Debian 和 Red Hat 的系统)上的默认日志记录程序。除了实现 syslog 协议外,rsyslog 还添加了其他功能,例如基于内容的过滤。这也使用 TCP 进行传输,并提供了许多配置选项。
本文解释了如何实现上述方法2。ie 这解释了如何设置中央日志服务器,并将日志从各个服务器发送到中央日志服务器。
此设置将帮助您从中央日志服务器分析基础架构中所有服务器的日志文件。
安装
Rsyslog 是 Debian 发行版和基于 Red Hat 的系统中的默认日志程序。如果您的系统没有 rsyslog,请根据您的发行版如下所示安装它。
apt-get install rsyslog rsyslog-doc
(or)
yum install rsyslog rsyslog-doc
Rsyslog 配置存储在 /etc/ryslog.conf 文件和 /etc/rsyslog.d/ 目录下的文件中。
配置结构
在了解如何设置中央日志服务器之前,最好了解 rsyslog 的配置结构。
rsyslog配置文件的结构如下
- 模块
- 配置指令
- 规则线
模块
Rsyslog 具有模块化架构。它使功能可以通过这些模块动态添加。模块分类如下:
- 输入模块——用于从各种来源收集信息
- 输出模块 - 用于将消息写入各个位置(文件、套接字等)
- Parser Modules – 用于解析消息内容
请注意,还有其他类别的模块可用。这是为了概述模块可以做什么。
配置指令
所有配置指令必须每行指定一个,并且必须以美元符号 ($) 开头。它影响规则。
规则线
每个规则行都包含两个字段,一个“选择器字段”和一个“操作字段”。选择器字段分为两个,“设施和优先级”。Action 指定必须对匹配的规则执行什么操作。
示例配置
######################
MODULES
######################
$ModLoad imuxsock
$ModLoad imklog
######################
Directives
######################
# Set the default permissions for all log files.
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
######################
RULES
######################
mail.info /var/log/mail.info
mail.warn /var/log/mail.warn
mail.err /var/log/mail.err
daemon.* /var/log/daemon.log
注意:在 Linux 中查看大量日志文件的 10 个示例在您处理日志文件时可能会有所帮助。
模板
模板是 rsyslog 提供的一个非常重要的特性。它允许用户以他们想要的格式记录消息。它还可用于创建动态文件名以记录消息。在数据库日志记录的情况下,模板用于将消息转换为适当的 SQL 语句。
示例模板如下所示:
$template mytemplate “Text-Before %msg% Text-After\n”
上面的模板会将消息“This is hello from rsyslog”记录为:
Text-Before This is hello from rsyslog Text-After
我们将看到如何使用模板动态生成日志文件。
中央日志服务器
上面的部分应该已经概述了 rsyslog 以及如何配置它。现在我们将继续设置一个中央日志系统。
对于我们的讨论,我们将中央日志服务器的服务器 IP 设置为“192.168.1.1”,所有来自客户端的日志消息都应该被转发。
将以下行添加到中央日志服务器服务器的 rsyslog.conf(在此示例中,在 ip-address 192.168.1.1 的日志服务器上添加了以下行):
# provides support for local system logging
$ModLoad imuxsock
# provides kernel logging support (previously done by rklogd)
$ModLoad imklog
# provides UDP syslog reception. For TCP, load imtcp.
$ModLoad imudp
# For TCP, InputServerRun 514
$UDPServerRun 514
# This one is the template to generate the log filename dynamically, depending on the client's IP address.
$template FILENAME,"/var/log/%fromhost-ip%/syslog.log"
# Log all messages to the dynamically formed file. Now each clients log (192.168.1.2, 192.168.1.3,etc...), will be under a separate directory which is formed by the template FILENAME.
*.* ?FILENAME
将上述行添加到 rsyslog.conf 后,重新启动 rsyslog 进程。现在 rsyslog 服务器将准备好接受消息。
# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
将以下行添加到应将其日志消息发送到中央服务器的各个客户端计算机上的 rsyslog.conf。
$ModLoad imuxsock
$ModLoad imklog
# Provides UDP forwarding. The IP is the server's IP address
*.* @192.168.1.1:514
# Provides TCP forwarding. But the current server runs on UDP
# *.* @@192.168.1.1:514
在客户端上重新启动 rsyslog 进程。现在 rsyslog 中央服务器(在本例中为 192.168.1.1)将接收来自已配置客户端的所有日志消息,并且每个客户端的日志将放置在单独的目录下。
- 点赞
- 收藏
- 关注作者
评论(0)