zipkin,pinpoint和skywalking對比

APM(Application Performance Management)理論模型

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

zipkin

簡介

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

zipkin架構(gòu)

使用和配置

zipkin-collector項目zipkin-ui項目
Spring Cloud Sleuth是spring推出的分布式鏈路追蹤工具,借鑒了 Dapper, ZipkinHTrace.可以和spring-cloud項目完美契合。下面是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存儲客戶端發(fā)送來的數(shù)據(jù)
接下來是配置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以及采樣率


客戶端配置

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


zipkin調(diào)用鏈

pinpoint

簡介

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

  • 一目了然地了解您的應(yīng)用程序拓撲
  • 實時監(jiān)控您的應(yīng)用程序
  • 獲得每個事務(wù)的代碼級可見性
  • 在不更改一行代碼的情況下安裝APM代理
  • 對性能的影響最?。ㄙY源使用量增加約3%)
  • 報警

pointpoint概述與技術(shù)細節(jié)以及中文翻譯
中文翻譯圖片丟失,但在英文文檔里面可以找到對應(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會啟動如下服務(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啟動腳本增加下列三行代碼

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

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

采樣率

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

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

使用

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

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

skywalking

簡介

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

  • 服務(wù),服務(wù)實例,端點指標分析
  • 根本原因分析
  • 服務(wù)拓撲圖分析
  • 服務(wù),服務(wù)實例和端點依賴性分析
  • 慢服務(wù)和端點檢測
  • 性能優(yōu)化
  • 分布式跟蹤和上下文傳播
  • 報警

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

skywalking架構(gòu)

5.x版本文檔

部署

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

配置agent

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

配置成功后,ui界面訪問: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)用拓撲圖
VM指標
服務(wù)指標

調(diào)用鏈

采樣率

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

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

zipkin,pinpoint和skywalking的比較

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

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

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


性能對比圖

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

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

參閱這篇文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容