如非授权,禁止用于商业用途,转载请注明出处
作者:mynewworldyyl
1. 微服务相关
在前面的1到5节中,总共涉及服务提供者,服务消费者,服务监听服务,发布订阅服务,熔断器服务5种类型的猪微服务,每种类型服务又可以在任何一台机器上“随意”启动N个运行实例,每个RPC请求从初始触发客户端开始,中间可能经过N个微服务,然后从这N个经过的微服务返回,中间任何一个环节都可能出问题,或者某个环节耗费过长时间,这时候不可能从这N个微服务所在机器上查看log,况且找到这N个微服务所在机器都不可能。JMicro提供统一的日志查看服务,并且高度可配置性,比如只想查看某个RPC方法的日志,或线上热切换日志开关。
2. 启动日志服务
新打开一个新的CMD窗口,CD进入/jmicro.main.monitor.log,运行
mvn clean install -Pbuild-main (只需构建一次,以后可以重复运行)
运行日志服务
java -jar target/jmicro.main.monitor.log-0.0.1-SNAPSHOT-jar-with-dependencies.jar
3. 修改SimpleRpcImpl的hello方法
@Override @SMethod( loggable=1, //启用日志查看 ) public String hello(String name) { if(SF.isLoggable(true,MonitorConstant.LOG_DEBUG)) { SF.doBussinessLog(MonitorConstant.LOG_DEBUG,SimpleRpcImpl.class,null, name); } //System.out.println("Server hello: " +name); return "Server say hello to: "+name; }
loggable=1表示启用日志,此值可实时在ZK中做修改,并实时生效。
if(SF.isLoggable(true,MonitorConstant.LOG_DEBUG)) {
SF.doBussinessLog(MonitorConstant.LOG_DEBUG,SimpleRpcImpl.class,null, name);
}
这段代码判断当前日志是否启动debug级别,如果启动,则记录日志。
SF工具类有很多方法,其中,doBussinessLog是唯一提供给应用使用的方法,用于记录业务日志。其他方法保留给JMicro系统使用。
public static void doBussinessLog(byte debug, Class<?> tag, Throwable exp, String... msgs)
debug:日志级别,由MonitorConstant.LOG_开头的常量指定,分别有trance,debug,info,warn,error,final;
tag:记录日志的类;
exp:需要记录日志的异常实例;
msgs: 日志信息,可变参数。
打开命令行窗口
进入provider目录
cd ${SRC_ROOT}\jmicro.example\jmicro.example.provider
构建运行包
mvn clean install -Pbuild-main
运行服务
java -jar target/jmicro.example.provider-0.0.1-SNAPSHOT-jar-with-dependencies.jar
4. 运行客户端
保持5节的客户端不变,直接运行
java -jar target/jmicro.example.comsumer-0.0.1-SNAPSHOT-jar-with-dependencies.jar
查看日志服务窗口输出,Lid表示一个RPC请求标识,上图是一个RPC请求从客户端开始到服务端,再从服务端返回到客户端的整个流程的log。
5. 实时开启关闭日志
用ZKUI(https://github.com/DeemOpen/zkui),进入到/jmicro/JMICRO_services,找到org.jmicro.example.api.rpc.ISimpleRpc##simpleRpc##0.0.1##exampleProdiver0##172.16.22.200##58740
修改hello方法的loggable值即可,0:表示禁用log,1:表示启用log,-1:表示由Service确定。
使用同样的方式,可以实时修改服务相关的值,如breaking=true,这样此服务实例就被手动熔断了!
6. 日志文件
在日志服务当前工作目录${user.dir}/logs/jmicro/下,分别有debug.log,info.log,error.log3个日志文件,可以查看文件日志。
可以参考org.jmicro.main.monitor.LinkRouterMonitor RPC服务类实现方式,实现org.jmicro.api.monitor.IMonitorDataSubscriber服务接口,将日志记录在不同的地方或实现不同日志策略。org.jmicro.main.monitor.LinkRouterMonitor 只是一个参考实现,生产环境中,不建议直接使用。
微服务中,日志应该是可实时方便查询的,如根据RPC 服务标识,时间,IP,端口等条件,方便查询到相关日志
微服务中,应该有服务预警系统,服务出现异常时,能够自动通知相关人员,如短信,微信,邮件等,其中内容就应该包括关键日志。
微服务中,应该有智能系统,根据系统当前的状态,自动化控制系统参数,以使系统稳定健康运行。如自动化控制流量速度,记录RPC过程数据,自动化重现问题,根据结果做智能分析。其中日志是其中一个重要部份。
JMicro目前还没实现以上特性,同时欢迎大家参与JMicro开发实现。