保姆级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
EOF

source /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的请求)

成功采集业务请求

在这里插入图片描述
完整请求调用链
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/894172.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件模拟I2C和硬件直接驱动I2C读取TCA95系列I2C转IO芯片分析

问题描述&#xff1a; 软件读取I2C转IO信号跳变&#xff0c;低电平时能读到高电平信号&#xff0c;高电平时能读到低电平信号&#xff0c;正确信号和错误信号的比值约10:1。 原因分析&#xff1a; I2C芯片的驱动底层采用了软件模拟实现&#xff0c;没有防错机制&#xff0c;…

MongoDB 8.0已全面可用

全球广受欢迎的文档型数据库MongoDB目前最新最强的版本&#xff0c;在易用性、企业级安全性、 弹性、可用性等方面均有大幅提升&#xff0c;适用于各种应用程序。 MongoDB 8.0的优化使整体吞吐量提高了32%&#xff0c;时间序列数据聚合的处理速度提高了200%以上。MongoDB 8.0的…

SSD |(七)FTL详解(中)

文章目录 &#x1f4da;垃圾回收&#x1f407;垃圾回收原理&#x1f407;写放大&#x1f407;垃圾回收实现&#x1f407;垃圾回收时机 &#x1f4da;解除映射关系&#x1f4da;磨损均衡 &#x1f4da;垃圾回收 &#x1f407;垃圾回收原理 ✋设定一个迷你SSD空间&#xff1a; 假…

OpenAi推出ChatGPT客户端

10 月 18 日&#xff0c;继苹果 macOS 版之后&#xff0c;OpenAI 为微软 Windows 用户推出了 ChatGPT 应用桌面客户端。目前这款应用正在测试&#xff0c;ChatGPT Plus / Enterprise / Team / Edu 版本的付费用户可以在微软应用商店中下载使用。 这款应用实质上是网页版 ChatGP…

Part1_MCP4017T-502E/LT型数字变阻器使用方法

MCP4017T-502E/LT是Microchip&#xff08;微芯&#xff09;公司的一款SC70封装且具备7位单I2C™数字端口与易失性存储器数字电位器&#xff0c;通过数字接口来控制电位器的阻值大小&#xff0c;可用于需要精确调整电压分压比、信号增益控制等应用场景。相比传统的机械电位器&am…

【Java】多线程 Start() 与 run() (简洁实操)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述start() 方法run() 方法 四、解决方案&#xff1a;4.1 重复调用 .run()4.2 重复调用 start()4.3 正常调用…

初识Linux · 重定向和缓冲区

目录 前言&#xff1a; 预备知识 缓冲区 重定向 前言&#xff1a; 其实有了文件2的预备知识&#xff0c;我们已经初步了解了文件描述符fd是什么&#xff0c;底层是如何运作的了&#xff0c;那么本文&#xff0c;我们通过文件描述符对重定向和缓冲区有一个更深层次的理解&a…

鸿蒙开发案例:推箱子

推箱子游戏&#xff08;Sokoban&#xff09;的实现。游戏由多个单元格组成&#xff0c;每个单元格可以是透明的、墙或可移动的区域。游戏使用Cell类定义单元格的状态&#xff0c;如类型&#xff08;透明、墙、可移动区域&#xff09;、圆角大小及坐标偏移。而MyPosition类则用于…

三菱PLC如何实现数据排序的分析?

一、分析 将D100到D104中的据从小到大排序结果存在D100到D104中&#xff0c;如D100到D104中存入100&#xff0c;34&#xff0c;27&#xff0c;45&#xff0c;22这5个数据&#xff0c;编写一个子程序&#xff0c;只到通过调用这个子程序就可以实现这5个数据的排序。当然简单的方…

iOS IPA上传到App Store Connect的三种方案详解

引言 在iOS应用开发中&#xff0c;完成开发后的重要一步就是将IPA文件上传到App Store Connect以便进行测试或发布到App Store。无论是使用Xcode进行原生开发&#xff0c;还是通过uni-app、Flutter等跨平台工具生成的IPA文件&#xff0c;上传到App Store的流程都是类似的。苹果…

衡石分析平台系统分析人员手册-应用模版

应用模板​ 应用模板使分析成果能被快速复用&#xff0c;节省应用创作成本&#xff0c;提升应用创作效率。此外应用模板实现了应用在不同环境上快速迁移。 支持应用复制功能 用户可以从现有的分析成果关联到新的分析需求并快速完成修改。 支持应用导出为模板功能 实现多个用户…

数论的第二舞——卡特兰数

当然了&#xff0c;虽然主角是卡特兰数&#xff0c;但是我们该学的数论还是不能落下的&#xff0c;首先先来介绍一个开胃小菜线性筛 1.积性函数&#xff1a; 2.线性筛 线性筛的筛选素数的时间复杂度更低&#xff0c;可以达到O(n)的时间复杂度 将每一轮进行筛选的数 n 表示…

Threejs 实现3D 地图(02)创建3d 地图

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" 地图数据来源&#xff1a; DataV.GeoAtlas地理小工具系列 <script setup> import {onMounted, ref} from vue import * as THREE from three im…

Spring Cloud 解决了哪些问题?

大家好&#xff0c;我是锋哥。今天分享关于【Spring Cloud 解决了哪些问题&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Spring Cloud 解决了哪些问题&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Cloud 是一个为构建分布式…

汽车建模用什么软件最好?汽车建模渲染建议!

在汽车建模和渲染领域&#xff0c;选择合适的软件对于实现精确的设计与高质量的视觉效果至关重要。那么不少的汽车设计师如何选择合适的建模软件与渲染方案呢&#xff0c;一起来简单看看吧&#xff01; 一、汽车建模用软件推荐 1、Alias Autodesk旗下的Alias系列软件是汽车设…

C语言复习第4章 数组

目录 一、一维数组的创建和初始化1.1数组的创建1.2 变长数组1.3 数组的初始化1.4 全局数组默认初始化为01.5 区分两种字符数组1.6 用sizeof计算数组元素个数1.7 如何访问数组元素1.8 一维数组在内存中的存储(连续存储)1.9 访问数组元素的另一种方式:指针变量1.10 数组越界是运行…

【Linux】平台设备驱动

在设备驱动模型中&#xff0c;引入总线的概念可以对驱动代码和设备信息进行分离。但是驱动中总线的概念是软件层面的一种抽象&#xff0c;与我们SOC中物理总线的概念并不严格相等。 物理总线&#xff1a;芯片与各个功能外设之间传送信息的公共通信干线&#xff0c;其中又包括数…

百度AI图片助手 处理本地图片

import random import time import requests import base64 import os import datetime import numpy as np import cv2 from PIL import Image import argparseclass IMGNetProcess(object):"""百度 图片处理"""def __init__(self, file, kind)…

【计算机网络】HTTP报文详解,HTTPS基于HTTP做了哪些改进?(面试经典题)

HTTP协议基本报文格式 在计算机网络中&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;是应用层的一种协议&#xff0c;用于客户端&#xff08;通常是浏览器&#xff09;和服务器之间的通信。HTTP报文分为请求报文和响应报文&#xff0c;以下是它们的基本格式。 1. H…

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持&#xff1a;Java拥有丰富的网络编程库&#xff0c;如Apache HttpClient、OkHttp等&#xff0c;这些库提供了强大的HTTP请求功能&#xff0c;使得发送请求和处理响应变得简单。高效的数据处理&#xff1a;Java的数据处理能力&#xff0c;结…