前言
- 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,而不是固定的字符名。 什么时候存储这个双向关系?
①SpanChunkHandler中
wasOnly的含义
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方法相信大家,应该会有所敏感,这应该是用来判断过滤条件的.
结论
// Callee node that agent hasn't been installed ServiceType UNKNOWN = of(1, "UNKNOWN", RECORD_STATISTICS);
|