找回密码
 会员注册
查看: 24|回复: 0

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

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-10-11 23:02:43 | 显示全部楼层 |阅读模式
背景随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个APM工具帮我们监控各个服务的性能及对服务间的调用进行跟踪,而通过调研多个开源APM工具后,最终我们选择了Pinpoint。简介Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。在使用上力图简单高效,通过在启动时安装agent,不需要修改哪怕一行代码,最小化性能损失(3%)。中文参考文档:http://skyao.github.io/leaning-pinpoint/index.html开源源码地址:https://github.com/naver/pinpointPinpoint的特点01①. 分布式事务跟踪,跟踪跨分布式应用的消息;②. 自动检测应用拓扑,帮助你搞清楚应用的架构;③. 水平扩展以便支持大规模服务器集群;④. 提供代码级别的可见性以便轻松定位失败点和瓶颈;⑤. 使用字节码增强技术,添加新功能而无需修改代码;⑥. pinpoint有非常直观的UI,符合项目的当前需求;⑦. pinpoint是基于java开发的,利于项目后期对源代码的修改;⑧. pinpoint的社区还是挺活跃,一般提问题第二天就有项目的committer回复Pinpoint架构图02架构图对应说明:- Pinpoint-Collector:收集各种性能数据- Pinpoint-Agent:探针与应用服务器(例如tomcat)关联,部署到同一台服务器上- Pinpoint-Web:将收集到的数据层现在web展示- HBase Storage:收集到数据存到HBase中Pinpoint的数据结构03Pinpoint 消息的数据结构主要包含三种类型 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的代码注入04Pinpoint 对代码注入的封装非常类似 AOP,当一个类被加载的时候会通过 Interceptor 向指定的方法前后注入 before 和 after 逻辑,在这些逻辑中可以获取系统运行的状态,并通过 TraceContext 创建 Trace 消息,并发送给 Pinpoint 服务器。但与 AOP 不同的是,Pinpoint 在封装的时候考虑到了更多与目标代码的交互能力,因此用 Pinpoint 提供的 API 来编写代码会比 AOP 更加容易和专业。Pinpoint的运行方式051. 方式一:配置文件启动#1.修改tomat目录下bin/catalina.sh,在ControlScriptforthe 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必须唯一,标志一个jvmCATALINA_OPTS="$CATALINA_OPTS-Dpinpoint.agentId=pp32tomcattest"#applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationNameCATALINA_OPTS="$CATALINA_OPTS-Dpinpoint.applicationName=32tomcat"2.方式二:SpringBoot启动java-javaagent:/home/webapps/pp-agent/pinpoint-bootstrap-1.6.2.jar-Dpinpoint.agentId=pp32tomcattest-Dpinpoint.applicationName=32tomcat-jar32tomcat-0.0.1-SNAPSHOT.jarPHP搭建全链路监控系统一、准备工作环境需要满足一下条件二、搭建步骤1. 在服务器相应位置拉去pinpoint的安装包,一般位置安装在/usr/local/src目录下,执行命令git clone https://github.com/pinpoint-apm/pinpoint-c-agent.gitPinpoint 官网:https://github.com/pinpoint-apm/pinpoint-c-agent/blob/master/DOC/PHP/Readme.md2. 安装pinpoint-php扩展cd/usr/local/src/pinpoint-c-agentphpize./configuremakemakeinstall在php.ini文件里配置如下代码并重启php服务即可extension=pinpoint_php.soCollector-agent'sTCPaddress,ip,port:Collector-Agent'sip,port,pleaseensureitconsistentwiththe`PP_ADDRESS`of`Collector-Agent`instep2(BuildCollector-Agent).pinpoint_php.CollectorHost=Tcp:ip:portpinpoint_php.SendSpanTimeOutMs=0#0isrecommandedrequestshouldbecapturedduing1second.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 23:55 , Processed in 1.974149 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表