CentOS 8使用rsyslog向Graylog发送UDP syslog失败求助
CentOS 8 rsyslog向Graylog转发UDP Syslog失败排查
基础信息
- 日志发送端:CentOS 8虚拟机,IP
192.168.100.40 - 日志接收端:Graylog服务器,IP
192.168.100.45 - 故障现象:UDP Syslog Input无明确错误提示,但无法收到rsyslog转发的日志
已完成配置
- rsyslog端已在
/etc/rsyslog.conf添加转发规则:*.* @192.168.100.45:514;RSYSLOG_SyslogProtocol23Format - 两端主机已通过firewall-cmd执行514/udp端口开放操作,执行命令为:
firewall-cmd --add-port=514/udp --permanent firewall-cmd --reload
- 已留存相关状态截图:
- rsyslog服务运行状态:

- Graylog UDP Syslog Input配置:

- rsyslog服务运行状态:
排查步骤(按优先级从高到低执行)
- 确认Graylog端口监听状态
登录Graylog服务器执行命令:ss -ulnp | grep 514- 如果没有输出,说明Graylog没有正常监听UDP 514端口:Linux系统下1024以下端口默认需要root权限才能绑定,Graylog如果以普通用户运行会直接绑定失败,且前端Input页面不会抛出明确错误。可选择三种方案修复:
- 将UDP Syslog Input端口修改为1514这类1024以上的高位端口,同步修改rsyslog转发规则里的端口号
- 给Graylog授予低端口绑定权限:
setcap cap_net_bind_service=+ep /usr/share/graylog-server/bin/graylog-server,重启Graylog服务生效 - 配置本机防火墙端口转发,将514/udp的流量转发到Graylog监听的高位端口
- 如果有输出,确认监听地址是
0.0.0.0,而非127.0.0.1或其他单网卡IP,避免绑定地址错误导致无法接收外部流量。
- 如果没有输出,说明Graylog没有正常监听UDP 514端口:Linux系统下1024以下端口默认需要root权限才能绑定,Graylog如果以普通用户运行会直接绑定失败,且前端Input页面不会抛出明确错误。可选择三种方案修复:
- 验证UDP链路连通性
先绕开rsyslog直接发测试包,在CentOS 8发送端执行:
立刻到Graylog搜索界面查询是否收到该条日志:echo "test nc log from 192.168.100.40" | nc -u 192.168.100.45 514- 如果收不到,在Graylog服务器端开抓包:
再在发送端重发一次测试包:tcpdump -i any udp port 514 and host 192.168.100.40- 抓不到包:检查两端防火墙规则是否真的生效,执行
firewall-cmd --list-all确认ports列表中存在514/udp;临时执行setenforce 0关闭两端SELinux测试,排除SELinux拦截问题。 - 能抓到包但Graylog无日志:检查Input配置的Syslog解析格式是否与发送端的
RSYSLOG_SyslogProtocol23Format匹配,确认Input没有配置错误的IP白名单、消息过滤规则。
- 抓不到包:检查两端防火墙规则是否真的生效,执行
- 如果收不到,在Graylog服务器端开抓包:
- 验证rsyslog配置有效性
在发送端执行配置语法检查:
确认输出无语法错误,且添加的转发规则位于配置文件的rsyslogd -N1#### RULES ####段落内,不要写在段落前的注释区域。
检查完成后重启rsyslog服务,执行logger "rsyslog local test"触发测试日志,如果还是收不到,临时开启rsyslog调试日志定位转发问题:
在/etc/rsyslog.conf头部添加两行配置:
重启rsyslog服务后查看$DebugFile /var/log/rsyslog_debug.log $DebugLevel 1/var/log/rsyslog_debug.log,定位转发阶段的报错。 - 排查SELinux对rsyslog的限制
CentOS 8默认开启的SELinux会限制rsyslog向外发送日志的端口,执行以下命令查看允许rsyslog发送的端口列表:
如果514/udp不在列表中,执行命令添加:semanage port -l | grep syslogd_port_t
重启rsyslog服务再测试。semanage port -a -t syslogd_port_t -p udp 514
内容的提问来源于stack exchange,提问作者cesq
相关产品推荐
相关产品推荐

