保姆级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(最低要求)
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
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
EOFsource /etc/profile.d/java.sh
安装zookeeper(可选,hbase部署为集群模式时需要部署)
官网下载tar包
https://zookeeper.apache.org/
配置zoo.cfg并启动
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
#修改为9000,防止8080端口被占用
admin.serverPort=9000
./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
/root/hbase-2.6.0/bin/start-hbase.sh
执行建表脚本
./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
启动
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
启动
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
tar -xvf pinpoint-agent-3.0.0.tar.gz
和业务jar包一起启动
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的请求)
成功采集业务请求

完整请求调用链

相关文章:
保姆级Pinpoint(APM)实战教程
什么是Pinpoint Pinpoint是由韩国NAVER公司开发并开源的一款应用程序管理工具,主要针对大规模分布式系统进行性能监控和故障诊断。通过跟踪分布式应用程序之间的事务,帮助分析系统的整体结构以及其中的组件是如何相互连接的。 与其对标的还有Twitter的Zi…...
使用SpringBoot自定义注解+AOP+redisson锁来实现防接口幂等性重复提交
1 前提,整合好springboot和redis,redisson的环境 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2 编写自定义注解,注解的作用是标记…...
k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
计算节点的功能: 提供容器运行的环境 kube-proxy的主要功能: 术业有专攻, kube-proxy的主要功能可以概括为4个字 网络规则 那么kube-proxy自己其实是个daemonset控制器跑的 每个节点上都有个的pod 它负责网络规则 其实呢 它还是个小…...
三、归一化与标准化
归一化与标准化 前言一、最小最大值归一化1.1 原理(公式)1.2 API 介绍1.2.1 参数介绍1.2.2 属性介绍1.2.3 注意事项1.2.4 代码演示 1.3 举例说明 二、标准化2.1 原理(公式)2.2 API 介绍2.2.1 参数介绍2.2.2 属性介绍2.2.3 注意事项…...
B2105 矩阵乘法
B2105 矩阵乘法 #include <iostream> using namespace std; int main(){int n,m,k;cin>>n>>m>>k;int arr1[n][m];int arr2[m][k];for(auto & line:arr1){for(auto & x: line){cin>>x;}}for(auto & line:arr2){for(auto & x: lin…...
centos之下的mysql8的安装
文章目录 1.mysql.com进入(网址栏)2.xshell操作2.1拖拽上传2.2安装发布包2.3检查情况2.4安装mysql2.5手动启动2.6查看状态2.7查看随机密码2.8登录2.9重置密码 1.mysql.com进入(网址栏) 找下面的这个download按钮: 一直往下面划:找到下面的这个 下面的这个…...
计算机导论
概述 计算机简史 1935年代,英国数学家图灵(Alan Turing)提出“图灵机”,奠定了计算机的理论基础。 1952年,冯诺依曼确定了计算机由运算器、控制器、存储器、输入、输出等5部分组成(Von Neumann 体系结构)。 60年代…...
力扣209-长度最小的子数组-滑动窗口思想
题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&am…...
Xilinx 7系列FPGA PCI Express IP核简介
前言:Xilinx7系列FPGA集成了新一代PCI Express集成块,支持8.0Gb/s数据速率的PCI Express 3.0。本文介绍了7系列FPGA PCIe Gen3的应用接口及一些特性。 1. PCI Express规范演进 PCIe是一种高速串行计算机扩展总线标准,旨在替代传统的PCI和AG…...
红包雨html
1、分享一个红包雨html代码。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红包雨小游戏</ti…...
js 基础补充3
1. 闭包 在函数内部定义的函数,可以访问改函数的属性和方法 私有属性 延长变量的生命周期,更好的避免命名冲突 缺点:内存消耗比较大,不建议频繁使用 2. js 原型 原型链 访问对像的属性方法,不光会在对象上查找还会在…...
Invalid bean definition with name ‘employeeMapper‘ defined in file
参考以下博客: <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version> </dependency> 总结: 1. 拉取老项目的时候要特…...
悦享驾驶,乐在旅途,首选江铃集团新能源易至EV3青春版
金秋时节,天高气爽,正是出游的好时节。不论是家庭自驾游,还是朋友结伴出游,一款好看又好开的车绝对是提升旅行品质的重要因素。江铃集团新能源易至汽车EV3青春版,凭借其超高安全性、便捷操作性、卓越性能,成…...
测试WIFI和以太网的TCP带宽、UDP带宽和丢包率、延时
一、测试TCP、UDP的带宽 作为服务器:iperf3 -s -i 1 (或者用CloudCampus软件,或者iperf magic) Wi-Fi 发送、接收吞吐率的测试_magic iperf-CSDN博客 车机作为iperf3服务器,电脑作为iperf3得客户端,分别…...
redis 第155节答疑 源码分析Hash类型ziplist结构和zlentry实体解析
155属性 zlbytes zltail zllen entryX zlend 类型 uint32 t uint32 t uint16 t 列表节点 uint8 t 长度 4字节 4字节 2字节 不定 1字节 用途 记录整个压缩列表占用的内存字节数:在对压缩列表进行内存重分配,或者计算 zlend 的位置时使用 记录压缩列表表尾节点距离压缩…...
IDE使用技巧与插件推荐
集成开发环境(IDE)是开发者日常工作中的重要工具,合理使用IDE和合适的插件,能大大提高开发效率。本文将分享常见IDE(如VS Code、IntelliJ IDEA等)的一些高效使用技巧,以及开发过程中常用的插件推…...
1020接口测试面试题随记
1.测试中对于上下游承接的业务是怎么处理的 针对上下游承接的业务,我会采取以下措施进行处理:首先,明确上下游系统的接口和依赖关系,确保理解数据流和业务逻辑的连接点。其次,进行接口测试,验证上下游系统…...
Zotero7最新(2024)翻译问题——配置 百度API翻译
在使用翻译之前,首先要确保已经安装了插件:Translate for Zotero 关于插件的安装可以参考这篇文章: Zotero7最新(2024)安装、配置步骤-CSDN博客 接下来进入正题。 当使用Zotero7对英文文献翻译时,可能会…...
python程序设计员—练习笔记
目录 基础处理 字符串列表字典运算符正则表达式re库requestsBeautiful Soupjieba库分词模式基于TF-IDF算法的关键词提取 基于TextRank算法的关键词提取pandas 打开有多个表的.xlsx文件 基础处理 字符串 str_ str_.lower()lower()函数:将字符中的大写字母转换成小…...
1.DBeaver连接hive数据库
1.hive开启远程服务,linux中直接输入:hiveserver2 2.解压dbeaver和hive-jdbc-2.1.1.zip 3.双击打开 4.数据库,新建连接 5.搜索hive 6.配置参数 7.编辑驱动设置 8.添加jar包 9.测试连接 10.右击,新建sql编辑器 11.执行sql 12.调整字…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
