服务器的网卡在514端口收到UDP或TCP报文后,由内核交给rsyslog或syslog-ng这类守护进程,再按配置的规则解析、匹配来源,最后写入本地文件或转发给下游系统。接收syslog本质上是”监听端口+解析报文+落盘路由”三件事,配置量不大,坑大多在防火墙和权限上。
syslog报文到达服务器后到底发生了什么
很多人以为”服务器接收syslog”是某个神秘服务在干活,拆开看,路径其实很清晰。
从网卡到守护进程的四步
- 网卡收包:数据包进入网卡,内核协议栈按目标端口判断归属,514是特权端口,普通用户进程绑不上。
- 端口监听:rsyslog的imudp/imtcp模块、syslog-ng的network source,在514上等待报文。
- 报文解析:按RFC 3164(传统格式)或RFC 5424(结构化格式)拆出优先级、时间戳、主机名、进程名、消息体。
- 规则匹配与落盘:按facility(设备类型)和severity(严重级别)匹配规则,写进/var/log下对应文件,或转发到远端。
传输层选UDP还是TCP
这是第一个决策点,业内专家指出,日志可靠性要求和网络质量决定了这个选择。
- UDP 514:发完就不管,丢包不重传,适合内网、量大、允许少量丢失的场景,比如交换机、路由器的运行日志。
- TCP 514:有连接和确认机制,RFC 6587定义了两种分帧方式(八位组计数和非透明分帧),适合跨公网、审计类日志。
- TLS 6514:加密传输,合规场景常用,但要额外配证书,运维成本明显上升。
Linux服务器接收syslog配置步骤
下面以最常见的rsyslog为例,走一遍可验证的操作路径,syslog-ng用户逻辑相同,语法不同。
第一步:确认服务状态和端口占用
systemctl status rsyslog ss -lunp | grep 514 ss -ltnp | grep 514
如果514没有任何监听,说明模块没加载,或者服务根本没起来,先看/etc/rsyslog.conf里有没有被注释掉的$ModLoad imudp。
第二步:开启UDP/TCP监听
Debian/Ubuntu系在/etc/rsyslog.conf里取消注释:
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
RHEL/CentOS 7以上同样支持这种现代语法,也可以在/etc/rsyslog.d/下新建独立配置文件,避免升级时被覆盖。
改完执行:
rsyslogd -N1 systemctl restart rsyslog ss -lunp | grep 514
-N1是配置语法校验,这一步别省,配置写错会导致服务起不来,日志接收直接断掉。
第三步:用模板把不同来源分开存
所有设备日志堆在一个文件里,排查时基本没法用,加一个模板按主机名和日期分目录:
template(name="RemoteLog" type="string"
string="/var/log/remote/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log")
ruleset(name="remote514") {
action(type="omfile" dynaFile="RemoteLog")
}
input(type="imudp" port="514" ruleset="remote514")
目录要提前建好并授权,否则写入会静默失败这是新手最常踩的坑之一。
第四步:放行防火墙和SELinux
firewall-cmd --permanent --add-port=514/udp firewall-cmd --permanent --add-port=514/tcp firewall-cmd --reload
SELinux开启时,非标准端口需要额外放行:
semanage port -a -t syslogd_port_t -p udp 514
第五步:在发送端验证
找一台设备或Linux主机配置转发,或者直接用手工方式测试:
logger -n 192.168.1.10 -P 514 -d "test message"
接收端用tail -f盯住目标文件,同时在中间节点抓包确认报文是否到达:
tcpdump -i eth0 udp port 514 -nn -A
rsyslog与syslog-ng接收日志有什么区别
两者都能收syslog,选型差异主要体现在配置表达力和性能取向上。
| 对比维度 | rsyslog | syslog-ng |
|---|---|---|
| 配置风格 | 传统指令+现代RainerScript混用 | 声明式配置,结构清晰 |
| 默认安装 | 主流Linux发行版基本自带 | 需额外安装 |
| 解析能力 | 支持JSON、正则、字段提取 | 解析器丰富,模式匹配更细 |
| 生态与文档 | 中文资料多,社区活跃 | 文档严谨,企业版功能更强 |
| 适用场景 | 通用日志收集、快速上手 | 复杂路由、多源异构日志聚合 |
行业共识认为,中小规模日志接收用自带rsyslog足够,涉及多租户分流、复杂改写再考虑syslog-ng。
内网服务器收不到syslog日志怎么排查
按”网络→端口→配置→权限”四层往下走,比盲改配置高效得多。
网络层:报文到底有没有到
tcpdump -i any -nn host 发送端IP and port 514
抓不到包,问题在中间链路:路由、ACL、安全组、NAT映射,跨网段时先确认UDP 514没被策略拦掉。
端口层:服务有没有真的在听
ss -lunp | grep 514
有进程但绑定在127.0.0.1,外部自然连不上,配置里要写监听全部地址。
配置层:规则有没有匹配上
临时加一条无条件的action,把收到的全部落盘,用来验证链路是否通,链路通说明规则写错了,重点查facility过滤和模板路径。
权限层:文件写不写得进去
ls -ld /var/log/remote
目录属主必须是syslog或root,权限不足时rsyslog不会报错,只会丢日志,近年来容器化部署增多,挂载卷权限问题尤其常见。
云服务器接收syslog要花多少钱
这是采购和架构评审时绕不开的问题,成本结构其实不复杂,分三类。
- 自建方案:主要花在磁盘和带宽上,日志按天增长,保留180天的量级,普通云盘通常够用,成本以存储单价乘以容量估算,带宽方面,跨地域传输会产生流量费,同地域内网传输基本可以忽略。
- 云厂商日志服务:按写入量、存储量、查询量分别计费,单价通常在每GB几毛到几元区间浮动,量级上来后费用增长明显,好处是免运维、自带检索和告警。
- 混合方案:本地落盘保留短期热数据,长期归档推到对象存储,成本能压下一大截。
需要提醒的是,日志量本身不确定,先按现有设备的日均条数估算再选型,别一上来就买大规格,据公开的云服务计费文档,按量付费和包年包月的差价在长期场景下并不小。
服务器接收syslog常见问题解答
服务器接收syslog用UDP还是TCP更合适
看可靠性和网络环境,内网、设备多、允许少量丢失选UDP,开销小;跨公网、审计合规、不能丢选TCP,必要时叠加TLS,两者可以同时开,按来源分流。
服务器接收syslog时出现中文乱码怎么处理
根因是发送端编码和接收端解析不一致,多数网络设备默认按UTF-8或本地代码页发送,接收端需确保不做二次转码,文件用UTF-8打开,模板里不要强制转码,抓包看原始字节是判断编码最直接的办法。
服务器接收syslog的默认端口可以改吗
可以改,rsyslog和syslog-ng都支持自定义端口,改完同步调整防火墙和安全组规则即可,低于1024的端口需要特权权限,容器环境里建议直接用10514这类高位端口,避免额外的权限配置。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/789454.html

