• 八方資訊網歡迎您!
    八方資訊網>科技>正文

    俠夢說pinpoint--左側服務地圖調用量和WasOn過濾!

    2020-11-19 07:59:12 來源: 閱讀:-

    前言

    • 這篇文章主要是從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,這里就不再多敘述了,有需要的小伙伴,可以加我,我發給你。歡迎關注俠夢的開發筆記

    歡迎來公眾號【俠夢的開發筆記】 一起交流進步

    本文為企業推廣,本網站不做任何建議,僅提供參考,作為信息展示!

    推薦閱讀:百金網

    網友評論
    請登錄后進行評論| 0條評論

    請文明發言,還可以輸入140

    您的評論已經發表成功,請等候審核

    小提示:您要為您發表的言論后果負責,請各位遵守法紀注意語言文明

    回到首頁 回到頂部
    八方資訊網 關于我們| 聯系我們| 招聘信息| XML地圖| 網站地圖TXT
    免責聲明:八方資訊網所有文字、圖片、視頻、音頻等資料均來自互聯網,不代表本站贊同其觀點,本站亦不為其版權負責。相關作品的原創性、文中陳述文字以及內容數據龐雜本站無法一一核實,如果您發現本網站上有侵犯您的合法權益的內容,請聯系我們,本網站將立即予以刪除!
    Copyright © 2012-2019 http://m.quan28.cn, All rights reserved.
    主站蜘蛛池模板: 欧美亚洲国产成人精品| 久久精品视频免费| 日韩精品久久无码中文字幕| 亚洲Av无码精品色午夜| 国产精品青青在线观看爽香蕉| 久久国产精品久久| 国产精品成人99久久久久91gav | 99久久亚洲综合精品网站| 久久er国产精品免费观看8| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲精品无码鲁网中文电影| 午夜一级日韩精品制服诱惑我们这边| 中文字幕精品一区影音先锋| 国产精品嫩草影院一二三区入口 | 国产精品第1页| 四虎成人精品免费影院| 69国产成人综合久久精品| 精品无码人妻一区二区三区 | 久久99精品久久久久久| 久久99精品国产一区二区三区| 国产在线91精品入口| 久久成人影院精品777| 精品人妻系列无码天堂| 一本一本久久a久久综合精品蜜桃| 久久99精品久久久久久野外 | 老司机99精品99| 99精品视频在线观看| 精品欧洲av无码一区二区| 精品永久久福利一区二区| 久久精品中文字幕无码绿巨人| 人妻少妇精品视中文字幕国语| 亚洲2022国产成人精品无码区| 午夜成人精品福利网站在线观看| 欧美XXXX黑人又粗又长精品| 精品国偷自产在线视频| 久久精品国产精品亚洲精品| 精品无码人妻一区二区免费蜜桃| 亚洲精品无码专区在线播放| 久久99亚洲综合精品首页| 亚洲欧美日韩精品专区| 久99久无码精品视频免费播放|