一直在寻找解决此问题的方法:我需要将在多台机器上运行的应用程序的日志条目发送到远程服务器并在远程服务器上进行聚合。要求:
- 登录应用程序需要异步(不能等待日志条目遍历网络)
- 登录应用需要排队;如果网络出现故障,日志条目需要在本地排队,并在网络再次可用时发送到集中式服务器
我正在考虑使用 log4j 和 JMSAppender。假设这是一个合适的解决方案,是否有可用的示例?在这种情况下,中央服务器上将运行什么进程来接收日志条目?
谢谢。
我想到的一个简单设置是使用Apache ActiveMQ
它是一个开源消息代理(与 JMS 兼容),能够在多台物理机器之间集群队列,并且 ActiveMQ 安装相当轻量级。您只需在每台应用程序机器上安装一个 ActiveMQ。然后在日志服务器(图中的物理服务器 C)上,您将拥有另一个 ActiveMQ。您的应用程序将使用 JMS appender(在此处阅读更多内容),您实际上可以只使用包含的apache camel从队列中读取并在文件或数据库上写入日志,而无需为该任务编写应用程序。
它可以像在activemq /conf 安装中的camel.xml 中添加类似以下内容并在activemq.xml 配置中导入camel.xml 一样简单。
<route>
<from uri="activemq:queue:LogQueue"/>
<to uri="file:target/folder/?fileName=logfile.log&fileExist=Append"/>
</route>
您可以使用无数其他框架、JMS 服务器和技术,但我认为这是一种相当容易实现的方法,成本非常低且稳定性高。