保姆级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 个月前
iOS 开发中不常见的专业术语
macos·ios·cocoa·oom·apm
观测云6 个月前
APM Profile 在系统可观测体系中的应用
apm·可观测性·profile
超维空间科技6 个月前
香橙派 AIpro开发板深度测评
apm
188_djh7 个月前
# 分布式链路追踪_skywalking_学习(1)
elasticsearch·agent·skywalking·apm·分布式链路追踪
超维空间科技8 个月前
Ardupilot无人船(车)自动调参
算法·二次开发·ardupilot·apm
ManageEngine卓豪9 个月前
AWS监控,AWS 性能监控工具
apm·aws 性能监控·aws 监控·应用程序性能管理
AscendKing1 年前
16k+ start 一个开源的的监控系统部署教程
apm·监控系统·服务监控
观测云1 年前
观测云产品更新 | 日志、场景仪表板、监控器等
数据可视化·apm·日志数据访问
怒飞1 年前
发布一款将APM日志转换为Excel的开源工具
python·无人机·apm·飞控·pixhawk