Spring Cloud 学习(33) --- APM(三) Pinpoint

Pinpoint 是韩国人编写的 APM 系统,是一个分析大规模分布式系统的平台,并提供处理大量跟踪数据的解决方案。

Pinpoint

特点

  • 分布式事务追踪,跟踪跨分布式应用的消息
  • 自动检测应用拓展
  • 水平扩展,以便支持大规模服务器集群
  • 提供代码级了践行,便于定位失败点和瓶颈
  • 提供字节码增强技术,添加新功能无需修改代码

优势

  • 非侵入式:使用字节码增强技术,添加新功能无需修改代码
  • 资源消耗小:对性能影响最小(资源使用量增加约3%)

架构模块

  • HBase:主要用于存储数据
  • Pinpoint Collector:部署在 Web 容器上
  • Pinpoint Web:部署在 Web 容器上
  • Pinpoint Agent:附加到用于分析的 Java 应用程序

流程:首先通过 agent 收集调用应用的数据,将数据发送到 collector,collector 通过处理和分析数据,最后存储到 HBase 中,可以通过 Pinpoint Web UI 查看已经分析好的调用分析数据

数据结构

  • Span:RPC 跟踪的基本单位,表示 RPC 到达时处理的工作,包含跟踪数据。Span 将子项标记未 SpanEvent,作为数据结构,每个 Span 包含一个 TraceId
  • Trace:一系列跨度,由相关的 RPC(Span) 组成。同一跟踪中的跨距共享相同的 TransactionId。Trace 通过 SpanIds 和 ParentSpanIds 排序为分层树结构
  • TraceId:由 TransactionId、SpanId、ParentSpanId 组成的秘钥集合。TransactionId 代表消息id,SpanId 和 ParentSpanId 表示 RPC 父子关系

TransactionId:来自单个事务的分布式系统发送、接收的消息id,必须在整个服务器组是全局唯一的
SpanId:接收 RPC 消息时处理的作业 ID,是在 RPC 到达节点时生成的
ParentSpanId:生成 RPC 的父 span 的 spanId,如果节点是事务的起始点,不会有父跨度。

pinpont 架构图

兼容性

JDK 兼容性

Pinpoint 版本 Agent 需要的 JDK 版本 Collector 需要的 JDK 版本 Web 需要的 JDK 版本
1.0.x 6-8 6+ 6+
1.1.x 6-8 7+ 7+
1.5.x 6-8 7+ 7+
1.6.x 6-8 7+ 7+
1.7.x 6-8 8+ 8+
1.8.x 6-8,9+ 8+ 8+

Base 兼容性

Pinpoint 版本 HBase 0.94.x HBase 0.98.x HBase 1.0.x HBase 1.1.x HBase 1.2.x
1.0.x × × × ×
1.1.x × not tested not tested not tested
1.5.x × not tested not tested not tested
1.6.x × not tested not tested not tested
1.7.x × not tested not tested not tested
1.8.x × not tested not tested not tested

Agent-Collector 兼容性

Agent 版本 Collector 1.0.x Collector 1.1.x Collector 1.5.x Collector 1.6.x Collector 1.7.x Collector 1.8.x
1.0.x
1.1.x not tested
1.5.x × ×
1.6.x × × not tested
1.7.x × × × ×
1.8.x × × × × ×

Flink 兼容性

Pinpoint 版本 flink 1.3.x flink 1.4.x
1.7.x ×

实例

HBase 版本为 1.2.11,下载地址:http://mirrors.hust.edu.cn/apache/hbase/hbase-1.2.11/
Pinpoint 版本为 1.7.3,下载地址:https://github.com/naver/pinpoint/releases/tag/1.7.
Tomcat 版本为:8.x

其中,Pinpoint 需要下载 agentcollectorweb 三个文件。

HBase

启动 HBase

解压 HBase,修改 config/hbase-env.sh 中 JAVA 目录

HBase Java home

修改后启动 HBase: ./bin/start-hbase.sh

starting master, logging to /opt/hbase/bin/../logs/hbase-root-master-localhost.localdomain.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0

稍等片刻后,jps 查看是否启动完成,若出现 HMaster,则启动完成:

hbase setup

加载 Pinpoint HBase 脚本

https://github.com/naver/pinpoint/tree/master/hbase/scripts 中,获取 hbase-create.hbasehbase-drop.hbase 文件,新建目录 hbase-script,执行脚本:

./bin/hbase shell /root/hbase-script/hbase-create.hbase 
HBase Shell

Pinpoint

启动 Collector、Web

将 tomcat 解压为2个包,分别为 collectorweb,删除 tomcat 目录下 webapps 下除 ROOT 的文件夹,并删除 ROOT 下所有文件。
将 collector、web 分别解压至对应 tomcat 的 ROOT 目录下,解压命令:

jar -xvf pinpoint-collector-1.7.3.war

分别修改两个 tomcat 的 config/server.xml 文件,修改端口 8005808084438009 端口,然后分别启动两个 tomcat。启动成功后访问 zipkin:http://192.168.67.136:28080/#/main

zipkin

配置 Agent

创建四个文件夹:eurekaproviderconsumerzuul,并将四个服务移入对应文件夹,解压 agent.tar.gz,将解压后的文件放入四个文件夹:

pinpoint agent

配置 agent 中的 pinpoint.config 文件,修改 profiler.collector.ip 设置为 pinpoint-collector 的地址,如果在同一个服务器上,不用修改。

pinpoint collector ip

可以看到在 pinpoint.config 中监听了 999499959996 端口,这三个端口在 collector 启动后就开启了,默认即可。如果 collector 需要修改端口,需要修改 $COLLECTOR_TOMCAT_HOME/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties 文件。

启动服务

参数解释:
-Dpinpoint.agentId:表示 agent 的唯一标识
-Dpinpoint.applicationName:表示用用名称

eureka
java -javaagent:/usr/local/src/pinpoint/soft/eureka/pinpoint-agent-1.7.3/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=eureka-server -Dpinpoint.applicationName=eureka-server -jar spring-cloud-eureka-server-simple-0.0.1-SNAPSHOT.jar

provider
java -javaagent:/usr/local/src/pinpoint/soft/eureka/pinpoint-agent-1.7.3/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=provider -Dpinpoint.applicationName=provider -jar spring-cloud-apm-skywalking-provider-0.0.1-SNAPSHOT.jar

consumer
java -javaagent:/usr/local/src/pinpoint/soft/eureka/pinpoint-agent-1.7.3/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=consumer -Dpinpoint.applicationName=consumer -jar spring-cloud-apm-skywlaking-consumer-0.0.1-SNAPSHOT.jar

zuul
java -javaagent:/usr/local/src/pinpoint/soft/eureka/pinpoint-agent-1.7.3/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=zuul -Dpinpoint.applicationName=zuul -jar spring-cloud-apm-skywalking-zuul-0.0.1-SNAPSHOT.jar -Xms256m -Xmx256m

成功启动后,访问 pinpoint:http://192.168.67.136:28080/#/main

pinpoint dashboard

通过 zuul 获取数据:http://192.168.67.136:9020/client/get-info

pinpoint zuul

再次查看 pinpoint,切换到 zuul 选项卡:


pinpoint error

pinpoint error

红色代表调用失败(第一次调用时需要从 eureka 获取数据,默认超时一秒)。数字代表调用次数

Inspector:检查器,可以查看服务的调用信息。点击查看:

inspector

Inspector 中,Timeline 选项卡显示请求时间段,information 选项卡显示当前节点启动的信息,包括:应用名、agentId、启动时间等,Heap Usage 显示堆使用情况,JVM/System Cpu Usage 显示 CPU 使用情况,Active Thread 显示线程使用情况。Response Time 显示响应时间,Data Source 显示数据库使用情况

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 写在前面 部分图片因为之前的图床挂了所以丢失…近期目测没有时间重新搞了… APM监控工具之Pinpoint初探 简...
    Lacia阅读 11,825评论 7 6
  • 前言:由于翻译水平有限,难免有所疏漏。各位读者在本机搭建环境demo时请如有疑惑请联系:tienchen1990@...
    32442b7b969c阅读 10,741评论 1 2
  • 本文将讲述Pinpoint的技术,如事务追踪和字节码增强。并介绍应用于Pinpoint Agent的优化方法,该方...
    Ax1an阅读 7,651评论 0 6
  • 前期准备 节点准备 本次节点列表如下: pinpoint集群依赖于hbase集群,因此需要先搭建好hbase集群(...
    洮生阅读 4,112评论 1 6
  • 简介 Pinpoint是用Java编写的大型分布式系统的APM(应用程序性能管理)工具...
    无所谓_f0aa阅读 3,765评论 0 0