保姆级Pinpoint(APM)实战教程

什么是Pinpoint

Pinpoint是由韩国NAVER公司开发并开源的一款应用程序管理工具,主要针对大规模分布式系统进行性能监控和故障诊断。通过跟踪分布式应用程序之间的事务,帮助分析系统的整体结构以及其中的组件是如何相互连接的。

与其对标的还有Twitter的Zipkin,国内开源的SkyWalking,对比下来Pinpoint有一定优势,这里不赘述。

Pinpoint的主要功能

ServerMap - 通过可视化组件的互连方式来了解任何分布式系统的拓扑结构。单击节点可显示有关组件的详细信息,例如其当前状态和事务计数。
Realtime Active Thread Chart - 实时监控应用程序内的活动线程。
Request/Response Scatter Chart - 随着时间的推移,可视化请求计数和响应模式,以识别潜在问题。通过在图表上拖动,可以选择事务以获取更多详细信息。

CallStack - 获得分布式环境中每个事务的代码级可见性,在单个视图中识别瓶颈和故障点。

Inspector - 查看应用程序的其他详细信息,如CPU使用率、内存/垃圾回收、TPS和JVM参数。

URI度量

基础设施监控
错误分析

Pinpoint架构

Pinpoint-Collector:收集各种性能数据

Pinpoint-Agent:探针与应用服务器(例如tomcat)关联,部署到同一台服务器上

Pinpoint-Web:将收集到的数据层现在web展示

HBase Storage:收集到数据存到HBase中

数据结构

Span

是最基本的调用追踪单元,当远程调用到达的时候,Span 指代处理该调用的作业,并且携带追踪数据。为了实现代码级别的可见性,Span 下面还包含一层 SpanEvent 的数据结构。每个 Span 都包含一个 SpanId。

Trace

是一组相互关联的 Span 集合,同一个 Trace 下的 Span 共享一个 TransactionId,而且会按照 SpanId 和 ParentSpanId 排列成一棵有层级关系的树形结构。

TraceId 是 TransactionId、SpanId 和 ParentSpanId 的组合

TransactionId(TxId)

是一个交易下的横跨整个分布式系统收发消息的 ID,其必须在整个服务器组中是全局唯一的。也就是说 TransactionId 识别了整个调用链;SpanId(SpanId)是处理远程调用作业的 ID,当一个调用到达一个节点的时候随即产生;ParentSpanId(pSpanId)顾名思义,就是产生当前 Span 的调用方 Span 的 ID。如果一个节点是交易的最初发起方,其 ParentSpanId 是 -1,以标志其是整个交易的根 Span。下图能够比较直观的说明这些 ID 结构之间的关系。

字节码修改

Pinpoint通过java agent技术(上一篇文章有详解)通过修改字节码的方式创建trace消息

安装部署

基本工具安装

安装java17(最低要求)

bash 复制代码
wget https://mirrors.tuna.tsinghua.edu.cn/Adoptium/17/jdk/x64/linux/OpenJDK17U-jdk_x64_linux_hotspot_17.0.12_7.tar.gz

 

设置JAVA_HOME

bash 复制代码
sudo tee /etc/profile.d/java.sh <<EOF
export JAVA_HOME=$(readlink -f /root/jdk-17.0.12+7/ | sed 's:/bin/java::')
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

source /etc/profile.d/java.sh

安装zookeeper(可选,hbase部署为集群模式时需要部署)

官网下载tar包

https://zookeeper.apache.org/

配置zoo.cfg并启动

bash 复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
#修改为9000,防止8080端口被占用
admin.serverPort=9000
bash 复制代码
./zkServer.sh start

HBase

部署单点模式的HBase(生产环境需要部署集群模式)

官网下载tar包

https://hbase.apache.org/downloads.html

启动hbase(这里直接默认启动单机模式,分布式模式需要额外部署zk和hdfs)

注意:分布式模式下,zk需要独立部署,需要修改hbase-env.sh和hbase-site.xml,具体参考官方文档https://hbase.apache.org/book.html#quickstart

bash 复制代码
/root/hbase-2.6.0/bin/start-hbase.sh

执行建表脚本

bash 复制代码
./hbase shell /root/hbase-create.hbase

http://ip:16010/master-status

Pinpoint Collector

这里使用release3.0.0版本

下载地址

https://github.com/pinpoint-apm/pinpoint/releases/tag/v3.0.0

启动

bash 复制代码
nohup java --add-opens java.base/java.nio=ALL-UNNAMED -Dpinpoint.zookeeper.address=127.0.0.1 -jar pinpoint-collector-3.0.0-exec.jar &

Pinpoint Web

启动

bash 复制代码
nohup java --add-opens java.base/java.nio=ALL-UNNAMED -Dpinpoint.zookeeper.address=127.0.0.1 -jar pinpoint-web-3.0.0-exec.jar &

网页访问:

http://ip:8080/

Pinpoint Agent

解压agent jar

bash 复制代码
tar -xvf pinpoint-agent-3.0.0.tar.gz

和业务jar包一起启动

bash 复制代码
nohup java -jar -javaagent:pinpoint-agent-3.0.0/pinpoint-bootstrap.jar -Dpinpoint.agentId=test-agent1 -Dprofiler.sampling.type=PERCENT -Dprofiler.sampling.percent.sampling-rate=100 -Dpinpoint.applicationName=businesstest1 businesstest-0.0.1-SNAPSHOT.jar &

注意需要指定sampling.type和sampling.percent.sampling-rate参数(默认是COUNTING和20,表示只采集1/20的请求)

成功采集业务请求

完整请求调用链

相关推荐
苏渡苇5 天前
Spring Insight 里如何把 Span 画成瀑布时间线
后端·spring·spring cloud·springboot·监控·apm
苏渡苇6 天前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring·spring cloud·系统监控·apm
ManageEngine卓豪10 天前
如何用 OpenTelemetry 实现企业分布式应用的全链路可视化?Applications Manager 集成方案与配置
可视化·apm·应用性能管理·分布式应用
编程序的员2 个月前
使用OpenTelemetry来监控GoLang应用
运维·golang·monitoring·apm·opentelemetry
yueqc12 个月前
Android 渲染(三):掉帧监控
android·渲染·apm·掉帧
Databuff3 个月前
国产开源APM databuff 成为 CNCF 顶级项目opentelemetry 官宣Vendor
运维·开源·skywalking·apm·可观测性·opentelemetry
热爱运维的小七3 个月前
深度解析|应用性能 + RUM + 拨测:现代 IT 运维的可观测性“铁三角”
运维·it运维·devops·apm·rum·网站拨测
SRETalk3 个月前
SkyWalking / Jaeger / ARMS 已经有了,还需要统一可观测平台吗
skywalking·apm·jaeger·flashcat·arms
key_3_feng6 个月前
APM基础概念普及:应用性能管理的全面解析
apm
观测云6 个月前
观测云3月产品升级报告 | 网络设备自动发现、数据库深度分析上线,故障中心、仪表板、APM及管理能力等持续优化
网络·数据库·apm