GithubHelp home page GithubHelp logo

vi's Introduction

Cornerstone(基石)

License

Cornerstone(基石)是携程框架部门研发的内部可视化组件VI的开源版本,VI产品创意来源于ebay同名产品VI,VI是validation internals的缩写,字面意思可以理解为“内部验证”。你可以将VI理解为应用的窗口。 VI的一个目标就是把原本的应用黑盒子,变成一个透明的盒子。 在携程,VI主要是一个应用及应用相关环境的可视化工具,和应用健康状态及启动管理的工具(目前已是ctrip集团健康检测和点火标准)。 将开源版本命名为cornerstone是希望在这个组件里解决更多的基础问题,让开发和运营更简单和高效。

Features

  • 无中心,无强依赖(仅强依赖slf4j和gson)
  • 小而独立
  • 寄生在应用里
  • WEB展示和数据收集都在一个组件里
  • 数据实时
  • 数据覆盖面广(目标是暴露应用相关的一切)
  • 对应用影响小(不访问时,不消耗运行资源)
  • 极强扩展性
  • 启动管理
  • 缓存管理
  • 日志查看
  • GC日志分析
  • 多环境配置管理
  • 大部分jdk tool web化
  • 支持无埋点实时metrics
  • 支持无埋点实时"debug"

和JMX的关系

  • cornerstone里使用大量标准jmx mbean获取数据,并提供自动将特有的component status类(极易使用)转换为mbean并注册(大大简化mbean开发成本)。
  • 和jconsole以及jvisualvm 比的优势:
    • 使用公司sso认证
    • 无需应用开启额外端口.
    • 图形展示上更灵活
    • 数据更丰富

何时需要Cornerstone

当想了解应用健康状况。当想了解应用启动过程。当想了解使用组件的运行情况时。当需要定位问题时。当你需要暴露应用运行数据时。当想了解应用各类资源占用情况时。当想查找各类配置时。当需要给应用性能调优时 。。。 总之,你所关心应用运行的一切,都可以通过这个窗口了解和控制。

如何使用

(特别注意:目前VI只支持JDK>=1.7应用)

  • 任何java应用都可以接入VI,VI接入有两种模式,寄生模式和自主模式。
    寄生模式VI会寄生在已有的WEB容器里,不需要新开端口。
    自主模式,等于在应用上启动一个http协议的web服务。

  • VI主要功能演示都在cornerstone-example子项目中。
    这是一个web项目,将编译后的war包部署到tomcat里即可运行,例如将这个war包部署在本地的端口为8080的tomcat服务器,访问路径为http://localhost:8080/cornerstone-example-0/@in。

  • 想快速了解VI,可以使用spring boot example项目, 运行简单,使用方便

    • mvn方式: 在项目根目录运行 mvn -pl spring-boot-example spring-boot:run 即运行了一个含VI的spring boot应用。
      运行端口为9090,可以使用http://localhost:9090/@in 来访问VI。
    • IDE方式: 直接运行项目中ServiceStarter.java 的main方法,来运行或调试。
  • 下面主要介绍寄生模式(自主模式可以参考cornerstone-server里的测试用例)
    web和spring项目只需依赖vi的jar包即可使用。可以自己编译cornerstone子模块得到jar包,也可以使用预编译好的jar包(寄生模式)

    当web或spring boot应用使用默认的寄生模式接入VI后,VI会接管[应用路径]/@in的路径。
    例如tomcat应用,如果部署完成后的访问根路径为http://localhost/tomcat-demo, 那么可以使用 http://localhost/tomcat-demo/@in 来访问VI。

Screenshots

默认界面 启动日志 实时metrics 动态埋点 GC日志分析

Developers

License

The project is licensed under the Apache 2 license.

vi's People

Contributors

klboke avatar nobodyiam avatar tyaloo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vi's Issues

这个线程在做什么动作,有什么用处?

void runCheckThread(){

    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(new VIThreadFactory("vi-envIgnite"));
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            try{
                if(waitTimes == 0 || waitTimes >MAXTIMES){

                    if(waitTimes != 0){
                        waitTimes = 0;
                    }
                    EnFactory.getEnApp().register();
                }
            }
            catch (Throwable e){
                logger.warn("self registration failed!", e);
            }finally {
                waitTimes++;
            }

        }
    }, 0, DEFAULTINTERVAL, TimeUnit.SECONDS);
}

Buissness control

Stop using automated means to control my property and phone this is Randall Lee Piner the one who directly works with AI and quantum computing!

添加自定义resftful接口

你好,我想确认一个问题:我想下面加一个自己的resftful接口,例如:/@in/api/abc
我目前的做法是新写一个类ABCHandler实现接口ViFunctionHandler,然后在VIApiHandler的构造方法里面添加注册:

 public VIApiHandler(){ 
         ...
        this.register(new CodeHandler());
        this.register(new ABCHandler()); // <-我添加的服务接口实现
 }

测试下来可以工作。请确认一下这种做法是不是合理?谢谢!

能否提供maven坐标

希望提供maven坐标。
只提供jar包,这个不太符合现在JAVA项目的主流构建方式吧。

对点火插件在打成一个标准SpringBoot大jar包的部署方式不支持

你好,VI是不是对点火插件在打成一个标准SpringBoot大jar包的部署方式不支持?

譬如在你的示例工程spring-boot-example中,在pom.xml里改为:
<packaging>jar</packaging>
再利用maven命令打成标准SpringBoot大jar包,然后利用命令行启动:
> java -jar spring-boot-example-0.0.1.jar

启动之后,在vi页面菜单里点击'Ignite Status',页面出错,后台有如下异常。但是在IDE里面或war包方式能正常工作。

谢谢!

com.ctrip.framework.cs.configuration.InitConfigurationException: java.io.FileNotFoundException: D:\IdeaProjects\vi\spring-boot-example\target\spring-boot-example-0.0.1.jar!\BOOT-INF\classes (系统找不到指定的路径。)
at com.ctrip.framework.cs.configuration.ConfigurationManager.createDefaultConfigInstance(ConfigurationManager.java:183)
at com.ctrip.framework.cs.configuration.ConfigurationManager.getConfigInstance(ConfigurationManager.java:330)
at com.ctrip.framework.cs.component.ComponentHandler.execute(ComponentHandler.java:51)
at com.ctrip.framework.cs.VIApiHandler.executeService(VIApiHandler.java:160)
at com.ctrip.framework.cs.APIContentExecutor.doGet(APIContentExecutor.java:55)
at com.ctrip.framework.cs.VIApiServlet.handlerRequest(VIApiServlet.java:48)
at com.ctrip.framework.cs.VIApiServlet.doGet(VIApiServlet.java:104)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at com.ctrip.framework.cs.servlet.VIFilter.doFilter(VIFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.