保姆级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.调整字…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
