PinPoint分布式全链路监控

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

PinPoint分布式全链路监控

安装需要的所有包下载路径:

链接: https://pan.baidu.com/s/1sl9dP9r 密码: jsux

介绍:

   PinPoint是一个开源的APM((Application Performance Management/应用性能管理)工具,基于JAVA的大规模分布式系统。

   仿照GOOLE DAPPER,PinPoint通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系


    服务器地图(ServerMap):

       通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。

    实时活动线程图表(Realtime Active Thread Chart)

实时监控应用内部的活动线程。

请求/应答分布图表(Request/Response Scatter Chart)

长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息

调用栈(CallStack)

在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点

巡查(Inspector)

查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数 

分布式系统调用链监控特点:

    1、应用架构由集中式向分布式演进后,整个调用关系变得复杂

2、分布式架构由复杂且较大规模集群构成,哥哥应用之间相当独立,可能由不同团队、不同语言实现

3、系统一个完整的调用过程可能横跨多个服务及数据中心

4、复杂的调用导致系统出问题后难以定位问题

5、无法准确知道整体系统性能及运行情况

Pinpoint中的数据结构

Pinpoint中,核心数据结构由Span, Trace, 和 TraceId组成

    1、Span: RPC (远程过程调用/remote procedure call)跟踪的基本单元; 当一个RPC调用到达时指示工作已经处理完成并包含跟踪数据。

    为了确保代码级别的可见性,Span拥有带SpanEvent标签的子结构作为数据结构。每个Span包含一个TraceId

2、Trace: 多个Span的集合; 由关联的RPC (Spans)组成. 在同一个trace中的span共享相同的TransactionId。Trace通过SpanId和ParentSpanId整理为继承树结构.

    3、TraceId: 由 TransactionId, SpanId, 和 ParentSpanId 组成的key的集合. TransactionId 指明消息ID,而SpanId 和 ParentSpanId 表示RPC的父-子关系。

TransactionId (TxId): 在分布式系统间单个事务发送/接收的消息的ID; 必须跨整个服务器集群做到全局唯一.

SpanId: 当收到RPC消息时处理的工作的ID; 在RPC请求到达节点时生成。

ParentSpanId (pSpanId): 发起RPC调用的父span的SpanId. 如果节点是事务的起点,这里将没有父span - 对于这种情况, 使用值-1来表示这个span是事务的根span。

Google Dapper 和 NAVER Pinpoint在术语上的不同

全链路性能监控

    一个请求完整的调用链可能如下图,经过多个系统服务,调用关系:

       499842e37aec540abdd0c39e25a13190.png-wh_

关注各个调用的各项性能指标,比如吞吐量(TPS),响应时间及错误记录等

吞吐量:根据拓扑可相应计算组件、平台、物理设备的实际吞吐量

响应时间:包括整体调用的响应时间和各个服务的相应时间等

错误记录:根据服务返回统计单位时间异常次数

全链路性能监控从整体维度到局部维度展示各项指标,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,

并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。


环境准备:

系统环境:centos 6.X以上,不要太低

JDK最好是7或8

部署HBASE(分布式用ZOOKEEPER可以使用内置的,单点就不需要)

搭建过程:

Pinpoint由4部分组成

1.Pinpoint Agent, 2. Pinpoint Collector, 3. HBase, 4.Pinpoint Web UI

    1、部署JDK

 具体过程略:

a、配置环境变量vim /etc/profile

 export JAVA_HOME=/usr/local/jdk

 export JRE_HOME=${JAVA_HOME}/jre

 export CLASSPATH=.:${JAVA_HOME}/lib:${jre_home}/lib

 export PATH=${JAVA_HOME}/bin:$PATH

##配置环境变量执行:source /etc/profile

b、检查配置是否成功

 [root@mysql-jiachi local]# java -version

 java version "1.8.0_112"

 Java(TM) SE Runtime Environment (build 1.8.0_112-b15)

 Java HotSpot(TM) Server VM (build 25.112-b15, mixed mode)

2、安装并启动hbase

解压hbase-1.1.11-bin.tar.gz

1、tar -zxvf /root/pp/hbase-1.1.11-bin.tar.gz  -C /usr/local/   ##建议重命名为hbase ===>/usr/local/hbase

2、cd /usr/local/hbase/conf

vim hbase-env.sh

27  export JAVA_HOME=/usr/local/jdk    # 指到自己对应的JAVA_HOME,默认使用java6

vim hbase-site.xml

<configuration>

  <property>

<name>hbase.rootdir</name>

<value>file:///data/hbase</value>        # 这里我们指定Hbase本地来存储数据,生产环境将数据建议存入HDFS中。

  </property>

</configuration>

3、启动服务

/usr/local/hbase/bin/start-hbase.sh

         注意: 这里说明一下,我们是最简方式启动的Hbase,

 没有单独部署Hbase集群管理的zookeeper,而是直接使用Hbase自带的zk模块。另外,Hbase强烈建议将数据存入HDFS里面,目前我们是存在Hbase本地的

4、验证HBASE是否启动成功

jps

8114 Jps

7820 HMaster

5、HBASE初始化表语句

/usr/local/hbase/bin/hbase shell  /usr/local/hbase-create.hbase   ##建表数据自己指定位置

最后输出几个表名字,没有异常说明成功了,自己看日志.....

3、安装 Pinpoint-collector,它的服务是基于tomcat的服务,所以在部署前需要解压tomcat包

1、tar -zxvf apache-tomcat-8.0.36.tar.gz   -C /usr/local/   ##建议重命名为pinpoint-collector ===>/usr/local/pinpoint-collector

2、修改pinpoint-collector的Tomcat的配置,主要修改端口,避免与pp-web的Tomcat的端口冲突(若有多台机器部署TOMCAT,就不需要修改端口)

3、cd /usr/local/pinpoint-collector/conf

sed -i 's/port="8005"/port="18005"/g' server.xml

sed -i 's/port="8080"/port="18080"/g' server.xml

sed -i 's/port="8443"/port="18443"/g' server.xml

sed -i 's/port="8009"/port="18009"/g' server.xml

sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml

sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml

4、rm -rf /usr/local/pinpoint-collector/webapps/* 

5、把包pinpoint-collector-1.5.2.war解压

#mkdir /usr/local/pinpoint-collector/webapps/ROOT

#unzip pinpoint-collector-1.5.2.war -d  /usr/local/pinpoint-collector/webapps/ROOT

6、启动tomcat

#/usr/local/pinpoint-collector/bin/startup.sh

4、安装pinpoint-web,具体过程和Pinpoint-collector完全相同,在解压一个tomcat的包。

1、tar -zxvf apache-tomcat-8.0.36.tar.gz   -C /usr/local/   ##建议重命名为pinpoint-web ===>/usr/local/pinpoint-web

2、修改pinpoint-web的Tomcat的配置,主要修改端口,避免与pinpoint-collector的Tomcat的端口冲突(若有多台机器部署TOMCAT,就不需要修改端口)

3、cd /usr/local/pinpoint-web/conf

sed -i 's/port="8005"/port="28005"/g' server.xml

sed -i 's/port="8080"/port="28080"/g' server.xml

sed -i 's/port="8443"/port="28443"/g' server.xml

sed -i 's/port="8009"/port="28009"/g' server.xml

sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml

sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml

4、rm -rf /usr/local/pinpoint-web/webapps/* 

5、把包pinpoint-web-1.5.2.war解压

#mkdir /usr/local/pinpoint-web/webapps/ROOT

#unzip pinpoint-web-1.5.2.war -d  /usr/local/pinpoint-web/webapps/ROOT

####这里说明一下:

hbase.properties 配置我们pp-web从哪个数据源获取采集数据,这里我们只指定Hbase的zookeeper地址。

jdbc.properties pp-web连接自身Mysql数据库的连接认证配置。

sql目录 pp-web本身有些数据需要存放在MySQL数据库中,这里需要初始化一下表结构。

pinpoint-web.properties 这里pp-web集群的配置文件,如果你需要pp-web集群的话。

applicationContext-* .xml 这些文件在后续的调优工作中会用到。

log4j.xml 日志相关配置

6、启动tomcat

#/usr/local/pinpoint-web/bin/startup.sh

5、部署pinpoint-agent采集监控数据

1、解压包tar -zxvf pinpoint-agent-1.5.2.tar.gz

2、mv pinpoint-agent-1.5.2 /data/pp-agent

3、编辑配置文件vim pinpoint.config  #测试环境都在一台机器上不做修改,走默认

主要修改IP,只需要指定到安装Pinpoint-collector的IP就行了,安装Pinpoint-collector启动后,自动就开启了9994,9995,9996的端口了。

这里就不需要操心了,如果有端口需求,要去Pinpoint-collector的配置文件("Pinpoint-collector/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties")中,修改这些端口

profiler.collector.ip=192.168.245.136(这里需要确定)

5、增加探针,在服务的用户的访问的入口处添加文件,一般在启动目录下添加文件名为" vim  catalina.sh"

   ######部署采集器就很简单了,只需要加3句话就好了。我这边做一个测试的Tomcat,来模拟部署 把catalina.sh 文件存放在tomcat 下的bin目录下

   #pinpoint agent路径

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/pinpoint-agent-1.5.1/pinpoint-bootstrap-1.5.1.jar"

#被监控工程使用agent的标识号

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=0000002"

#被监控工程名字

CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=172.16.10.43_3306_自定义"

#####

第一行是pp-agent的jar包位置

第二行是agent的ID,这个ID是唯一的,我是用pp + 今天的日期命名的,只要与其他的项目的ID不重复就好了

第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了

配置完catalina.sh这个文件启动tomcat文件

6、访问pinpoint-web服务

746c124601cabd69ecdf8363647b9729.png-wh_

其他细节可以更多的研究......

到这里,整个部署过程就完了。值得要注意的地方:

如果Hbase不是与pinpoint-web, Pinpoint-collector装在一台机器上,需要安装zookeeper,只要安装就好,确实2181端口启动就好。

如果zookeeper安装在独立机器上,这里需要修改一下Pinpoint-collector 和 pinpoint-web的配置文件pinpoint-collector.properties,pinpoint-web.properties,不然会导致俩个模块启动失败。

如果有最新版本建议使用新的版本,老版本存在一些问题。



本文转自 DBAspace 51CTO博客,原文链接:http://blog.51cto.com/dbaspace/1977732

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
监控 前端开发 Java
分布式链路监控系统问题之执行原方法时不能调用method.invoke的问题如何解决
分布式链路监控系统问题之执行原方法时不能调用method.invoke的问题如何解决
|
3月前
|
存储 缓存 监控
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
|
3月前
|
存储 监控 Java
分布式链路监控系统问题之使用Byte Buddy进行字节码增强时的问题如何解决
分布式链路监控系统问题之使用Byte Buddy进行字节码增强时的问题如何解决
|
16天前
|
数据采集 存储 监控
公司监控软件:基于 PHP 的分布式监控系统设计
本文介绍了基于 PHP 的分布式监控系统的设计与实现。该系统包括监控节点、数据采集模块、数据传输模块和监控中心,能够高效地收集、传输和分析各节点的数据,确保系统的稳定运行和安全防护。通过示例代码展示了数据采集、传输及存储的具体实现方法,并强调了安全与可靠性的重要性。
36 3
|
3月前
|
监控 Java 应用服务中间件
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
|
3月前
|
消息中间件 数据采集 监控
分布式链路监控系统问题之Skywalking提供了哪些数据传输方式
分布式链路监控系统问题之Skywalking提供了哪些数据传输方式
|
3月前
|
监控 Java 测试技术
分布式链路监控系统问题之Skywalking和Eagleeye在数据收集方面的问题如何解决
分布式链路监控系统问题之Skywalking和Eagleeye在数据收集方面的问题如何解决
|
3月前
|
监控 API 开发者
分布式链路监控系统问题之ASM的开发体验被认为是噩梦般的问题如何解决
分布式链路监控系统问题之ASM的开发体验被认为是噩梦般的问题如何解决
|
3月前
|
监控 Java API
分布式链路监控系统问题之对Java应用实现字节码增强的方式的问题如何解决
分布式链路监控系统问题之对Java应用实现字节码增强的方式的问题如何解决
|
3月前
|
监控 中间件
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决

热门文章

最新文章