RELP协议实现可靠日志传输需启用omrelp/imrelp模块、配置带重试与持久化队列的转发规则,并在服务端启用imrelp监听;它从rsyslogd 3.15.0起支持,但需单独安装rsyslog-relp包,配置中必须使用:omrelp:前缀及队列参数确保断线重传与本地缓存。

用 Rsyslog 的 RELP 协议实现带确认机制的可靠日志传输,核心是启用 omrelp 模块、配置带重试与持久化队列的转发规则,并在服务端启用 imrelp 输入模块。它不是简单替换协议符号,而是构建一套具备连接管理、消息应答、断线重传和本地缓存能力的传输链路。
确认 RELP 支持并安装必要组件
RELP 从 rsyslogd 3.15.0 起原生支持,但多数发行版需单独安装扩展包:
- CentOS/RHEL:运行
yum install -y rsyslog-relp或dnf install -y rsyslog-relp - Ubuntu/Debian:运行
apt install -y rsyslog-relp - 安装后检查模块是否存在:
rsyslogd -v | grep relp,输出中应含omrelp(输出)和imrelp(输入)
客户端配置:启用 omrelp 并设置可靠队列
在客户端(日志产生端)的配置文件(如 /etc/rsyslog.d/relp-forward.conf)中写入:
- 加载输出模块:
$ModLoad omrelp - 定义转发规则(注意前缀是
:omrelp:,不是@或@@):*.* :omrelp:192.168.1.100:20514 - 必须配置队列参数,否则 RELP 的可靠性无法落地:
$ActionQueueType LinkedList$ActionQueueFileName relp_queue$ActionResumeRetryCount -1(失败无限重试)$ActionQueueSaveOnShutdown on(关机前保存未发完日志)$ActionQueueMaxDiskSpace 1g(可选,限制磁盘缓存大小)
服务端配置:启用 imrelp 监听并安全接收
在服务端(日志收集端)的 /etc/rsyslog.d/relp-server.conf 中配置:
- 加载输入模块:
$ModLoad imrelp - 启动 RELP 监听:
$InputRELPServerRun 20514(端口建议避开 514,避免冲突) - 可选增强安全性:
$InputRELPServerStreamDriverMode 1(启用 TLS 模式)
若启用 TLS,还需配置证书路径:$InputRELPServerStreamDriverAuthMode x509/name和$InputRELPServerStreamDriverPermittedPeer * - 定义接收日志的存储模板与路径,例如:
$template RemoteRelp,"/var/log/relp/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"*.* ?RemoteRelp
验证与排错要点
RELP 的“确认机制”是否生效,不能只看日志是否到达,要看连接状态与重传行为:
- 用
ss -tlnp | grep :20514确认服务端 RELP 端口已监听 - 客户端执行
logger "RELP test $(date)",服务端用tail -f /var/log/relp/*/*.log实时观察 - 模拟网络中断:在客户端临时禁用网卡(
ip link set eth0 down),再发几条日志,然后恢复网络——应看到日志被自动补发 - 查看 rsyslog 内部队列状态:
rsyslogd -d 2>&1 | grep -i queue(调试模式下)或检查/var/spool/rsyslog/relp_queue*文件是否存在未清空内容 - 日志中出现
omrelp: connection established或message sent, waiting for ACK表明确认机制正在工作


















