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

2023-11-01 09:30

本文主要是介绍侠梦说pinpoint--左侧服务地图调用量和WasOn过滤,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

file

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

file

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

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

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

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

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

file

结论
  • 粗略的理解:WAS ONLY会过滤类似于数据库、或者是位置的节点,让界面展示清楚一些。
  • 用程序思维理解是:它会过滤掉serviceType为Unknown或者是Terminal的节点,具体哪些节点会有这两个属性呢,我想大家可以去自行研究研究。
  • 我这里贴一个Unknown的,这个只有一个类型。
// Callee node that agent hasn't been installed
ServiceType UNKNOWN = of(1, "UNKNOWN", RECORD_STATISTICS);

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

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

这篇关于侠梦说pinpoint--左侧服务地图调用量和WasOn过滤的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322070

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Idea调用WebService的关键步骤和注意事项

《Idea调用WebService的关键步骤和注意事项》:本文主要介绍如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选... 目录前言一、理解WebService的基本概念二、获取WSDL文件三、阅读和理解WSDL文件四、选择对接

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、