前言

  • 这篇文章主要是从pinpoint-web界面入手,我们的目标是弄清楚两个问题:

    • 1、 pinpoint左侧服务地图上的调用量数据是怎么查询的?
    • 2、界面查询条件WasOnly是什么意思?

左侧服务地图调用量来源

	从下图可以看出,A显示被USER调用299次,线上数值代表着调用量。

我们F12跟踪一下接口地址:

http://webip:port/getServerMapDataV2.pinpoint?applicationName=A
&from=1575337980000&to=1575338040000
&callerRange=1&calleeRange=1
&bidirectional=false&wasOnly=false
&serviceTypeName=SPRING_BOOT
&_=1575337947426

web上显示的数据,都是从hbase查询出来的,所以跟踪后端pinpoint-web工程源代码,我们可以定位到hbase的一张表:ApplicationMapStatisticsCallee_Ver2。

调用者(caller)和被调用者callee

rowKey生成规则
  • 细节可以跟踪源代码了解
rowKey生成规则:
ApplicationMapStatisticsUtils.makeRowKey(...);
Qualify列名生成规则:
ApplicationMapStatisticsUtils.makeColumnName(...);

我们都知道,界面查询的时候可以选择Inboud和outboud,并且最大显示4X4的关系图,

所以在pinpoint设计的时候,就选择存储双向关系:(目的就是构造界面左侧的服务地图)。比如:

TOMCAT ===》调用 MYSQL则对调用者生成如下消息:

emeroad-app (TOMCAT) -> MySQL_DB_ID (MYSQL)[10.25.141.69:3306]

而对被调用者MYSQL生成:

 MySQL (MYSQL) <- emeroad-app (TOMCAT)[localhost:8080]
hbase存储

hbase存储结构如上图所示,因为都是二进制,所以列1,其实也是byte,而不是固定的字符名。

什么时候存储这个双向关系?

  • 知道数据的底层存储结构了,下面,我们继续来跟踪,它是如何存进来的,我们搜索一下引用,发现,有5个地方调用了这个存储的api。

  • 简单明了,那我们就逐个击破把!

①SpanChunkHandler中

  • 在chunk的结构中,要求有spanEventList这个数据,(因为调用量 和它内部的EVENTBo 条数 是1:1),并且需要满足isRecordStatistics记录条件。

  • 当满足这两个条件时,就会生成 A->B, B<--A, 两个关系,使其左侧服务地图调用量+1。

    其他位置逻辑类似,篇幅原因,这里不再细说。

  • ② SpanHandler,112行

  • ③ SpanHandler,117行

  • ④ SpanHandler,127行

  • ⑤ SpanHandler,189行

wasOnly的含义

  • 还是通过上述的接口,我们可以跟踪到,请求的参数,被封装到了一个这些参数都被封装到了SearchOption这个类。
private final int callerSearchDepth;
private final int calleeSearchDepth;
private final LinkSelectorType linkSelectorType;
private final boolean wasOnly;

怎么去看呢?这里提供一种思路,可能不适合所有人,大家参考一下。

从定义的变量,去理解它的含义,然后去“猜”。

callerSearchDepth: 调用者查询深度。

calleeSearchDepth:被调用者搜索深度。

除了wasOnly 和linkSelectorType不知道具体含义,上面两个应该就是用来控制搜索深度的。那我们继续跟踪代码:

这里通过判断是否是Was,新建了一个处理器。也就是说具体使用方法应该是在这个:

callerLinkDataMapProcessor 类中。

if (searchOption.isWasOnly()) {
callerLinkDataMapProcessor = new WasOnlyProcessor();
}

看到这个类的accept方法相信大家,应该会有所敏感,这应该是用来判断过滤条件的.

  • 从代码中可以看出,这里和Application有关,通过getServiceType

    的两个方法来判断是否过滤。

  • 有了这两个方法,就好办了,我们直接找它的实现就行了。

    根据依赖关系,我们定位到了ServiceTypeFactory这个工厂类、DefaultServiceType及ServiceTypeProperty,具体查找方式可以通过观察这几个类了解,关系如下:

结论

  • 粗略的理解:WAS ONLY会过滤类似于数据库、或者是位置的节点,让界面展示清楚一些。

  • 用程序思维理解是:它会过滤掉serviceType为Unknown或者是Terminal的节点,具体哪些节点会有这两个属性呢,我想大家可以去自行研究研究。

  • 我这里贴一个Unknown的,这个只有一个类型。

// Callee node that agent hasn't been installed
ServiceType UNKNOWN = of(1, "UNKNOWN", RECORD_STATISTICS);
  • 研究的时候,贴的图文太多,我整理了word,这里就不再多叙述了,有需要的小伙伴,可以加我,我发给你。欢迎关注侠梦的开发笔记

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

侠梦说pinpoint--左侧服务地图调用量和WasOn过滤的更多相关文章

  1. 侠梦说pinpoint--界面上的图标之AgetnInfo数据研究

    前言 在启动一个挂载pinpoint的springboot项目的时候,界面上显示成了jboss的图标,所以今天研究了一下这个数据是怎么来的. 我们知道不同图标和服务类型有关,服务不同,图标就不同,这在 ...

  2. 地图调起URI API(通过连接直接调用百度地图)

    网站:http://lbsyun.baidu.com/index.php?title=uri/api/web 地图调起URI API 百度地图URI API是为开发者提供直接调起百度地图产品(百度We ...

  3. 异数OS 星星之火(三)--异数OS-织梦师云 微服务编写入门

    . 异数OS 星星之火(三)–异数OS-织梦师云 微服务编写入门 本文来自异数OS社区 github: https://github.com/yds086/HereticOS 异数OS社区QQ群: 6 ...

  4. 生产服务GC调优实践基本流程总结

    Photo by Pixabay from Pexels 本文作者:夜色微光 - 博客园 (cnblogs.com) 前言 对Java虚拟机进行性能调优是一个非常宽泛的话题,在实践上也是非常棘手的过程 ...

  5. 织梦后台如何生成站点地图sitemap.xml

    第一步在网站根目录建立sitemap.php文件 内容如下: 写一个计划任务文件命名为generate_sitemap.php,放在/plus/task目录里,文件内容如下: <?php//定时 ...

  6. istio 服务地图

    1.安装 kubectl apply -f install/kubernetes/addons/servicegraph.yam 2.查看安装是否成功kubectl -n istio-system g ...

  7. 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构

    腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每 ...

  8. DEDECMS织梦自定义表单中必填项、电话邮箱过滤以及验证码规则

    织梦自定义表单必填项规则--->(wwwshu-acca.com网站表单) 1. 在plus/diy.php 的第 40行下加如下代码: 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  9. 【Win 10应用开发】手动调用WCF服务

    调用服务最简单的方法就是,直接在VS里面添加服务引用,输入服务的地址即可,无论是普通Web服务,还是WCF服务均可.VS会根据获取到的元数据,自动生成客户端代码. 如果服务的调用量很大,应用广泛,可以 ...

随机推荐

  1. tomcat 7.0 免安装版配置

    转载请注明出处,欢迎邮件交流:1057449102@qq.com 注意:tomcat 运行是依赖jdk的,前提是要安装了jdk,配置好. 1.把下载好的 apache-tomcat-7.0.85.zi ...

  2. LVS 十种算法

    LVS虚拟服务器是章文嵩在国防科技大学就读博士期间创建的,LVS可以实现高可用的.可伸缩的网络服务. LVS集群组成: 前端:负载均衡层  (一台或多台负责调度器构成) 中间:服务器群组层  (由一组 ...

  3. [考试反思]0903NOIP模拟测试36:复始

    因为多次被说颓博客时间太长于是 真香 恢复粘排行榜的传统. 大体上就是,T1A的前三,剩下的T2A的排名,再然后按照T3暴力得分排名. T1是个暴力.3个A的5个得分的.数据点极强爆零率极高. 我的思 ...

  4. [考试反思]0811NOIP模拟测试17:虚无

    (sdfz未参加,也就是一共就51个人) 也不粘具体排名了,只写分数线. []220 []201 []194 [5]181 [10]141 [15]132 [20]122 [25]116 [30]10 ...

  5. CSPS_105

    不想多说... T1 是$1$还是$26^n-1$ T2 是$f[getf(u)]=getf(v)$还是$f[u]=v$ T3 是$if(condition1\&\&condition ...

  6. es ik 分词 5.x后,设置默认分词

    1.使用模板方式,设置默认分词 注: 设置模板,需要重新导入数据,才生效 通过模板设置全局默认分词器 curl -XDELETE http://localhost:9200/_template/rtf ...

  7. 基于 HTML5 + WebGL 实现 3D 挖掘机系统

    前言 在工业互联网以及物联网的影响下,人们对于机械的管理,机械的可视化,机械的操作可视化提出了更高的要求.如何在一个系统中完整的显示机械的运行情况,机械的运行轨迹,或者机械的机械动作显得尤为的重要,因 ...

  8. Hybrid App: 了解JavaScript如何与Native实现混合开发

    一.简介 Hybrid Development混合开发是目前移动端开发异常火热的新兴技术,它能够实现跨平台开发,极大地节约了人力和资源成本.跨平台开发催生了很多新的开源框架,就目前而言,在混合开发中比 ...

  9. centos6的mysql安装

    1.安装mysql服务端 yum install mysql-server        yum install mysql-devel 2.下载mysql的压缩包 wget http://dev.m ...

  10. Springboot中的缓存Cache和CacheManager原理介绍

    背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...