考虑以下架构:
我有一台笔记本电脑通过以太网连接到服务器。
该笔记本电脑配置为使用服务器上的 rsyslog 发送日志事件,服务器配置为接受这些日志并将其存储在一个文件中,以便稍后与日志利用软件一起使用。
问题是,笔记本电脑有时可能会断开连接以在远程位置工作,然后可以在几个小时后重新插入。但我仍然想在重新连接后将所有本地事件传输到服务器。
我目前的想法是使用omrelp
系统日志模块并将事件本地存储在磁盘队列中,但我不太确定系统日志服务器再次可用时的行为。 relp 协议不会重新发送消息后是否有超时/限制?或者也许它不适合我的情况。
另一个解决方案是创建自定义脚本以在重新连接后协调客户端和服务器之间的日志,但我想知道是否有更好的解决方案。
答案1
Rsyslog 为所有操作提供排队机制。队列会保留在内存中,直到太大或关闭时移动到磁盘。您可以将其与正常的 tcpomfwd
转发设置一起使用,而无需求助于
omrelp
.
阅读更多关于 队列,并查看完整的 队列选项 文档,或者看第二个RedHat 例子 “25.14. 使用新语法转发到单个服务器”。
如果您有像这样的遗留语法
*.* @@192.168.0.2:514
或 RainerScript 版本
action(type="omfwd" Target="192.168.0.2" Port="514" Protocol="tcp")
将其替换为类似的东西
action(type="omfwd" Target="192.168.0.2" Port="514" Protocol="tcp"
queue.type="linkedlist"
queue.filename="stufftoforward"
action.resumeRetryCount="-1"
queue.saveOnShutdown="on")
答案2
我想到的一种可能的解决方案是使用 Splunk。您在客户端(笔记本电脑)Universal Forwarder 上安装,将其配置为监视日志,在服务器 Splunk 服务器上安装(索引器和搜索头),对其进行配置并等待数据。如果您未连接,则客户端等待,当“看到”服务器时,它开始转发日志。稍后您可以通过图形界面对日志进行广泛的分析。
该解决方案也可以应用于其他机器(客户端)
缺点是:
- 您每天有 500MB 的日志,要获得更多流量,您应该购买许可证
- 我不确定 Splunk 处理 logrotation 的效果如何。 AFAIK 如果在脱机期间发生轮换,您可能无法从轮换文件(例如 /var/log/messages1)中获取日志。这是一个回答关于这个话题。