Fedora作为一款更新激进、软件包新颖的发行版,默认已经集成了rsyslog(或者在新版本中以systemd-journald为主的日志体系),这让搭建集中日志管理变得相对容易。所谓集中日志管理,就是把多台服务器、网络设备上的日志统一发送到一台专门的日志服务器,运维人员只需在这一台机器上检索、分析,就能掌握全局状况。本文将从日志协议基础讲起,给出Federa下完整的rsyslog服务端与客户端配置,并延伸到日志轮转与大文件检索的优化方案。

一、先搞懂syslog的设施与优先级
集中日志的核心是syslog协议。一条syslog消息由两部分关键信息组成:facility(设施)和severity(优先级)。facility标识日志来源的类型,比如kernel(内核消息)、auth(认证相关)、mail(邮件系统)、cron(定时任务)等;severity则表示严重程度,从debug、info、notice、warning一直到err、crit、alert、emerg。两者组合成一个数值,rsyslog通过这个数值决定日志往哪里写。
在rsyslog的配置文件中,你会经常看到类似*.* @@log-server:514这样的规则。开头的*.*表示匹配所有设施、所有优先级;一个@表示用UDP协议传输,两个@@表示用TCP协议传输。理解了这一层语法,后面的配置就只是按需组合了。
另外需要区分的是,Fedora上systemd-journald与rsyslog是配合关系。journald负责接收systemd服务日志并写入二进制journal文件,rsyslog则可以读取这些内容转存为传统文本日志或转发到远端。也就是说,即使你不装任何额外软件,日志链路已经在工作了,我们要做的只是把它延伸到网络上。
二、Fedora下搭建rsyslog日志服务器
假设我们有一台机器作为日志服务器,IP为192.168.1.10。首先确认rsyslog已安装并运行:
sudo dnf install rsyslog -y sudo systemctl enable --now rsyslog</code>
接着编辑/etc/rsyslog.conf,开启远程接收模块。找到以下两行并取消注释,它们分别对应UDP和TCP的接收:
# 提供 UDP 514 端口接收 module(load="imudp") input(type="imudp" port="514") # 提供 TCP 514 端口接收,可靠性更高 module(load="imtcp") input(type="imtcp" port="514")
然后配置日志按客户端主机名分文件存放。新建/etc/rsyslog.d/remote.conf,写入如下规则:
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs # 防止远端日志重复写入本地文件 & stop
这段配置使用了模板语法,把每台客户端的日志按主机名建目录、按程序名分文件。& stop的意思是匹配到远端日志后不再往下继续匹配本地规则,避免日志重复落盘。改完配置后用rsyslogd -N1做语法检查,再重启服务。
别忘了防火墙。Fedora默认使用firewalld,需要放行对应端口:
sudo firewall-cmd --permanent --add-port=514/tcp sudo firewall-cmd --permanent --add-port=514/udp sudo firewall-cmd --reload
关于TCP与UDP的选择:UDP开销小、速度快,但丢包不重传,适合内网低价值日志;TCP保证送达,适合审计类、安全类日志。生产环境建议两者都开,按日志类型分流使用。
三、客户端配置与日志轮转
客户端的配置非常简单,在每台Fedora客户端的/etc/rsyslog.d/目录下新建一个转发规则即可:
# 将所有日志通过 TCP 转发到日志服务器 *.* @@192.168.1.10:514 # 也可以只转发认证日志,用 UDP authpriv.* @192.168.1.10:514
重启客户端rsyslog后,在服务器的/var/log/remote/目录下就能看到按主机名归档的日志文件了。这里有个细节值得注意:如果客户端主机名重复(比如批量装机时都叫localhost),日志会混在一起。建议提前规划主机名,或在客户端配置$LocalHostName web-01显式指定。
集中收集之后,单机日志量会成倍增长,日志轮转必须跟上。rsyslog自带的轮转可以借助logrotate完成,新建/etc/logrotate.d/remote-logs:
/var/log/remote/*/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}这份策略是每天轮转一次、保留14天、压缩历史文件,并通过HUP信号通知rsyslog重新打开文件句柄。保留天数要根据磁盘容量和合规要求调整,审计场景可能需要保留180天以上,此时建议把历史日志归档到独立存储。
四、从文本日志到可检索的日志平台
纯文本日志用grep、awk检索在小规模下够用,但当机器超过几十台、日志量达到每天几个GB时,效率会成为瓶颈。此时有两个主流方向:一是ELK体系(Elasticsearch加Logstash或Filebeat加Kibana),功能全面但资源消耗大;二是Grafana Loki,轻量得多,它只索引标签不索引全文,配合Promtail采集,非常适合中小团队。
rsyslog可以直接对接这些后端,例如通过omelasticsearch模块把日志直接写入Elasticsearch,或者转发给Loki的指定端口。这样客户端完全不需要改动,只在日志服务器上加一层输出即可平滑升级,这也是rsyslog方案的最大优势:链路上每一环都可以独立替换。
总结一下,Fedora的集中日志管理核心思路是利用自带的rsyslog,服务端开imtcp/imudp模块接收并按模板分文件,客户端一行规则转发,配合logrotate控制磁盘占用,最后视规模决定是否上Loki或ELK做检索层。整个过程不需要引入复杂中间件,就能把散落各处的日志收拢到一处,排查问题时再也不用逐台登录翻找了。
Fedora日志管理rsyslog集中日志修改时间:2026-09-03 06:42:32