zipkin,pinpoint和skywalking對(duì)比

APM(Application Performance Management)理論模型

Dapper,大規(guī)模分布式系統(tǒng)的跟蹤系統(tǒng)

zipkin

簡(jiǎn)介

Zipkin是一種分布式跟蹤系統(tǒng)。它有助于收集解決微服務(wù)架構(gòu)中的延遲問(wèn)題所需的時(shí)序數(shù)據(jù)。它管理這些數(shù)據(jù)的收集和查找。Zipkin的設(shè)計(jì)基于Google Dapper論文。

zipkin架構(gòu)

使用和配置

zipkin-collector項(xiàng)目zipkin-ui項(xiàng)目
Spring Cloud Sleuth是spring推出的分布式鏈路追蹤工具,借鑒了 Dapper, ZipkinHTrace.可以和spring-cloud項(xiàng)目完美契合。下面是zipkin-collector的pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <artifactId>zipkin-collector</artifactId>

    <name>zipkin-collector</name>

    <parent>
        <groupId>io.choerodon</groupId>
        <artifactId>choerodon-framework-parent</artifactId>
        <version>0.8.0.RELEASE</version>
    </parent>
    <properties>
        <choerodon.starters.version>0.6.3.RELEASE</choerodon.starters.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>

        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin</artifactId>
            <version>1.31.3</version>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
            <version>1.31.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>io.choerodon</groupId>
            <artifactId>choerodon-starter-hitoa</artifactId>
            <version>${choerodon.starters.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>app</finalName>
    </build>
</project>

zipkin的通信方式支持http和message queue(kafka,rabbitMQ),但是http通信方式影響到主程序,所以這里采用kafka異步消息的方式通信。


image.png

使用elasticsearch存儲(chǔ)客戶端發(fā)送來(lái)的數(shù)據(jù)
接下來(lái)是配置zipkin-ui服務(wù),pom依賴和配置如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <artifactId>zipkin-ui</artifactId>

    <parent>
        <groupId>io.choerodon</groupId>
        <artifactId>choerodon-framework-parent</artifactId>
        <version>0.7.0.RELEASE</version>
    </parent>

    <properties>
        <choerodon.starters.version>0.5.4.RELEASE</choerodon.starters.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
        </dependency>

        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin</artifactId>
            <version>1.31.3</version>
        </dependency>

        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
            <version>1.31.3</version>
        </dependency>

        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
            <version>1.31.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.choerodon</groupId>
            <artifactId>choerodon-starter-hitoa</artifactId>
            <version>${choerodon.starters.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>app</finalName>
    </build>

</project>
bootstrap.yml配置

客戶端服務(wù)需要加入如下依賴

        <dependency><!--如果服務(wù)需要zipkin監(jiān)控功能則需要此依賴-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-stream</artifactId>
        </dependency>

然后客戶端作如下配置,配置kafka以及采樣率


客戶端配置

啟動(dòng)服務(wù)后發(fā)請(qǐng)求,訪問(wèn)zipkin-ui(http:localhost:9030)的服務(wù)端口即可查看可視化調(diào)用鏈了


zipkin調(diào)用鏈

pinpoint

簡(jiǎn)介

Pinpoint是一個(gè)APM(應(yīng)用程序性能管理)工具,適用于用Java / PHP編寫(xiě)的大型分布式系統(tǒng)。有如下特性:

  • 一目了然地了解您的應(yīng)用程序拓?fù)?/li>
  • 實(shí)時(shí)監(jiān)控您的應(yīng)用程序
  • 獲得每個(gè)事務(wù)的代碼級(jí)可見(jiàn)性
  • 在不更改一行代碼的情況下安裝APM代理
  • 對(duì)性能的影響最小(資源使用量增加約3%)
  • 報(bào)警

pointpoint概述與技術(shù)細(xì)節(jié)以及中文翻譯
中文翻譯圖片丟失,但在英文文檔里面可以找到對(duì)應(yīng)圖片

本地搭建

本地使用docker部署pinpoint-docker,版本為1.8.0
執(zhí)行如下命令一鍵搭建,鏡像比較大

git clone https://github.com/naver/pinpoint-docker.git
cd pinpoint-docker
docker-compose pull && docker-compose up -d

docker-compose會(huì)啟動(dòng)如下服務(wù)

  • Pinpoint-Web Server(ui界面)
  • Pinpoint-Collector
  • Pinpoint-Agent(ready to be used)
  • Pinpoint-Flink
  • Pinpoint-Zookeeper
  • Pinpoint-Hbase
  • Pinpoint-QuickStart(a sample application)
pinpoint架構(gòu)

配置應(yīng)用代理

下載release-1.8.0的pinpoint-agent包并解壓
在JVM啟動(dòng)腳本增加下列三行代碼

-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar #絕對(duì)路徑
-Dpinpoint.agentId=test #必須在pinpoinit安裝的全部服務(wù)器集群中全局唯一. 最簡(jiǎn)單的讓它保持唯一的方法是使用hostname($HOSTNAME),因?yàn)閔ostname一般不會(huì)重復(fù). 如果需要在服務(wù)器集群中運(yùn)行多個(gè)JVM,請(qǐng)?jiān)趆ostname前面增加一個(gè)前綴來(lái)避免重復(fù)
-Dpinpoint.applicationName=api-gateway#服務(wù)名稱,在ui界面顯示
pinpoint代理原理圖

代理會(huì)在應(yīng)用程序啟動(dòng)前,用字節(jié)碼增強(qiáng)技術(shù)注入Interceptor,然后代理使用UDP/TCP+Thrift發(fā)送數(shù)據(jù)到collector,collector負(fù)責(zé)持久化和處理數(shù)據(jù),然后web ui從HBase中拿到數(shù)據(jù)進(jìn)行展示

采樣率

在pinpoint-agent-1.8.0/pinpoint.config配置采樣率

#采樣率為數(shù)字的倒數(shù),1即1/1=100%,2表示1/2=50%
profiler.sampling.rate=1

使用

ui界面訪問(wèn)http://localhost:8079
pinpoint的功能還是很強(qiáng)大的,可以監(jiān)控Jvm內(nèi)存使用情況,Jvm永久帶使用占用空間,Cpu使用情況,每秒處理的消息數(shù)(S標(biāo)識(shí)操作系統(tǒng),U標(biāo)識(shí)此應(yīng)用),Jvm線程情況,單請(qǐng)求平均響應(yīng)時(shí)間等,顆粒度很細(xì),缺點(diǎn)是環(huán)境搭建比較繁瑣,高并發(fā)情況下,代理對(duì)吞吐量的影響比skywalking和zipkin都大,后續(xù)會(huì)介紹性能的對(duì)比

調(diào)用鏈明細(xì)
應(yīng)用檢查器
主界面

skywalking

簡(jiǎn)介

SkyWalking是一個(gè)開(kāi)源的APM系統(tǒng),包括監(jiān)控,跟蹤,診斷Cloud Native架構(gòu)中分布式系統(tǒng)的功能。
核心功能如下。

  • 服務(wù),服務(wù)實(shí)例,端點(diǎn)指標(biāo)分析
  • 根本原因分析
  • 服務(wù)拓?fù)鋱D分析
  • 服務(wù),服務(wù)實(shí)例和端點(diǎn)依賴性分析
  • 慢服務(wù)和端點(diǎn)檢測(cè)
  • 性能優(yōu)化
  • 分布式跟蹤和上下文傳播
  • 報(bào)警

SkyWalking支持從多個(gè)來(lái)源和多種格式收集遙測(cè)(痕跡和指標(biāo))數(shù)據(jù),包括
1.SkyWalking格式的Java,.NET Core和NodeJS自動(dòng)儀器代理
2.Istio遙測(cè)格式
3.Zipkin v1 / v2格式

skywalking架構(gòu)

5.x版本文檔

部署

  • 5.0.0-GA版本只能和5.x版本的elasticsearch匹配,使用6.x版本會(huì)連不上elasticsearch
  • run bin/startup.sh即可啟動(dòng)
  • 需要配置好服務(wù)器的時(shí)區(qū)和時(shí)間

配置agent

1.拷貝agent目錄到所需位置. 日志,插件和配置都包含在包中,請(qǐng)不要改變目錄結(jié)構(gòu).
2.增加JVM啟動(dòng)參數(shù), -javaagent:/path/to/skywalking-agent/skywalking-agent.jar. 參數(shù)值為skywalking-agent.jar的絕對(duì)路徑。
3.支持插件,插件全部放置在 /plugins 目錄中.新的插件,也只需要在啟動(dòng)階段,放在目錄中,就自動(dòng)生效,刪除則失效.
4.可以在/agent/config/agent.conf 配置每個(gè)應(yīng)用的agent.application_code,也可以通過(guò)vm參數(shù)來(lái)覆蓋代理配置-javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.application_code=gateway-helper

配置成功后,ui界面訪問(wèn):http://localhost:8080,使用admin/admin登陸

集群部署

https://github.com/apache/incubator-skywalking/blob/5.x/docs/cn/Deploy-backend-in-cluster-mode-CN.md

性能

探針性能

UI界面

dashboard
應(yīng)用拓?fù)鋱D
VM指標(biāo)
服務(wù)指標(biāo)

調(diào)用鏈

采樣率

在/agent/config/agent.config文件里配置,skywalking默認(rèn)的采樣率是100%

# 每3秒取樣的次數(shù),負(fù)數(shù)的含義是盡可能多的取樣,即100%取樣
agent.sample_n_per_3_secs=-1

zipkin,pinpoint和skywalking的比較

性能(摘自https://juejin.im/post/5a7a9e0af265da4e914b46f1

選用了一個(gè)常見(jiàn)的基于Spring的應(yīng)用程序,他包含Spring Boot, Spring MVC,redis客戶端,mysql。 監(jiān)控這個(gè)應(yīng)用程序,每個(gè)trace,探針會(huì)抓取5個(gè)span(1 Tomcat, 1 SpringMVC, 2 Jedis, 1 Mysql)。這邊基本和 skywalkingtest 的測(cè)試應(yīng)用差不多。

模擬了三種并發(fā)用戶:500,750,1000。使用jmeter測(cè)試,每個(gè)線程發(fā)送30個(gè)請(qǐng)求,設(shè)置思考時(shí)間為10ms。使用的采樣率為1,即100%,這邊與生產(chǎn)可能有差別。pinpoint默認(rèn)的采樣率為20,即50%,通過(guò)設(shè)置agent的配置文件改為100%。zipkin默認(rèn)也是1。組合起來(lái),一共有12種。下面看下匯總表:


性能對(duì)比圖

從上表可以看出,在三種鏈路監(jiān)控組件中,skywalking的探針對(duì)吞吐量的影響最小,zipkin的吞吐量居中。pinpoint的探針對(duì)吞吐量的影響較為明顯,在500并發(fā)用戶時(shí),測(cè)試服務(wù)的吞吐量從1385降低到774,影響很大。然后再看下CPU和memory的影響,在內(nèi)部服務(wù)器進(jìn)行的壓測(cè),對(duì)CPU和memory的影響都差不多在10%之內(nèi)。

collector的可擴(kuò)展性、 全面的調(diào)用鏈路數(shù)據(jù)分析、對(duì)于開(kāi)發(fā)透明,容易開(kāi)關(guān)等

參閱這篇文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,505評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,017評(píng)論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,219評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,438評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評(píng)論 5 359
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,918評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容