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

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

从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的地方就是真相!

  • 研究出依赖关系如下:

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

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

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

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

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

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

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

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

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

侠梦说pinpoint--界面上的图标之AgetnInfo数据研究的更多相关文章

  1. GS界面上显示的重要参考数据

    GS界面上显示的重要参考数据,这个是压测时重要参考 struct GSinfo { int revBuffNum; int sendBuffNum; int clientNum; int dbAskN ...

  2. 侠梦说pinpoint--左侧服务地图调用量和WasOn过滤

    前言 这篇文章主要是从pinpoint-web界面入手,我们的目标是弄清楚两个问题: 1. pinpoint左侧服务地图上的调用量数据是怎么查询的? 2.界面查询条件WasOnly是什么意思? 左侧服 ...

  3. 基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

    数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform ...

  4. dedecms 5.7文章编辑器附件上传图标不显示

    我最近发现在使用dedecms 5.7文章编辑器附件上传图标不显示了,以前是没有问题的,这个更新系统就出来问题了,下面我来给大家分享此问题解决办法.   问题bug:在dedecms 5.7中发现了一 ...

  5. 在 IconFont 上获取图标资源的操作方法与感悟

    如何在 IconFont 上获取图标资源 阿里巴巴矢量图标库网站(https://www.iconfont.cn/)上提供了非常丰富的图标资源,包括 SVG.AI.PNG.字体图标等格式.使用该网站提 ...

  6. html小知识点汇总(浏览器导航上显示图标、div无高度时试着清除浮动、文字环绕图片、字体加粗、div按百分比分、已有的不合适的class,针对特定的标签进行修改)

    1.新点击的网页,在浏览器导航上显示图标: 像这种效果: <head> <meta charset="UTF-8"> <meta name=" ...

  7. C#:隔离点击任务栏上的图标时的“最小化或者恢复”的效果

    通常点击任务栏上的图标时,对应窗体实现“最小化或者恢复”的效果.但是在做最小化到托盘时,不希望点击任务栏图标时最小化到托盘,即希望拦截了这些效果(不允许:通过点击任务栏上的图标,实现“最小化或者恢复” ...

  8. asp.net中遍历界面上所有控件进行属性设置

    * 使用方法: *  前台页面调用方法,重置:    protected void Reset_Click(object sender, EventArgs e)        {           ...

  9. 跟我一起学extjs5(05--主界面上增加顶部和底部区域)

    跟我一起学extjs5(05--主界面上增加顶部和底部区域)         这一节为主界面加一个顶部区域和底部区域. 一个管理系统的界面能够粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状 ...

随机推荐

  1. 爬虫学习--Day4(网页采集器的实现)

    #UA: User-Agent {请求载体的身份标识}#(反爬机制)UA检测:门户网站的服务器回检测对应请求的载体身份标识,如果检测到请求的载体身份为某一款浏览器就说明该请求时一个正常的请求.但是,如 ...

  2. Jenkins + docker ,容器中跑docker服务

    1. 宿主机:安装docker 2. 启动jenkins服务 https://jenkins.io/download/ Jenkins官网找自己需要的镜像版本号进行使用. docker run -it ...

  3. C++中对C的扩展学习新增语法——强制类型转换

    类型转换:主要进行指针类型转换,因为在C++中,不同类型指针不允许隐式转换,任何一个程序中如果出现了大量的类型转换,说明该程序不是太好的程序. 注意事项: 不同类型指针不允许隐式转换: void* 类 ...

  4. Linux运维利器之ClusterShell

    一.简介 实验室机房有大概百台的服务器需要管理,加上需要搭建Hadoop以及Spark集群等,因此,一个轻量级的集群管理软件就显得非常有必要了.经过一段时间的了解以及尝试,最终选择了clustersh ...

  5. 设置 DNS 服务器转发试验

    一.主节点的配置 1.yum install bind -y 安装 DNS 服务 2.vim /etc/named.conf 编辑 DNS 的配置文件 3. vim /etc/named.rfc191 ...

  6. Apache服务安装及一些基本操作

    注意:安装apache服务之前记得搭建yum仓库 1.安装apache服务,输入命令“yum install httpd” 安装成功后,会这样显示 2.需要对Apache服务进行启动,输入命令“sys ...

  7. HashSet源码学习,基于HashMap实现

    HashSet源码学习 一).Set集合的主要使用类 1). HashSet 基于对HashMap的封装 2). LinkedHashSet 基于对LinkedHashSet的封装 3). TreeS ...

  8. 线程同步&线程池

    线程同步&线程池 线程同步 线程不同步会出现的问题: 当多个线程操作同一资源时,会出现重复操作和和操作不存在的资源的问题,为了规避这一问题就需要线程的同步操作来实现资源的共同使用. 线程同步: ...

  9. 《HelloGitHub》第 44 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  10. MYSQLnavicat绿色版工具下载

    MYSql远程连接工具navicat工具:https://pan.baidu.com/s/1RU_8FCX7yCseAFRhn4voAQ