【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 接口 ...
随机推荐
- 2019.01.24 bzoj2310: ParkII(轮廓线dp)
传送门 题意简述:给一个m*n的矩阵,每个格子有权值V(i,j) (可能为负数),要求找一条路径,使得每个点最多经过一次且点权值之和最大. 思路:我们将求回路时的状态定义改进一下. 现在由于求的是路径 ...
- mysql 在linux下的完整安装过程
1.下载RPM包 https://cdn.mysql.com//archives/mysql-5.7/mysql-5.7.20-1.el7.x86_64.rpm-bundle.tar 2.先使用命令删 ...
- Tomcat服务器的安装和配置
一.Tomcat下载 可以直接从Apache的网站上下载Tomcat(http://tomcat.apache.org/),进入首页后,在左边Download一栏可选择你要下载的版本,点击便可进入To ...
- IntelliJ IDEA 2017版 spring-boot2.0.4+mybatis+Redis处理高并发,穿透问题
一.当采用reddis缓存的时候,如果同时,一万次访问,那么就会有10000次访问数据库所以就会对数据库造成巨大压力,这时候,就要用到线程 1.方法体上加锁(优点,防护住了并发锁,缺点降低了内存效率) ...
- highChart图表
Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...
- 如何使用阿里巴巴iconfont矢量图片
①打开此网站http://www.iconfont.cn/ , 选择需要的几个图形 → 加入购物车 → 添加至项目 → 给项目随便命名 → 点击电线连接并点击代码 → 复制代码到css ②在body里 ...
- jpa命名规范
Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname ...
- 2017-2018-1 201552326《信息安全技术》实验二——Windows口令破解
2017-2018-1 201552326<信息安全技术>实验二--Windows口令破解 姓名:刘美岑 学号:20155326 班级:1553班 日期:10.24 一.实验环境 操作系统 ...
- 关于QT建立项目中遇到的相关问题的处理办法
关于QT建立项目中遇到的相关问题的处理办法 1.在QTCreater中新建一个空的工程时,第一次运行会抱一个错误,如下: -1: error: LNK1123: 转换到 COFF 期间失败: 文件无效 ...
- 12.equals()方法总结
超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等.该方法的源码如下: 我们知道所有对象都有表示(内存地址)和状态(数据),看上面代码是用"=="来比 ...