You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将rsyslog日志配置发送至指定端口?

解决rsyslog无法将日志发送到指定端口的问题

我来帮你一步步排查这个rsyslog日志发送失效的问题,大概率是配置细节或者依赖模块没到位:

1. 先修正配置语句的语法错误

你写的 . @localhost:47111格式有问题,rsyslog的规则格式是选择器 + 动作,不能有多余的前导空格和点。举几个正确的例子:

  • 发送所有日志到UDP端口47111:*.* @localhost:47111
  • 发送所有日志到TCP端口47111:*.* @@localhost:47111(注意这里是两个@,代表TCP协议)
  • 只发送auth相关日志到UDP端口:auth.* @127.0.0.1:47111

2. 确认加载了必要的输出模块

rsyslog发送网络日志需要对应的输出模块支持,你得在配置文件开头加上对应的加载语句:

  • 如果用UDP发送:module(load="omudp")
  • 如果用TCP发送:module(load="omtcp")
    默认情况下rsyslog可能没加载这些模块,不加载的话发送动作直接失效。

3. 检查配置加载顺序与服务重启

  • 建议把你的自定义发送规则放到/etc/rsyslog.d/目录下,新建一个比如90-send-to-port.conf的文件(数字越大,加载顺序越靠后,能覆盖前面的默认规则),而不是直接改主配置文件,这样更规范。
  • 修改完配置后必须重启rsyslog服务,不然配置不会生效:
    sudo systemctl restart rsyslog
    
    重启后可以用sudo systemctl status rsyslog检查服务是否正常启动,有没有报错信息。

4. 排查监听端与网络连通性

  • 先确认你的目标Daemon确实在监听47111端口,用这个命令查看:
    ss -tulpn | grep 47111
    
    如果看不到任何监听进程,那问题出在Daemon端,先确保它正常启动并监听正确端口。
  • 可以用nc工具快速测试端口连通性:
    • UDP测试:nc -u localhost 47111,输入任意内容回车,看Daemon能不能收到
    • TCP测试:nc localhost 47111,同样输入内容测试
  • 查看rsyslog自身的日志,找错误线索:
    tail -f /var/log/syslog
    
    重启rsyslog后如果有发送失败的报错(比如连接超时、无法找到服务器),能直接帮你定位问题。

5. 检查SELinux或防火墙的限制

  • 如果是带SELinux的系统(比如CentOS、RHEL),它可能阻止rsyslog发起网络连接,临时关闭测试:
    sudo setenforce 0
    
    如果关闭后日志能正常发送,就需要配置SELinux规则允许rsyslog的网络行为。
  • 本地防火墙(比如ufw、firewalld)虽然对localhost访问限制较少,但也可以临时关闭测试,排除防火墙拦截的可能。

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

火山引擎 最新活动