【6】JMicro微服务-服务日志监控
如非授权,禁止用于商业用途,转载请注明出处
作者: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开发实现。
【6】JMicro微服务-服务日志监控的更多相关文章
- 微服务日志监控与查询logstash + kafka + elasticsearch
使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- 【12】JMicro微服务-Zookeeper
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...
- 【11】JMicro微服务-配置管理
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...
- 【8】JMicro微服务-JMicro ZKUI
ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...
- JMicro微服务之超时&重试
JMicro是本人开发的基于Java实现的微服务框架,当前正式版本为0.0.3,并已发布到maven中央仓库.项目源码github:https://github.com/mynewworldyyl/j ...
- 从 1.5 开始搭建一个微服务框架——日志追踪 traceId
你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。
系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- .net core 微服务之日志落盘设计
原文:.net core 微服务之日志落盘设计 目录 1.设计目标 2.日志流程 3.串联请求事务 3.1 请求ID 3.2 处理服务器.服务 3.3 处理接口名 3.4 日志的发生时间 3.5 接口 ...
随机推荐
- linux 修改yum 为阿里云源
为了加快yum的下载速度,我们可以讲yum源指向阿里云的资源. 操作方法: 1.备份系统的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repo ...
- 关于对话框不能响应OnKeyDown和OnChar函数的一些说明
(1)现象 在MFC的对话框中,映射了WM_CHAR和WM_KEYDOWN消息响应函数后,还是不能响应OnKeyDown和OnChar. (2)原因 因为MFC在进行设计的时候,这两个消息被对话框 ...
- 常量表达式和constexpr(c++11)
常量表达式 常量表达式是指值不会改变且在编译阶段就能得到计算结果的表达式(两点要求) ; //是常量表达式 ; //是常量表达式 "; const int siz=s.size(); //不 ...
- 安装SourceTree遇到的一个个坑
之前在公司的电脑上满心欢喜的安装了下,很顺利就成功了,回来在自己电脑上安装,结果坑不能停,以此来纪念下吧! 下载完成后,进行安装: 这里我是申请了个账户,选第一个user an existing ac ...
- IntellJ IDEA2017 springboot2.0.2 替代@SpringBootApplication方式
如果不想用@SpringBootApplication,那么可以用@EnableAutoConfiguration 和@ComponentScan替代@SpringBootApplication 详情 ...
- python 基础_字符串9
凡是重要的# 字符串的创建,字符串可以是单引号创建也可以是双引号创建 str1 = 'hello world' #当你要输出的是单引号的时候,你括起字符串的必须是双引号.当你输出的是双引号的时候,你括 ...
- js基础学习笔记(一)
* 在js编写过程中,尽量保持统一使用单引号 'XXXX': * 所有变量都要声明 var,避免全局函数调用的冲突: 1.1 输出内容 docment.write(‘aileLi’); 改变某I ...
- (转)ASP.NET MVC 4 RC的JS/CSS打包压缩功能
转自:http://www.cnblogs.com/shanyou/archive/2012/06/22/2558580.html 打包(Bundling)及压缩(Minification)指的是将多 ...
- 一个封存Id与状态对应键值的神器,BigInteger的setBit和testBit用法实例
1,首先描述一下应用场景 比如,我们要对菜单做权限,控制不同角色菜单显示与不显示,角色为经理时,我们需要菜单id为 4,7,13,24的菜单显示,别的菜单不显示. 就是说,这时候我们要把4,7,13, ...
- Phalanx (hdu 2859)
http://acm.hdu.edu.cn/showproblem.php?pid=2859 Time Limit: 10000/5000 MS (Java/Others) Memory ...