【发布时间】:2014-10-20 23:01:16
【问题描述】:
我有一个系统,其中几个(20 个左右)Web 应用程序服务器(托管一个网站)与相同的 2 到 4 个 EJB 服务器(通过 VIP)通信。我想知道是否可以确定其中哪一个应用服务器生成了特定请求。
例如:网站 example.com 通过向 20 个应用服务器中的任何一个发送 HTTP 请求来处理请求。这些服务器被命名为(内部)app01 到 app20。确保所有具有相同会话 ID 的请求都将被路由到同一个应用服务器,从而使我们能够在逻辑上跟踪来自单个用户的所有请求。一些请求将需要一些无法直接获得的额外数据,为此在另一个由 3 个服务器组成的集群上有一个 EJB (2.1) 应用程序,名为 ejb01 到 ejb03。与 EJB 服务器的连接是通过 VIP (ejb00) 建立的,它将请求以循环方式路由到三个 EJB 服务。
在 EJB 服务器的日志记录(我们使用 Apache Log4J)中,如果我能识别出请求来自 20 个应用服务器中的哪一个,那就太好了。另一种方法是分别检查每台服务器上的日志 - 但我没有通过 20 个不同盒子上的日志来grep 的好方法。
我的问题是:这在标准 EJB 中是否可行?如果没有别的东西,我愿意做一些非标准的事情,但它必须是可靠的并且可以在我的系统上运行。我们将 Weblogic 11g 用于 Web 应用程序和 EJB 服务器。
我看到了将调用者的身份作为参数传递的建议,但这意味着 20 多个 EJB 方法中的每一个都需要一个额外的参数,这相当笨拙。
任何解决方案,任何人?
【问题讨论】:
-
我建议您查看LogStash。您可以将它安装在与您的 Weblogic 服务器相同的盒子上。希望 Weblogic 有一个像 Tomcat 的 AccessLogValve 这样的记录器。然后,您可以通过这种方式注销每个请求。要确定是谁发出请求,您可以为 20 个应用服务器中的每一个设置“用户代理”。
-
@hooknc:我们最近开始使用 Splunk,它确实使查看日志变得更加容易(并且每个 EJB 调用 都被记录),但日志的时间可能是几秒钟后,在客户端/服务器端配对日志非常乏味,但这就是我在此期间要做的事情。不过,谢谢。
标签: java jakarta-ee ejb weblogic