![可靠的 rsyslog 日志记录到远程服务器](https://linux22.com/image/779610/%E5%8F%AF%E9%9D%A0%E7%9A%84%20rsyslog%20%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E5%88%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
有没有办法配置 rsyslog 将日志发送到远程实例,以便它不会丢失几分钟的消息?我发现在以下情况下这很困难:
- 将以太网电缆从记录设备(客户端)上拔下来
- 等5分钟
- 重启设备
- 将以太网电缆放回去
我一直在尝试使用磁盘队列和 TCP/RELP 来实现这一点。尽管实际的网络传输是可靠的,但我似乎总是遇到这个根本问题:
当 rsyslog(磁盘队列)通过连接“发送”日志条目时,它会将日志条目标记为“已发送”。这里的“发送”表示将其传递到下层。因此(如果我的分析正确的话),数百条日志可能会滞留在 TCP 缓冲区中,如果您重新启动设备,它们就会消失。
答案1
您可以通过滥用负载均衡器的重新绑定参数来解决此问题。
RebindInterval=1
这将强制对发送的每条日志消息建立新的 TCP 连接 -> 如果服务器无法访问,rsyslog 将立即注意到。
为传输的每条日志消息建立和拆除 TCP 连接都是一种针对服务器的 DoS 攻击。我建议仅在每秒日志行数很少且客户端很少的情况下才使用这种方法。