要实现远程发送 Syslog 日志,本质上就是把本地的 Syslog 日志通过网络发送到远程 Syslog 服务器(Receiver)。下面按原理 → 常见方式 → 配置示例 → 排错建议的顺序说明。
Syslog 支持两种常见传输方式:
| 协议 | 端口 | 是否可靠 | 说明 |
|---|---|---|---|
| UDP | 514 | 否 | 默认、最常用,但可能丢包 |
| TCP | 514 | 是 | 更可靠,配置稍复杂 |
| TLS(RFC 5425) | 6514 | 是 | 加密传输,企业常见 |
生产环境推荐 TCP / TLS,测试环境可用 UDP。
+----------------+ UDP/TCP +--------------------+
| 应用 / 主机 | ----------------> | Syslog Server |
| (rsyslog / | | (rsyslog / syslog-ng) |
| 应用直接发送) | +--------------------+
+----------------+
rsyslogd -v
编辑配置文件(常见路径):
vim /etc/rsyslog.conf
# 或
vim /etc/rsyslog.d/remote.conf
*.* @192.168.1.100:514
@表示 UDP
*.* @@192.168.1.100:514
@@表示 TCP
authpriv.* @@192.168.1.100:514
systemctl restart rsyslog
编辑 /etc/rsyslog.conf:
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
if $fromhost-ip startswith '192.168.1.' then /var/log/remote.log
& stop
systemctl restart rsyslog
destination d_remote {
tcp("192.168.1.100" port(514));
};
log {
source(s_src);
destination(d_remote);
};
import logging
import logging.handlers
handler = logging.handlers.SysLogHandler(address=('192.168.1.100', 514))
logger = logging.getLogger()
logger.addHandler(handler)
logger.error("This is a remote syslog message")
# UDP
firewall-cmd --add-port=514/udp --permanent
# TCP
firewall-cmd --add-port=514/tcp --permanent
firewall-cmd --reload
tail -f /var/log/remote.log
或:
tcpdump -i eth0 port 514
| 问题 | 原因 |
|---|---|
| 收不到日志 | 防火墙、端口、协议不匹配 |
| 日志乱码 | 编码问题(UTF-8) |
| 丢日志 | 使用 UDP |
| 权限问题 | SELinux |
setenforce 0 # 临时关闭 SELinux 测试
✅ 生产环境推荐:
如果你愿意,可以告诉我:
我可以给你一份完全贴合你环境的配置方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。