<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          分布式鏈路追蹤工具pinpoint采樣率原理分析 您所在的位置:網站首頁 屬猴的都有什么命 分布式鏈路追蹤工具pinpoint采樣率原理分析

          分布式鏈路追蹤工具pinpoint采樣率原理分析

          2023-10-27 01:27| 來源: 網絡整理| 查看: 265

          前言

          一系列的服務上云后,可能分布在幾千甚至幾萬臺服務器上,服務與服務之間存在大量復雜的調用關系,而pinpoint在采集這些服務數(shù)據(jù)時,同樣會產生大量的報文。

          在naver公司的在線門戶服務有海量請求。單個服務每天處理超過200億請求。如果要跟蹤所有的請求,解決的辦法是需要添加足夠多的網絡設施和服務器來來支撐收集數(shù)據(jù)。

          但是對于這種非核心生產的監(jiān)控系統(tǒng)來說,是很不劃算的,浪費金錢又浪費資源。

          什么是采樣率

          在Pinpoint中,可以收集設置采樣,而不必跟蹤每個請求。在開發(fā)環(huán)境中請求量很小,每個數(shù)據(jù)都收集。而在產品環(huán)境請求量巨大,收集小比率的數(shù)據(jù)如1~5%,足夠檢查整個應用的狀態(tài)。采樣之后,可以最小化應用的網絡開銷并降低諸如網絡和服務器的設施費用。

          pinpoint的采樣率是如何配置的?

          對應的配置項在agent下的pinpoint.config文件中。

          # Allow sampling. profiler.sampling.enable=true # 1 out of n transactions will be sampled where n is the rate. (20: 5%) profiler.sampling.rate=1 # 1 out of n entities will be sampled where n is the rate. (10: 10%) profiler.apache.httpclient4.entity.sampling.rate=1

          首先采樣率有開關配置。默認"profiler.sampling.rate=1"表示全部

          Pinpoint 支持計數(shù)采樣,如果設置為10則只采樣10分之一的請求。我們計劃增加新的采樣器來更有效率的收集數(shù)據(jù)。

          很多小伙伴,看到采樣率配置,以為是配置的百分比,上來就配一個0點幾,其實不是的,這里我們簡單來理解一下,我們只需要關注分母即可,比如要配10%的采樣,那么設置這個屬性的值為10即可。

          pinpoint內部用的依賴注入框架Google Guice

          pinpoint內部的是否采樣和采樣率,是通過Sampler對象來封裝的。

          可以看到是通過com.google.inject.Inject注解來進行依賴注入的。

          內部使用的是Google Guice ,它一個輕量級的依賴注入框架。和spring不同的是:Spring 耦合度低,而Guice 耦合度高,代碼級的標注,DI 標記 @inject 侵入代碼中,耦合到了類層面上來。

          Guice 使用注解 Annotation,cglib, 效率高,這是與與 Spring 最明顯的一個區(qū)別,Spring 是在裝載配置文件的時候把該注入的地方都注入完,而 Guice 呢,則是在使用的時候去注射,運行效率和靈活性高。

          pinpoint采樣原理

          某條請求是否被采樣,取決于整個鏈路開始的機器。該機器使用特定的采樣算法。采樣的標志會一直在鏈路中透傳。比如在http里面,會在header里面增加Pinpoint-Sampled字段,使用不同的值表示是否采樣。

          上圖顯示pinpoint具體會使用到的一些Header。

          具體的判斷邏輯,是通過SamplingFlagUtils類來實現(xiàn)的。

          代碼層面的配置學習

          其實,代碼層面很簡單,就是判斷,如果不采樣,那就不發(fā)送大量的報文就行。

          但是!

          你總得告訴下游吧,不然怎么串聯(lián)起來呢,當然每個agent可以單獨有自己的采樣配置, 最好還是保持一致。

          以httpclient4的插件為例。

          從當前上下文里面獲取Trace對象,并判斷是否采樣,其Trace體系如下圖所示:

          發(fā)送端采樣處理

          在請求發(fā)送到下游的機器之前,會從當前上下文里面獲取Trace對象。

          如果不采樣,則嘗試在http頭部寫入Pinpoint-Sampled=s0, 其他信息都不傳遞。

          如果為需要采樣,則不設置Pinpoint-Sampled字段,只設置其他trace相關字段,比如Header.HTTP_TRACE_ID等。

          接收端采樣處理

          在服務端收到請求之后,會去查看請求里面是否有Pinpoint-Sampled字段和Pinpoint-TraceID等字段。分為下面幾種情況:

          有Pinpoint-Sampled字段,并且值為s0,表示此條請求不采樣。

          沒有Pinpoint-Sampled字段,但是有Pinpoint-TraceID等字段,表示此條請求被采樣。

          沒有Pinpoint-Sampled字段,也沒有Pinpoint-TraceID等字段,認為接收該請求的機器,是整條鏈路的第一個機器,或者鏈路信息在前面有丟失。

          總結

          在系統(tǒng)完成一次業(yè)務調用的過程中,會產生很多的調用鏈打點數(shù)據(jù),在業(yè)務量大的時候,這些數(shù)據(jù)可能同樣會成為我們系統(tǒng)的負擔,所以對數(shù)據(jù)采樣很有必要,在保證樣本充足的情況下,同樣能夠進行數(shù)據(jù)分析和定位系統(tǒng)性能瓶頸,快速定位異常的服務。本篇文章我們介紹了如下內容:

          pinpoint采樣率的概念和應用。

          pinpoint采樣率的配置。

          pinpoint使用的依賴注入框架Google Guice和spring的對比。

          pinpoint的采樣原理。

          可視化界面在線生成JVM參數(shù)

          java內存溢出問題分析過程二(附MAT超全作文檔)

          使用Eclipse Memory Analyzer Tool(MAT)分析線上故障(一)

          一文讓你理解什么是shallow heap及retained heap

          內存分析診斷系列-理解heap?dump

          記一次服務器被當肉雞挖礦的經歷

          如何編寫一個可復用的SpringBoot應用運維腳本

          高效率編寫Dockerfile需要繞過的一些坑

          Mysql百萬量級數(shù)據(jù)高效導入Redis

          多線程之CountDownLatch的用法及原理筆記

          我就知道你“在看”



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設備網 版權所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 和龙市| 邢台县| 盐城市| 华池县| 广灵县| 台东市| 石狮市| 内江市| 紫云| 花莲市| 绥棱县| 延吉市| 兴安盟| 井冈山市| 信阳市| 泾源县| 如东县| 龙口市| 乡宁县| 礼泉县| 湖南省| 汉川市| 东阿县| 铁岭市| 合作市| 麻城市| 泸西县| 沿河| 翁牛特旗| 赣榆县| 伊川县| 潜江市| 中牟县| 图木舒克市| 龙州县| 大化| 乌兰察布市| 特克斯县| 元氏县| 永春县| 固阳县| http://444 http://444 http://444 http://444 http://444 http://444