Rsyslog 服务端与客户端部署与配置指南

本文档将详细介绍如何在服务端和客户端部署并配置 rsyslog,以便实现日志集中收集和管理。并包括日志文件轮转的配置。

1. 服务端部署与配置

1.1 安装 rsyslog

在服务端,首先需要安装 rsyslog 服务:

yum install -y rsyslog

安装完成后,启用并启动 rsyslog 服务:

systemctl enable rsyslog
systemctl start rsyslog

1.2 服务端配置文件

编辑服务端的 /etc/rsyslog.conf 文件,配置如下:

bash复制代码# 加载本地系统日志模块(例如通过 logger 命令发送的日志)
$ModLoad imuxsock

# 加载内核日志模块(之前由 rklogd 处理)
$ModLoad imklog

# 加载 UDP 模块,支持通过 UDP 协议接收日志
$ModLoad imudp

# 配置 UDP 服务器在 514 端口接收日志
$UDPServerRun 514

# 加载 TCP 模块,支持通过 TCP 协议接收日志
$ModLoad imtcp

# 配置 TCP 服务器在 514 端口接收日志
$InputTCPServerRun 514

# 定义日志存储路径模板(按客户端 IP 分类)
$template RemoteLogs, "/var/log/rsyslog/%fromhost-ip%/%fromhost-ip%.log"

# 设置默认的文件格式为传统的 rsyslog 格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# 加载 /etc/rsyslog.d/ 目录下的所有配置文件
$IncludeConfig /etc/rsyslog.d/*.conf

# 将所有客户端的日志转发到指定目录,并按日期和客户端 IP 分类存储
*.* ?RemoteLogs

1.3 重启服务端 rsyslog 服务

配置完成后,需要重启 rsyslog 服务以应用新的配置:

systemctl restart rsyslog

1.4 配置 history 相关命令

为了保证在客户端可以记录历史命令,并通过 logger 发送到 rsyslog,编辑 /etc/profile 文件,加入以下配置:

# 设置历史命令的最大记录数
HISTFILESIZE=2000
HISTSIZE=2000
export HISTTIMEFORMAT="%F %T: "
# 多个终端同时操作,避免覆盖,采用追加的方式
shopt -s histappend
# 使用 logger 记录执行过的命令
export PROMPT_COMMAND='{ command=$(history 1 | { read x y; echo $y; }); logger -p local5.notice -t bash -i "user=$USER, ppid=$PPID, from=$SSH_CLIENT, pwd=$PWD, command: $command"; }'

修改完成之后,让profile 文件生效

source /etc/profile

2. 客户端部署与配置

2.1 安装 rsyslog

在客户端,首先需要安装 rsyslog 服务:

yum install -y rsyslog

安装完成后,启用并启动 rsyslog 服务:

systemctl enable rsyslog
systemctl start rsyslog

2.2 客户端配置文件

编辑客户端的 /etc/rsyslog.conf 文件,配置如下:

⚠️ 注意 修改rsyslog 服务端的地址,@ 表示走udp,@@ 表示走tcp

bash复制代码# 加载本地系统日志模块(例如通过 logger 命令发送的日志)
$ModLoad imuxsock

# 加载内核日志模块(之前由 rklogd 处理)
$ModLoad imklog

# 加载 UDP 模块,支持通过 UDP 协议接收日志
$ModLoad imudp

# 加载 TCP 模块,支持通过 TCP 协议接收日志
$ModLoad imtcp

# 设置默认的文件格式为传统的 rsyslog 格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# 加载 /etc/rsyslog.d/ 目录下的所有配置文件
$IncludeConfig /etc/rsyslog.d/*.conf

# 将所有日志转发到服务端 (10.0.1.11) 端口 514,使用 UDP 协议
*.* @10.0.1.11:514

2.3 配置 history 相关命令

为了保证在客户端可以记录历史命令,并通过 logger 发送到 rsyslog,编辑 /etc/profile 文件,加入以下配置:

# 设置历史命令的最大记录数
HISTFILESIZE=2000
HISTSIZE=2000
export HISTTIMEFORMAT="%F %T: "
# 多个终端同时操作,避免覆盖,采用追加的方式
shopt -s histappend
# 使用 logger 记录执行过的命令
export PROMPT_COMMAND='{ command=$(history 1 | { read x y; echo $y; }); logger -p local5.notice -t bash -i "user=$USER, ppid=$PPID, from=$SSH_CLIENT, pwd=$PWD, command: $command"; }'

修改完成之后,让profile 文件生效

source /etc/profile

2.4 重启客户端 rsyslog 服务

配置完成后,需要重启 rsyslog 服务:

systemctl restart rsyslog

2.5 验证rsyslog

syslogger "This is a test log message from the client"

3. 服务端 Logrotate 配置

为了防止日志文件过大,建议对日志文件进行轮转。我们可以通过配置 logrotate 来实现日志文件的切割。

3.1 安装 logrotate

在服务端安装 logrotate 工具:

yum install -y logrotate

3.2 配置 logrotate

编辑 /etc/logrotate.d/rsyslog 配置文件,进行日志轮转配置。配置如下:

/var/log/rsyslog/*/*.log {
    missingok                # 如果日志文件丢失,不报错
    daily                    # 每天轮换一次
    copytruncate             # 在复制日志并截断当前日志文件时不需要停止服务
    rotate 30                # 保留最近 30 天的日志文件
    notifempty               # 如果日志文件为空,则不轮换
    dateext                  # 使用日期作为日志文件的扩展名
}

3.3 验证 logrotate 配置

可以通过以下命令手动触发日志轮转:

logrotate /etc/logrotate.d/rsyslog

4. 总结

本文档介绍了如何在服务端和客户端部署和配置 rsyslog,并配置了客户端将日志转发到服务端。服务端根据客户端的 IP 地址生成不同的日志文件。最后,还配置了日志轮转,以确保日志文件不会过大。

通过这些配置,你可以实现一个基本的集中日志管理系统。如果有其他需求,仍可根据实际情况进一步优化配置。