zoukankan      html  css  js  c++  java
  • 侠梦说pinpoint--界面上的图标之AgetnInfo数据研究

    前言
    • 在启动一个挂载pinpoint的springboot项目的时候,界面上显示成了jboss的图标,所以今天研究了一下这个数据是怎么来的。

    • 我们知道不同图标和服务类型有关,服务不同,图标就不同,这在代码里面使用一个ServiceType属性来描述。

    file

    从agent启动开始
    • 我们都知道pinpoint采用的是字节码注入来实现APM监控,由Agent采集数据上报给Collector,所以我们的研究入口是agent下面的日志,启动过程中输出如下:
     Sending AgentInfo TAgentInfo....
     hostname:izwz98jc3nwxdjxg1yfd1hz, ip:172.xx.xx, ports:, 
     agentId:testboot_agentId, applicationName:testboot_45, 
     serviceType:1210, pid:28277, agentVersion:1.8.0,
    
     AgentInfo sent.
    
    • 这里会显示我们配置的服务名,agentId、ip等参数。
    • agent信息由AgentInfoSendTask这个类定时生成发送。
    • 这几个数据在代码里面都是通过注解来获取的:
    @AgentId String agentId, 
    @ApplicationName String applicationName, 
    @Container boolean isContainer, 
    @AgentStartTime long agentStartTime, 
    @ApplicationServerType ServiceType serverType
    
    • 那么由此可知,找到注入@ApplicationServerType的地方就是真相!

    file

    • 研究出依赖关系如下:

    file

    • 这里我们只关注服务类型,读代码可知,启动时会读取agent配置,所以如果你想显示的指定服务类型,那么在agent的pinpoint.config中配置这个属性即可。
       // service type
            this.applicationServerType = readString("profiler.applicationservertype", null);
    
    • 带着疑问继续,那么我们一般也没有配置,它是如何识别不同的类型的呢?
    插件声明类型
    • 上一篇文章有说过ServiceType,不同的插件需要声明一个code码来唯一标识。
    • 如果我们没有显式配置profiler.applicationservertype,pinpoint会怎么处理呢?
    • 继续来看日志

    file

    • 没错,就是UNDEFINED。没定义肯定取不到值呀。

    • 此时,pinpoint会获取所有已经注册的插件,调用他们的detect方法。如果校验通过,则直接返回插件中配置的serviceType。

    boolean detect(ConditionProvider provider);
    
    • 如果都找不到就会返回:STAND_ALONE
    ServiceType STAND_ALONE = of(1000, "STAND_ALONE", RECORD_STATISTICS);
    

    file

    • 那为文章开头的那个图标不是springboot呢?

    • 借用下群友图片,我们知道如果不配置,默认会去检测MAIN-CLASS的值有没有和pinpoint.config中的配置对应上。
      file

    • 一旦检测到,就返回对应插件的serverType,也就是SpringBoot。

    file

    • 我这里没有显示boot的原因是,我使用maven原生的方式打包,将依赖包lib分离开了,启动的main-class不是上述配置哪些。
    • 至于为什么显示成了jboss,是由于我配置了
    profiler.jboss.traceEjb=false
    profiler.applicationservertype=JBOSS
    

    欢迎来公众号【侠梦的开发笔记】 一起交流进步

  • 相关阅读:
    《那些年,我们拿下FPGA》做笔记
    三种初始化
    hdu4417 Super Mario 树阵离线/划分树
    【设计模式】文章摘要 查找联系人控件
    STL set
    阐述 QUEST CENTRAL FOR DB2 八罪
    使用线程执行堆栈StackTraceElement设计Android日志模块
    苹果iOS苹果公司的手机用户都有权索赔
    Android 4.4 沉浸式透明状态栏与导航栏
    常见的几种RuntimeException
  • 原文地址:https://www.cnblogs.com/hyq0823/p/12030984.html
Copyright © 2011-2022 走看看