欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
由于在实际地ESB项目中,我们往往会采用集群的方式来避免单个服务器宕机导致系统无法正常运行的情况。 往往我们的应用部署会如下图所示:
会部署多个ESB Server。通过负载均衡分配输入访问。
这样就会在多个服务器下生成访问的日志目录esbServer_Home/server/server/EOS/_srv/work/esbmonitor/
为了SSM能解析这些日志目录我们往往采取的方法是将这些目录通过定时传输的方式传送到SSM所在服务器的指定目录。然后将其解析。
此文是介绍在linux使用nfs目录共享的方式实现一个SSM服务解析多个服务器日志的方法。
大家都知道nfs目录共享有一个问题,就是不能实现多个目录共享到同一个目标目录的情况。
所以我们只能将每个ESB Server的日志目录通过nfs共享到SSM服务器的一个目标目录。
如下图 log150和log151分别为从服务器 150 和 151 通过nfs目录共享方式共享的两个ESB Server目录
此时我们可以通过安装多个SSM服务并在配置文件ssm_home/ssm/instances/default/conf/ssm.user.properties中配置目标目录
loader.log.file.directory=/root/esb/log150 或loader.log.file.directory=/root/esb/log151 来实现对这2个目录的SSM解析工作。
也可以通过单个SSM服务ssm_home/ssm/instances/目录下配置多个服务并通过不同的服务的配置文件并启动多个线程来实现对不同目录的SSM解析工作。
但是以上两种方法都存在一个问题。
因为在我们的SAM前台的一个功能------接口运行检索
接口运行检索实际检索的是经过ssm解析的日志文件,需要配置修改SAM的配置文件sam安装路径/sam/config/sam/config/user-config.xml中的参数,红色字体部分,即配置要检索的日志目录。
<module name="LogDriver">
<group name="Properties">
<configValue key="logRootPath">ssm/ssm/instances/default/esblogs</configValue>
<configValue key="logFilePattern">.log.</configValue>
</group>
</module>
并且这里不能配置多个logRootPath。
所以安装多个SSM服务和单个SSM服务下 ssm_home/ssm/instances/目录下配置多个服务目录都会使得 接口运行检索功能的数据不完整。所以引入了一下实现方案:
由于在帮助文档中提到SSM可以根据ssm_home/ssm/instances/目录下配置多个服务目录启动多个进程来解析对应日志目录。
那说明SSM是支持多线程启动方式的。 我就想到在ssm_home/ssm/instances/default/conf/ssm.user.properties配置文件中 首先配置 目标目录loader.log.file.directory=/root/esb/log150后启动SSM来解析log150的日志文件。
然后修改ssm_home/ssm/instances/default/conf/ssm.user.properties配置文件中的目标目录为loader.log.file.directory=/root/esb/log151 再启动一个SSM来解析log151的日志文件。
再第二次启动时会报错提示已经存在服务不能启动。删除需要删除
ssm_home/ssm/instances/default/agentcontext/pid文件后重新启动成功。
观察l目标目录 /root/esb/log150 和 /root/esb/log151 的日志文件都解析成功。 并且接口运行检索数据也保持完整。
此方法在帮助文档中没有提及。 经过本项目将近一个多月的运行也没有出现任何问题。 所以写出来跟大家分享一下。