利用Pinpoint搭建全链路监控系统

news2024/11/29 10:58:51

随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个APM工具帮我们监控各个服务的性能及对服务间的调用进行跟踪,而通过调研多个开源APM工具后,最终我们选择了Pinpoint。

简介

Pinpoint 是一个开源的APM (Application Performance Management/应用性能管理) 工具,用于基于java的大规模分布式系统。在使用上力图简单高效,通过在启动时安装 agent,不需要修改哪怕一行代码,最小化性能损失 (3%)。

中文参考文档:http://skyao.github.io/leaning-pinpoint/index.html
开源源码地址:https://github.com/naver/pinpoint

Pinpoint 的特点

1.分布式事务跟踪,跟踪跨分布式应用的消息;

2.自动检测应用拓扑,帮助你搞清楚应用的架构;

3.水平扩展以便支持大规模服务器集群;

4.提供代码级别的可见性以便轻松定位失败点和瓶颈;

5.使用字节码增强技术,添加新功能而无需修改代码。

6.pinpoint有非常直观的UI,符合项目的当前需求

7.pinpoint是基于java开发的,利于项目后期对源代码的修改

8.pinpoint的社区还是挺活跃,一般提问题第二天就有项目的 committer回复。

Pinpoint架构图

图片

架构图对应说明:

  • Pinpoint-Collector:收集各种性能数据
  • Pinpoint-Agent:探针与应用服务器(例如tomcat)关联,部署到同一台服务器上
  • Pinpoint-Web:将收集到的数据层现在web展示
  • HBase Storage:收集到数据存到HBase中

Pinpoint的数据结构

Pinpoint 消息的数据结构主要包含三种类型Span,Trace 和TraceId。

1.Span是最基本的调用追踪单元

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

2.Trace 是一组相互关联的 Span 集合

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

3.TraceId是TransactionId、SpanId和ParentSpanId的组合

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

Pinpoint的代码注入

Pinpoint对代码注入的封装非常类似AOP,当一个类被加载的时候会通过 Interceptor向指定的方法前后注入before 和 after逻辑,在这些逻辑中可以获取系统运行的状态,并通过TraceContext创建Trace消息,并发送给 Pinpoint 服务器。但与AOP不同的是,Pinpoint在封装的时候考虑到了更多与目标代码的交互能力,因此用Pinpoint 提供的API来编写代码会比AOP 更加容易和专业。

Pinpoint的运行方式

方式一:配置文件启动

#1.修改tomat目录下bin/catalina.sh,在Control Script for the CATALINA Server加入以下三行代码:# pinpoint-bootstrap-1.6.2.jar的位置

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/webapps/service/pp-agent/pinpoint-bootstrap-1.6.2.jar"
# agentId必须唯一,标志一个jvm
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp32tomcattest"
# applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=32tomcat"

方式二:SpringBoot 启动

java  -javaagent:/home/webapps/pp-agent/pinpoint-bootstrap-1.6.2.jar  -Dpinpoint.agentId=pp32tomcattest -Dpinpoint.applicationName=32tomcat -jar 32tomcat-0.0.1-SNAPSHOT.jar

PHP搭建全链路监控系统

一、准备工作:

环境需要满足一下条件

图片

二、搭建步骤:

1.在服务器相应位置拉去 pinpoint 的安装包,一般位置安装在/usr/local/src目录下,执行命令git clone https://github.com/pinpoint-apm/pinpoint-c-agent.git

Pinpoint官网:https://github.com/pinpoint-apm/pinpoint-c-agent/blob/master/DOC/PHP/Readme.md

2.安装 pinpoint-php 扩展

cd  /usr/local/src/pinpoint-c-agent
phpize
./configure
make
make install

在php.ini文件里配置如下代码并重启php服务即可

extension=pinpoint_php.so
Collector-agent's TCP address, ip,port:Collector-Agent's ip,port, please ensure it consistent with the `PP_ADDRESS` of `Collector-Agent` in step2(Build Collector-Agent).pinpoint_php.CollectorHost=Tcp:ip:port
pinpoint_php.SendSpanTimeOutMs=0 
# 0 is recommanded
request should be captured duing 1 second. < 0 means no limited
pinpoint_php.TraceLimit=-1 DEBUG the agent, PHP's log_error should turn on too.
pinpoint_php.DebugReport=true
error_reporting = E_ALL
log_errors = On
error_log = /tmp/php_fpm_error.log

3.在项目中使用Pinpoint PHP-Agent,并按照以下步骤操作

①. 添加pinpoint-apm/pinpoint-php-aop到 composer.json并更新

②. 在项目的入口文件添加一下代码配置

#################################################
define('APPLICATION_NAME','APP-2');define('APPLICATION_ID','app-2');define('AOP_CACHE_DIR',__DIR__.'./Cache/');define('PLUGINS_DIR',__DIR__.'./Plugins/');define('PINPOINT_USE_CACHE','YES');require_once __DIR__. path to 'vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php';
#################################################

a.APPLICATION_NAME:应用名称。
b.APPLICATION_ID: 代理 ID。
c.AOP_CACHE_DIR: 在哪里生成 Cache。
d.PLUGINS_DIR: 路径 Plugins。
e.PINPOINT_USE_CACHECache: 'YES’在请求到来时不会更新;‘No’ 将 Cache 在每个请求到来时更新。(您也可以 Cache 通过删除它来更新。)考虑到性能,我们建议 ‘YES’。此外,如果您修改了插件,您应该更新以 Cache 使其生效。

f.require_once DIR. path to ‘vendor/pinpoint-apm/pinpoint-php-aop/auto_pinpointed.php’;:需要 pinpoint 的 auto_pinpointed.php。请在后面加上 require_once DIR.“/…/vendor/autoload.php”;,这很重要!

4.选择您的框架并将目录复制Plugins到应用程序的根目录,自动加载 Plugins到composer.json. 框架的详细信息:
ThinkPHP5
Yii2

效果展示

图片

图片

总结

目前有很多监控系统,PinPoint 从宏观上看,总体链路、服务总体状态(cpu、内存等等信息)都符合业务需要,业务通过接入 Pinpoint 后很容易的就能定位到问题,提高了解决问题的效率。


资源分享

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt5 QDialog对话框(QMessageBox,QInputDialog,QFontDialog,QFileDialog,QColorDialog)

PyQt5 QDialog对话框QDialog类图QDialogQMessageBoxQInputDialogQFontDialogQFileDialogQColorDialogQDialog类图 QDialog import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtCore import Qtclass MyDialogWindow…

数据结构之插入排序

插入排序 一种思想我们所在指向位是需要进行插入的数据 我们锁指向位置前的数据是被插入的数据组 我们根据与前面的数据元素一个个比较来确定插入位置的排序 比如现在的76比前面的97小&#xff0c;97进行一个右移&#xff0c;就是赋值给data[4]&#xff08;我这里猜测是76应该是…

QT 介绍

QT 介绍 Qt是一个跨平台的 C 开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;Command User Interface&#xff0c;CUI&#xff09;程序。且完全面向对…

项目实战——匹配系统(上)

ps&#xff1a;从这篇文章开始&#xff0c;整个项目最精华&#xff08;困难&#xff09;的部分就要来了&#xff0c;因此这里会把每一个步骤细分&#xff0c;并且说一下自己对于每个步骤的思考和理解&#xff08;博主水平有限&#xff0c;错误在所难免&#xff0c;欢迎指出讨论…

MyBatis-Plus(第一篇开山篇)

MyBatis-Plus&#xff08;第一篇开山篇&#xff09; 目录MyBatis-Plus&#xff08;第一篇开山篇&#xff09;结论&#xff1a;使用mybatis plus步骤1.导包2.整合(修改spring-dao配置文件)3.使用3.1 javaBean3.2 mapper层3.3 service层3.3.1 service接口3.3.2 service实现类3.4 …

【MEF:深度感知增强(细节增强:色彩映增强)】

Multi-exposure image fusion via deep perceptual enhancement &#xff08;基于深度感知增强的多曝光图像融合&#xff09; 多曝光图像融合 (MEF) 是通过将具有不同曝光的多个镜头集成在一起来解决此问题的有效方法&#xff0c;这在本质上是一个增强问题。在融合过程中&…

IDEA最实用的设置

​ 目录 全局设置 全局设置 选择 Configure->settings进入设置界面 1.设置主题 2.设置编码区的字体及大小 3.设置控制台的字体及大小 4.修改编码方式 解决有时我们在导入项目时&#xff0c;代码中的中文注释变成乱码问题。 5.设置按住Ctrl鼠标滚轮改变字体大小 6.设置…

Java基础深化和提高 ---- 函数式编程 Lambda

Lambda表达式介绍 Lambda简介 Lambda 表达式是 JDK8 的一个新特性&#xff0c;可以取代大部分的匿名内 部类&#xff0c;写出更优雅的 Java 代码&#xff0c;尤其在集合的遍历和其他集合操作 中&#xff0c;可以极大地优化代码结构。 在Java语言中&#xff0c;可以为变量赋予一…

计算机网络-传输层(TCP可靠传输(校验,序号,确认,重传),TCP流量控制,TCP拥塞控制(慢开始,拥塞避免)(快重传,快恢复))

文章目录1. TCP可靠传输2. TCP流量控制3. TCP拥塞控制1. TCP可靠传输 网络层&#xff1a;提供尽最大努力交付&#xff0c;不可靠传输。 传输层&#xff1a;使用TCP实现可靠传输 可靠&#xff1a;保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的。 TCP可…

redis 哨兵

哨兵可以帮助我们解决主从架构中的单点故障问题 哨兵的配置&#xff1a; 新建目录&#xff1a;usr/local/docker/redis/sen/ docker-compose.yml文件如下 version: "3.1" services:redis1:image: daocloud.io/library/redis:5.0.7restart: alwayscontainer_name: …

STL技巧大赏

STL技巧大赏 map insertinsertinsert 不允许有重复的键值的&#xff0c;如果新插入的键值与原有的键值重复则插入无效beginbeginbeginendendendclearclearclear 清除所有countcountcount 某个元素出现次数lower/upperboundlower/upper boundlower/upperbound set 比 mapmapm…

半导体新能源智能装备上位机工业软件设计方案

一、什么是上位机软件 如果说PLC是工业控制的小脑&#xff0c;那么上位机软件就是其大脑。在概念上&#xff0c;控制者和提供服务者是上位机&#xff0c;被控制者和被服务者是下位机&#xff0c;上位机往往是数字信号的处理和命令的下发&#xff0c;下位机往往是模拟量的处理和…

【Linux】初识系统调用进程状态

文章目录1. 什么是系统调用1.1 通过系统调用获取进程标示符通过其他方式查看PIDTopPS使用PID1.2 通过系统调用创建进程-fork初识2. 进程状态看看Linux内核源代码怎么定义查看状态Z(zombie)-僵尸进程僵尸进程危害孤儿进程1. 什么是系统调用 在linux中&#xff0c;系统调用是指操…

[附源码]java毕业设计校园志愿者服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Node_exporter主机探针部署

部署需求分析 使用ansible批量部署node-exporter监控客户端 node-exporter解压安装目录为home 添加至Linux服务重新加载&#xff0c;启动模块并设置开机启动 测试环境&#xff08;centos 7——3.10.0-1160.el7.x86_64&#xff09;运行成功 因为部署步骤较少&#xff0c;单个pla…

主从延迟读写不一致解决方案分析

具体业务场景方案分析 问题背景&#xff1a; 虽然强制走写库&#xff0c;避免了主从延迟带来的读库数据不一致问题&#xff0c;但是增加了写库的QPS&#xff0c;带来了巨大压力&#xff0c;所以通过限流来保护db&#xff0c;但这样会降低QPS。 业务上暂时不清楚&#xff0c;所…

[附源码]java毕业设计校园新闻管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

转铁蛋白修饰脂质体定制,Transferrin-Liposome

人转铁蛋白&#xff08;Human Transferrin&#xff09;主要在肝脏合成&#xff0c;是由位于同源N-端和C-端的两个叶片&#xff08;Lobe&#xff09;组成的一种单链糖蛋白。人转铁蛋白共含678个氨基酸残基&#xff0c;等电点为5.9、分子量为76kD。每分子的转铁蛋白能携带2个三价…

Mybatsi从入门到精通、从精通到卸载,这一篇就足够了【中篇】

资料下载 链接: https://pan.baidu.com/s/1i_D3hSkMElUyxBC0OJqRRg?pwdthg4提取码: thg4 简介 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简…

深度学习入门(四十七)计算机视觉——SSD和YOLO简介

深度学习入门&#xff08;四十七&#xff09;计算机视觉——SSD和YOLO简介前言计算机视觉——SSD和YOLO简介课件&#xff08;单发多框检测SSD&#xff09;生成锚框SSD模型效果总结课件&#xff08;YOLO&#xff09;YOLO&#xff08;你只看一次&#xff09;效果前言 核心内容来…