如非授权,禁止用于商业用途,转载请注明出处
作者: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微服务-服务日志监控的更多相关文章

  1. 微服务日志监控与查询logstash + kafka + elasticsearch

    使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...

  2. 【13】JMicro微服务-ID生成与Redis

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...

  3. 【12】JMicro微服务-Zookeeper

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...

  4. 【11】JMicro微服务-配置管理

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...

  5. 【8】JMicro微服务-JMicro ZKUI

    ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...

  6. JMicro微服务之超时&重试

    JMicro是本人开发的基于Java实现的微服务框架,当前正式版本为0.0.3,并已发布到maven中央仓库.项目源码github:https://github.com/mynewworldyyl/j ...

  7. 从 1.5 开始搭建一个微服务框架——日志追踪 traceId

    你好,我是悟空. 前言 最近在搭一个基础版的项目框架,基于 SpringCloud 微服务框架. 如果把 SpringCloud 这个框架当做 1,那么现在已经有的基础组件比如 swagger/log ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. .net core 微服务之日志落盘设计

    原文:.net core 微服务之日志落盘设计 目录 1.设计目标 2.日志流程 3.串联请求事务 3.1 请求ID 3.2 处理服务器.服务 3.3 处理接口名 3.4 日志的发生时间 3.5 接口 ...

随机推荐

  1. 如何将字符串转化为Jsoup的Document 对象

    有些时候在java操作解析html元素的时候比较繁琐,今天螃蟹就介绍一种可将html转换为document对象的方法——jsoup jsoup为我们解析html提供了比较全的API接口,我们通过将ht ...

  2. Codeforces 1093 简要题解

    文章目录 A题 B题 C题 D题 E题 F题 G题 传送门 GGG题手速慢了没有在比赛的时候码出来233,FFF题居然没想出来? 五道题滚粗. 先谈谈其他几道题. A题 传送门 不小心看错题 直接看奇 ...

  3. Cannot read property 'protocol' of undefined的原因和解决办法

    Cannot read property 'protocol' of undefined 原因:axios请求中的错误 1.请求地址写错了 2.没有引入http.js 3.引入http.js的时候,单 ...

  4. myeclipse安装svn方法汇总

    myeclipse安装svn方法汇总 博客分类: eclipse   MyEclipse6.5安装SVN插件,掌握了几种方法,本节就像大家介绍一下MyEclipse6.5安装SVN插件的三种方法,看完 ...

  5. 获取当前操作的IFrame对象的方法

    分两种情况:第一种:获取JS函数在父页面上,如下 function getIframeByElement(element){ var iframe; $("iframe").eac ...

  6. RNN与应用案例:注意力模型与机器翻译

    1. 注意力模型 1.2 注意力模型概述 注意力模型(attention model)是一种用于做图像描述的模型.在笔记6中讲过RNN去做图像描述,但是精准度可能差强人意.所以在工业界,人们更喜欢用a ...

  7. 微信小程序两种滑动方式

    竖向滑动: <scroll-view scroll-y="true" style="height: 200rpx;"> <view style ...

  8. JS如何创建对象

    js创建对象的方法很多,以下分别介绍

  9. 20145232 韩文浩 《Java程序设计》第8周学习总结

    教材学习内容总结 14 NIO与NIO2 NIO使用频道(channel)来衔接数据节点,对数据区的标记提供了clear(),rewind(),flip(),compact()等高级操作. 想要取得c ...

  10. nutch相关目录说明

    Nutch数据包含3个目录结构,分别是: 1.Crawldb:用于存储Nutch将要检索的url信息,以及检索状态(是否检索.何时检索) 2.Linkdb:用于存储每一个url所包含的超链接信息(包括 ...