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% 循环折扣。