精品时尚网_打造成为最具影响力时尚网
您当前的位置 : 精品时尚网  >  科技
侠梦说pinpoint--左侧服务地图调用量和WasOn过滤!
2020-11-19 05:41:44 来源:互联网 阅读:-

前言

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

- 1、 pinpoint左侧服务地图上的调用量数据是怎么查询的?

- 2、界面查询条件WasOnly是什么意思?

左侧服务地图调用量来源

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

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

我们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存储

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

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

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

  • 知道数据的底层存储结构了,下面,我们继续来跟踪,它是如何存进来的,我们搜索一下引用,发现,有5个地方调用了这个存储的api。
侠梦说pinpoint--左侧服务地图调用量和WasOn过滤
  • 简单明了,那我们就逐个击破把!

①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方法相信大家,应该会有所敏感,这应该是用来判断过滤条件的.

侠梦说pinpoint--左侧服务地图调用量和WasOn过滤
  • 从代码中可以看出,这里和Application有关,通过getServiceType
  • 的两个方法来判断是否过滤。
  • 有了这两个方法,就好办了,我们直接找它的实现就行了。
  • 根据依赖关系,我们定位到了ServiceTypeFactory这个工厂类、DefaultServiceType及ServiceTypeProperty,具体查找方式可以通过观察这几个类了解,关系如下:
侠梦说pinpoint--左侧服务地图调用量和WasOn过滤

结论

  • 粗略的理解:WAS ONLY会过滤类似于数据库、或者是位置的节点,让界面展示清楚一些。
  • 用程序思维理解是:它会过滤掉serviceType为Unknown或者是Terminal的节点,具体哪些节点会有这两个属性呢,我想大家可以去自行研究研究。
  • 我这里贴一个Unknown的,这个只有一个类型。

// Callee node that agent hasn't been installed

ServiceType UNKNOWN = of(1, "UNKNOWN", RECORD_STATISTICS);

  • 研究的时候,贴的图文太多,我整理了word,这里就不再多叙述了,有需要的小伙伴,可以加我,我发给你。欢迎关注侠梦的开发笔记

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

推荐阅读:秦皇岛热线

频道推荐
  • 你不知道武汉有多美!
    你不知道武汉有多美!

    武汉有长江穿城而过,武汉有中国最好的高等学府,武汉有最赋文化底蕴的黄鹤楼,武汉有代表当代科技最前沿的中国光谷……现在武汉整座城市按下了暂停键,我们期待这座城市醒...

    2020-03-18
  • “开着百万豪车去自驾”?阳光沙滩还避寒!忙碌的你不妨了解下
    “开着百万豪车去自驾”?阳光沙滩还避寒!忙碌

    开篇:春节怎么过?经典画面就是包饺子、看春晚、一家人团团圆圆坐在一起吃年夜饭,等着新年的钟声敲响。不过越来越多的人选择过一个不同的新年,比如和家人一起自驾游去旅...

    2020-03-18
  • 海拔2160米空中栈道晋升“网红景点”,游客却被吓得腿软?
    海拔2160米空中栈道晋升“网红景点”,游客

    华山这个地方,无论你有没有去过,但总算听说过吧,它会经常出现在各种各样的古装影视剧中,尤其是金庸老先生,钟爱此地,一定程度上来看,正是凭借老先生之手,将这座山“...

    2020-03-18
  • 世界遗产浙江江郎山,壮美中国红的一部分,除免费还有哪些亮点?
    世界遗产浙江江郎山,壮美中国红的一部分,除免

    浙江江郎山发展旅游总要找一个合适的抓手,得天独厚的自然资源只是基础,还需要有引人入胜的“故事”才能立得起来。好“故事”对内可以梳理整合资源,成为顺畅运营基础;对...

    2020-03-18
  • 去白马雪山,看高山杜鹃
    去白马雪山,看高山杜鹃

    白马雪山自然保护区位于横断山脉中段,云岭北段主峰白马雪山(又名白芒雪山)和人支雪山的金沙江坡面。行政上隶属迪庆藏族自治州德钦县,北面与西藏芒康县接壤,东面隔金沙...

    2020-03-18
  • 美呆!看春天的中国
    美呆!看春天的中国

    正是春意正浓踏青好时节,跟着我们的航拍镜头,饱览一下祖国各地的烂漫春光,然后选择一个您的最爱,走起!广西桂林阳朔——遇龙水韵 油菜花香遇龙河是漓江在阳朔境内最长...

    2020-03-18