You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务运行状态:rsyslog systemctl status
    • Graylog UDP Syslog Input配置:Graylog UDP Input configuration

排查步骤(按优先级从高到低执行)

  1. 确认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,避免绑定地址错误导致无法接收外部流量。
  2. 验证UDP链路连通性
    先绕开rsyslog直接发测试包,在CentOS 8发送端执行:
    echo "test nc log from 192.168.100.40" | nc -u 192.168.100.45 514
    
    立刻到Graylog搜索界面查询是否收到该条日志:
    • 如果收不到,在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白名单、消息过滤规则。
  3. 验证rsyslog配置有效性
    在发送端执行配置语法检查:
    rsyslogd -N1
    
    确认输出无语法错误,且添加的转发规则位于配置文件的#### RULES ####段落内,不要写在段落前的注释区域。
    检查完成后重启rsyslog服务,执行logger "rsyslog local test"触发测试日志,如果还是收不到,临时开启rsyslog调试日志定位转发问题:
    在/etc/rsyslog.conf头部添加两行配置:
    $DebugFile /var/log/rsyslog_debug.log
    $DebugLevel 1
    
    重启rsyslog服务后查看/var/log/rsyslog_debug.log,定位转发阶段的报错。
  4. 排查SELinux对rsyslog的限制
    CentOS 8默认开启的SELinux会限制rsyslog向外发送日志的端口,执行以下命令查看允许rsyslog发送的端口列表:
    semanage port -l | grep syslogd_port_t
    
    如果514/udp不在列表中,执行命令添加:
    semanage port -a -t syslogd_port_t -p udp 514
    
    重启rsyslog服务再测试。

内容的提问来源于stack exchange,提问作者cesq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:06:31