Linux 系统 rsyslog 配置
Linux 系统 rsyslog 配置指南
rsyslog 是 Linux 系统的下一代日志处理系统,功能强大且高效。以下是从基础到高级的全面配置指南:
1. 安装与基础配置
安装 rsyslog
# Ubuntu/Debian
sudo apt update
sudo apt install rsyslog# CentOS/RHEL
sudo yum install rsyslog
基础配置
配置文件:/etc/rsyslog.conf
# 查看默认配置
sudo vim /etc/rsyslog.conf# 启用的模块
module(load="imuxsock") # 提供本地系统日志支持
module(load="imklog") # 提供内核日志支持
module(load="immark") # 提供标记消息支持# 标准日志规则
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
重启服务
sudo systemctl restart rsyslog
sudo systemctl enable rsyslog
2. 关键配置功能详解
日志分级
级别 | 优先级 | 描述 |
---|---|---|
debug | 7 | 调试信息 |
info | 6 | 一般信息 |
notice | 5 | 正常但重要的事件 |
warning | 4 | 警告 |
err | 3 | 错误 |
crit | 2 | 严重情况 |
alert | 1 | 需要立即采取行动 |
emerg | 0 | 系统不可用 |
常用日志路径
日志文件 | 描述 |
---|---|
/var/log/messages | 系统级常规日志 |
/var/log/secure | 认证相关日志 |
/var/log/cron | 计划任务日志 |
/var/log/maillog | 邮件系统日志 |
/var/log/boot.log | 系统启动日志 |
3. 高级配置功能
3.1 远程日志集中管理
日志发送端配置
sudo vim /etc/rsyslog.conf# 添加在文件底部
# UDP方式(快速但不保证送达)
*.* @192.168.1.100:514# TCP方式(可靠传输)
*.* @@192.168.1.100:514# 重试队列(如果服务器离线)
$ActionQueueFileName queue # 唯一名称
$ActionQueueMaxDiskSpace 1g # 最大磁盘空间
$ActionQueueSaveOnShutdown on # 关机保存
$ActionQueueType LinkedList # 队列类型
$ActionResumeRetryCount -1 # 无限重试
日志接收端配置
sudo vim /etc/rsyslog.conf# 启用TCP/UDP接收
module(load="imudp")
input(type="imudp" port="514")module(load="imtcp")
input(type="imtcp" port="514")# 指定接收日志的目录
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
& ~ # 停止进一步处理
3.2 日志过滤与路由
# 将sshd日志保存到单独文件
:programname, isequal, "sshd" /var/log/ssh.log# 丢弃指定程序的日志
:msg, contains, "debug" ~# 按严重级别过滤
*.emerg /var/log/critical.log# 自定义时间格式
$template MyFormat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag% %msg%\n"
3.3 性能优化配置
# /etc/rsyslog.conf 顶部添加
$MaxMessageSize 64k # 最大日志大小
$WorkDirectory /var/lib/rsyslog # 工作目录
$MainMsgQueueSize 50000 # 主队列大小# 批量处理
$ActionQueueSize 100000 # 队列大小
$ActionQueueTimeoutEnqueue 500 # 超时(毫秒)
$ActionDequeueBatchSize 2000 # 批量处理数
4. 日志轮转配置
配置文件:/etc/logrotate.d/rsyslog
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log
{daily # 按天轮转rotate 30 # 保留30份size 100M # 或达到100MB轮转missingok # 文件不存在不报错compress # 压缩旧日志delaycompress # 延迟压缩sharedscripts # 所有文件处理完后运行脚本postrotate/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || trueendscript
}
5. 安全增强配置
5.1 TLS加密传输
# 生成证书
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/rsyslog-key.pem \
-out /etc/ssl/certs/rsyslog-cert.pem -days 365 -nodes# 发送端配置
$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/ssl/certs/ca-cert.pem
$DefaultNetstreamDriverCertFile /etc/ssl/certs/client-cert.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/private/client-key.pem
*.* @@(o)192.168.1.100:6514 # 使用TLS端口6514# 接收端配置
global(DefaultNetstreamDriver="gtls"DefaultNetstreamDriverCAFile="/etc/ssl/certs/ca-cert.pem"DefaultNetstreamDriverCertFile="/etc/ssl/certs/server-cert.pem"DefaultNetstreamDriverKeyFile="/etc/ssl/private/server-key.pem"
)
5.2 访问控制
# 接收端限制访问
$AllowedSender UDP, 192.168.1.0/24
$AllowedSender TCP, 192.168.1.0/24
$AllowedSender TLS, 192.168.1.0/24
5.3 SELinux策略
# 开放rsyslog端口
sudo semanage port -a -t syslogd_port_t -p udp 514
sudo semanage port -a -t syslogd_port_t -p tcp 514# 允许写入远程日志目录
sudo semanage fcontext -a -t var_log_t "/var/log/remote(/.*)?"
sudo restorecon -Rv /var/log/remote
6. 监控与故障排除
检查服务状态
sudo systemctl status rsyslog
sudo rsyslogd -N1 # 测试配置文件语法
日志分析工具
# 实时监控日志
sudo tail -f /var/log/messages# 筛选特定时间范围日志
journalctl --since "2023-01-01 00:00:00" --until "2023-01-02 00:00:00"# 查看最后100条错误
sudo grep -i error /var/log/messages | tail -100
网络诊断
# 测试UDP发送
echo "Test message" | nc -u -w1 192.168.1.100 514# 检查端口监听
sudo netstat -tulnp | grep rsyslog
sudo tcpdump -i any port 514 -vv
7. 高级集成方案
与Elastic Stack集成
# 安装Logstash转发模块
sudo apt install logstash# /etc/logstash/conf.d/rsyslog.conf
input {udp {port => 514type => "syslog"}tcp {port => 514type => "syslog"}
}
output {elasticsearch {hosts => ["localhost:9200"]index => "syslog-%{+YYYY.MM.dd}"}
}
使用Prometheus监控日志速率
# 安装promtail
curl -s https://api.github.com/repos/grafana/loki/releases/latest | \
grep browser_download_url | grep promtail-linux-amd64 | cut -d '"' -f 4 | wget -i -# 配置promtail.yaml
server:http_listen_port: 9080grpc_listen_port: 0
positions:filename: /tmp/positions.yaml
clients:- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: systemstatic_configs:- targets:- localhostlabels:job: varlog__path__: /var/log/*.log
8. 最佳实践
-
最小权限原则
- 使用专用日志账户
- 限制配置文件权限
chmod 640 /etc/rsyslog.conf
-
结构化日志
template(name="jsonfmt" type="list") {property(name="timestamp" dateFormat="rfc3339")constant(value=",")property(name="hostname")constant(value=",")property(name="syslogtag")constant(value=",")property(name="msg" format="json") }
-
日志分级存储
- /var/log/ 使用高性能 SSD
- /archive/logs/ 使用大容量机械硬盘
-
定期审计
# 检查日志完整性 sudo auditctl -w /var/log/ -p wa -k syslog_audit
-
监控告警
- 设置日志速率告警
- 监控日志磁盘空间使用率
- 检测关键词告警 (ERROR, CRITICAL)
通过以上全面配置,您可以构建一个高效、安全且可扩展的日志管理系统,满足从小型服务器到大型数据中心的各种需求。