Rsyslog 日志管理配置教程

Rsyslog 是 Linux 系统默认的日志服务,也是传统 syslog 的增强版本。它负责收集和处理系统和应用产生的日志信息,支持灵活的过滤、格式化和转发功能。在搬瓦工 VPS 上合理配置 Rsyslog 有助于高效管理日志、排查问题和进行安全审计。本教程将全面讲解 Rsyslog 的配置方法。

一、Rsyslog 基础概念

1.1 日志设施(Facility)

Rsyslog 使用设施来区分日志来源:

  • kern:内核消息
  • auth / authpriv:认证与安全相关
  • mail:邮件系统
  • cron:计划任务
  • daemon:系统守护进程
  • local0 ~ local7:自定义用途

1.2 日志级别(Severity)

从高到低依次为:emerg、alert、crit、err、warning、notice、info、debug。

二、查看与管理 Rsyslog

# 查看 Rsyslog 状态
systemctl status rsyslog

# 启动/重启 Rsyslog
systemctl start rsyslog
systemctl restart rsyslog

# 检查配置文件语法
rsyslogd -N 1

# 查看 Rsyslog 版本
rsyslogd -v

# 查看默认日志文件
ls -la /var/log/syslog /var/log/auth.log /var/log/kern.log

三、配置文件详解

Rsyslog 的主配置文件是 /etc/rsyslog.conf,额外配置文件存放在 /etc/rsyslog.d/ 目录中。

3.1 默认配置结构

# /etc/rsyslog.conf 主要结构

# 模块加载
module(load="imuxsock")    # 本地系统日志
module(load="imklog")      # 内核日志

# 全局配置
global(
    workDirectory="/var/spool/rsyslog"
    maxMessageSize="8k"
)

# 默认日志规则
auth,authpriv.*             /var/log/auth.log
*.*;auth,authpriv.none      -/var/log/syslog
kern.*                      -/var/log/kern.log
mail.*                      -/var/log/mail.log
cron.*                      /var/log/cron.log

3.2 过滤规则

# 基于属性的过滤
:programname, isequal, "nginx" /var/log/nginx/rsyslog.log

# 基于消息内容过滤
:msg, contains, "error" /var/log/error-messages.log

# 基于正则表达式过滤
:msg, regex, "failed.*password" /var/log/failed-auth.log

# 丢弃特定日志(使用 stop)
:programname, isequal, "noisy-app" stop

# 基于发送者 IP 过滤
:fromhost-ip, isequal, "192.168.1.100" /var/log/remote/server100.log

3.3 自定义模板

# 定义日志格式模板
template(name="CustomFormat" type="string"
    string="%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"
)

# 使用模板
auth,authpriv.*     /var/log/auth.log;CustomFormat

# 按日期分目录存储
template(name="DailyLog" type="string"
    string="/var/log/daily/%$YEAR%/%$MONTH%/%$DAY%/%PROGRAMNAME%.log"
)
*.*     ?DailyLog

# JSON 格式输出
template(name="JsonFormat" type="string"
    string="{\"timestamp\":\"%TIMESTAMP:::date-rfc3339%\",\"host\":\"%HOSTNAME%\",\"program\":\"%programname%\",\"severity\":\"%syslogseverity-text%\",\"message\":\"%msg:::json%\"}\n"
)

四、日志转发(集中化管理)

4.1 配置日志接收端(VPS 端)

# /etc/rsyslog.d/10-receive.conf

# 通过 TCP 接收日志(推荐)
module(load="imtcp")
input(type="imtcp" port="514")

# 通过 UDP 接收日志
module(load="imudp")
input(type="imudp" port="514")

# 按来源 IP 分文件存储
template(name="RemoteLog" type="string"
    string="/var/log/remote/%FROMHOST-IP%/%PROGRAMNAME%.log"
)
if $fromhost-ip != '127.0.0.1' then ?RemoteLog
& stop

4.2 配置日志发送端

# /etc/rsyslog.d/20-forward.conf

# 通过 TCP 转发所有日志
*.* @@log-server-ip:514

# 通过 UDP 转发
*.* @log-server-ip:514

# 只转发认证日志
auth,authpriv.* @@log-server-ip:514

# 带队列的可靠转发
action(
    type="omfwd"
    target="log-server-ip"
    port="514"
    protocol="tcp"
    queue.type="LinkedList"
    queue.filename="fwd_to_logserver"
    queue.maxDiskSpace="1g"
    queue.saveOnShutdown="on"
    action.resumeRetryCount="-1"
)

4.3 TLS 加密传输

# 安装 TLS 模块
apt install rsyslog-gnutls -y

# 接收端配置
module(load="imtcp"
    StreamDriver.Name="gtls"
    StreamDriver.Mode="1"
    StreamDriver.AuthMode="x509/name"
)
global(
    DefaultNetstreamDriverCAFile="/etc/rsyslog-certs/ca.pem"
    DefaultNetstreamDriverCertFile="/etc/rsyslog-certs/server-cert.pem"
    DefaultNetstreamDriverKeyFile="/etc/rsyslog-certs/server-key.pem"
)
input(type="imtcp" port="6514")

# 发送端配置
global(
    DefaultNetstreamDriverCAFile="/etc/rsyslog-certs/ca.pem"
    DefaultNetstreamDriverCertFile="/etc/rsyslog-certs/client-cert.pem"
    DefaultNetstreamDriverKeyFile="/etc/rsyslog-certs/client-key.pem"
)
action(
    type="omfwd"
    target="log-server-ip"
    port="6514"
    protocol="tcp"
    StreamDriver="gtls"
    StreamDriverMode="1"
    StreamDriverAuthMode="x509/name"
)

五、应用日志接入

5.1 Nginx 日志接入 Rsyslog

# Nginx 配置(/etc/nginx/nginx.conf)
error_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_error;
access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_access combined;

# Rsyslog 配置
local7.* /var/log/nginx/rsyslog-nginx.log

5.2 自定义应用日志

# 应用通过 logger 命令发送日志
logger -t myapp -p local0.info "应用启动成功"
logger -t myapp -p local0.err "数据库连接失败"

# Rsyslog 中配置接收
local0.* /var/log/myapp/app.log

六、性能优化

# /etc/rsyslog.d/50-performance.conf

# 异步写入(减少磁盘 IO)
main_queue(
    queue.workerthreads="4"
    queue.type="LinkedList"
    queue.size="100000"
    queue.dequeueBatchSize="1000"
)

# 使用缓冲写入
*.*     action(type="omfile" file="/var/log/syslog"
              asyncWriting="on"
              flushOnTXEnd="off"
              ioBufferSize="64k"
              flushInterval="1"
       )

七、常见问题排查

# 启用调试模式
rsyslogd -d -n

# 查看 Rsyslog 内部状态
cat /var/spool/rsyslog/imtcp-stats

# 测试日志发送
logger -t test "这是一条测试日志"
tail -f /var/log/syslog | grep test

# 检查防火墙(接收端)
ufw allow 514/tcp
ufw allow 514/udp

总结

Rsyslog 是 Linux 系统日志管理的核心组件。通过合理配置过滤规则、自定义模板和日志转发,可以在搬瓦工 VPS 上构建高效的日志管理体系。建议搭配 Logrotate 日志轮转Journalctl 日志查看 一起使用,实现完整的日志生命周期管理。选购搬瓦工 VPS 请参考全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。