Rsyslog日志系统配置指南
一、核心架构与组件
1.1 系统架构图
graph TD
A[日志源] -->|发送消息| B[Rsyslog接收器模块]
B --> C[过滤规则处理]
C --> D[输出模块]
D --> E[存储/转发目标]
二、基础配置步骤
2.1 安装与配置文件路径
# 系统安装命令
sudo apt install rsyslog # Debian/Ubuntu
sudo yum install rsyslog # CentOS/RHEL
# 主配置文件路径
/etc/rsyslog.conf
/etc/rsyslog.d/*.conf # 扩展配置目录
关键目录说明:
/etc/rsyslog.d/
:存放模块和自定义规则/var/log/
:默认日志存储路径
2.2 配置文件结构解析
# 主配置文件核心部分
module(load="imuxsock") # 本地日志模块
module(load="imklog") # 内核日志模块
# 全局参数
$WorkDirectory /var/spool/rsyslog # 缓存目录
$ActionQueueFileName queue # 队列文件名前缀
模块类型说明表:
模块名称 | 功能描述 | 配置示例 |
---|---|---|
imuxsock | 监听本地Unix套接字 | module(load="imuxsock") |
imfile | 读取文件日志 | input(type="imfile" File="/var/log/nginx/access.log") |
omelasticsearch | 发送到ES集群 | module(load="omelasticsearch") |
三、日志过滤与路由规则
3.1 基础过滤语法
# 按服务类型过滤
if $programname == 'nginx' then /var/log/nginx.log
& stop # 停止后续处理
# 按优先级过滤
if $syslogpriority >= 'err' then /var/log/errors.log
条件语法说明:
$programname
:日志来源程序名(如nginx)$syslogpriority
:日志级别(emerg,alert,crit,err,warn,notice,info,debug)
3.2 正则表达式匹配
# 匹配特定模式的日志
if $msg startswith 'ERROR' then /var/log/custom_errors.log
& stop
# 匹配IP地址
if $fromhost-ip == '192.168.1.100' then /var/log/server1.log
四、输出目标配置
4.1 本地文件输出
# 基础文件输出格式
auth,authpriv.* /var/log/auth.log
cron.* /var/log/cron.log
高级配置参数:
$FileCreateMode 0640
:文件权限设置$ActionFileEnableCheckpointing on
:启用检查点机制
4.2 远程日志服务器
# 发送到TCP服务器
*.* @@192.168.1.200:514 # 安全传输(TCP)
*.* @192.168.1.200:514 # 非安全传输(UDP)
传输协议对比:
协议 | 特点 | 适用场景 |
---|---|---|
TCP | 可靠传输,低延迟 | 重要日志场景 |
UDP | 高性能,无确认机制 | 高吞吐量场景 |
4.3 数据库存储
# 存入MySQL示例
action(type="ommysql"
server="localhost"
serverport="3306"
db="logs"
user="rsyslog"
password="your_password"
query="INSERT INTO messages (host, message) VALUES (?, ?)"
)
五、高级配置功能
5.1 加密传输配置
# TLS加密配置
module(load="omrelp") # 加密模块
*.* action(
type="omrelp"
target="192.168.1.200"
port="20514"
protocol="tcp"
template="RSYSLOG_TraditionalFileFormat"
queue.type="LinkedList"
)
加密参数说明:
protocol="tcp"
:强制使用TCP传输queue.type="LinkedList"
:队列类型确保消息不丢失
5.2 负载均衡配置
# 多服务器轮询
global(
queue.type="LinkedList"
queue.size="10000"
)
template(name="jsonTemplate" type="list" option.json="on"){
constant(value="{\"host\":\"")
property(name="hostname")
constant(value="\",\"message\":\"")
property(name="msg")
constant(value="\"}")
}
action(
type="omfwd"
server=["192.168.1.200","192.168.1.201"]
port="514"
protocol="tcp"
template="jsonTemplate"
loadbalance="on"
)
六、监控与故障排查
6.1 日志查看命令
# 实时查看日志
tail -f /var/log/syslog
# 查看服务状态
systemctl status rsyslog
# 日志文件权限检查
ls -l /var/log/nginx.log
6.2 常见问题处理
问题现象 | 可能原因 | 解决方案 |
---|---|---|
日志不记录 | 权限不足或路径错误 | 检查 $FileCreateMode 和目录权限 |
远程传输失败 | 防火墙阻断或端口未开放 | 检查防火墙规则和 telnet 端口测试 |
配置语法错误 | 模块未加载或语法格式错误 | 使用 rsyslogd -N1 验证配置 |
七、性能优化建议
7.1 缓存与队列配置
# 提升吞吐量配置
$ActionQueueType LinkedList # 链表队列
$ActionQueueSize 10000 # 队列最大条目
$ActionResumeRetryCount -1 # 无限重试
7.2 日志轮转配置
# 结合logrotate工具
/var/log/nginx.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
八、配置示例与对比表
8.1 完整配置示例
# /etc/rsyslog.d/10-nginx.conf
module(load="imfile" PollingInterval="10")
input(
type="imfile"
File="/var/log/nginx/access.log"
Tag="nginx-access"
StateFile="nginx-access"
Severity="info"
)
if $programname == 'nginx' then {
action(
type="omfile"
file="/var/log/nginx/nginx.log"
)
action(
type="omelasticsearch"
server="localhost"
searchIndex="nginx-logs"
)
}
8.2 模块对比表
模块名称 | 适用场景 | 配置复杂度 | 性能影响 |
---|---|---|---|
imfile | 文件日志监控 | 中 | 低 |
omelasticsearch | 发送到ES集群 | 高 | 高 |
omfwd | 远程日志转发 | 低 | 中 |
九、总结
通过以上配置,可实现以下核心功能:
✅ 多维度日志过滤(服务类型、优先级、正则匹配)
✅ 多目标输出(本地文件、远程服务器、数据库)
✅ 高可用架构(加密传输+负载均衡)
🔥 关键配置项 🔥
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
module(load="omelasticsearch")
建议结合Prometheus+Grafana建立监控看板,实时跟踪日志吞吐量和丢弃率。生产环境推荐使用 rsyslog 8.32+
版本以获得最佳性能。