前言
  • 在启动一个挂载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. UiPath之基础知识(一)

    各位小伙伴,大家好.在10月份小U的微信订阅号做了一个投票,主题是UiPath目前已经掌握的程度. 从投票的结果来看,有一半以上的人还是刚刚起步,为了帮助刚刚起步的小伙伴,准备陆续发布一些基础性的内容 ...

  2. linux 安装swoole扩展方法

    linux 安装swoole扩展方法 wget https://github.com/swoole/swoole-src/archive/v1.9.23.tar.gz接下去就不说了 说明下 下载swo ...

  3. Apache Jmeter进行服务器压力测试

    1.前言 最近项目遇到一个问题:其他公司对接我们系统,请求量太大的时候,返回单给对方就是丢失格式,大概十几万中总有那么十几单会出现格式错误! 所以我们老大就叫我用apache jmeter来进行并发测 ...

  4. Apache安装问题:APR not found

    资料来源:Apache遇到的问题:APR not found 安装apache时出现arp错误问题 按照以上文章试验之后整理如下: #./configure --prefix……检查编辑环境时出现: ...

  5. linux中dd相关命令骚操作

    一.dd如何快速将磁盘写满 方法一: dd if=/dev/zero of=/tmp/file bs=1G count=10 # 参数解释 1. if=文件名:输入文件名,缺省为标准输入.即指定源文件 ...

  6. Python 常用模块系列学习(3)--configparser module

    configpaser 模块----用于生成和修改常见配置文档 1. config 对象的创建: import configparser #导入模块 config = configparser.Con ...

  7. 力扣(LeetCode)反转链表 个人题解

    反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可以迭代或 ...

  8. bash:字符串变量查找

    提供了替换文本的查找替换功能,如 sed s/Wintel/Linux/g data (将Wintel替换为Linux)  大命令 下边是基于变量的小命令: 1)查找与替换 ${data/Wintel ...

  9. bash:双引号和单引号

    单引号.双引号都能引用字符和字符串 单引号:'$i'仅仅是字符,没有变量的意思了 双以号:变量等能表示出来

  10. usaco training <1.2 Greedy Gift Givers>

    题面 Task 'gift1': Greedy Gift Givers A group of NP (2 ≤ NP ≤ 10) uniquely named friends has decided t ...