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在术语上的不同

全链路性能监控

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

关注各个调用的各项性能指标,比如吞吐量(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服务

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

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

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

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

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

转载于:https://blog.51cto.com/dbaspace/1977732

PinPoint分布式全链路监控相关推荐

  1. [Stardust]星尘分布式全链路监控

    随着业务的发展,微服务系统会变得越来越大,各个服务之间的调用关系也会日趋复杂.一个WebApi请求,后方可能经历多个微服务以及数据库和MQ操作,在这个调用过程中,可能因为某一个服务节点出现延迟或者失败 ...

  2. 星尘分布式全链路监控 Newlife.Stardust 搭建实例

    星尘分布式全链路监控看起来功能挺强大的,但是网上都是官方的介绍,直接调用的demo相对比较少,期间踩坑比较多,希望对后面的人有所帮助 1.https://github.com/NewLifeX/Sta ...

  3. 实现一个全链路监控平台很难吗?Pinpoint、skywalking、zipkin,哪个实现比较好?...

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往 ...

  4. 实现全链路监控平台很难吗?Pinpoint、SkyWalking、Zipkin 选型对比

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了 ...

  5. 微服务项目中引入全链路监控平台:Pinpoint、SkyWalking、Zipkin怎么选?

    来源:www.jianshu.com/p/92a12de11f18 0 问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上, ...

  6. 全链路监控之pinpoint

    一.pinpoint出现与其他相似概念比较 (1).pinpoint概念 pinpoint是由java/PHP编写而成的,用来对大规模的分布式系统提供应用性能管理.pinpoint可以解决复杂架构下的 ...

  7. cat全链路监控_CAT分布式监控系统(一):CAT功能介绍 CAT监控系统是什么、能做什么?...

    CAT分布式监控系统(一):CAT监控系统功能介绍 本文概要: 1.CAT监控系统是什么. 2.CAT监控系统能做什么,能监控些什么. 下面有些截图是CAT 2.0版本的,但和3.0版本没什么区别的. ...

  8. 全链路监控细节和难点剖析!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料!原文 | https://www.jianshu.com/p ...

  9. 主流微服务全链路监控系统之战

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料!问题背景随着微服务架构的流行,服务按照不同的维度进行拆分,一次 ...

最新文章

  1. python怎么重启内核_解决jupyter运行pyqt代码内核重启的问题
  2. 一文盘点2019年AI领域都发生了什么
  3. paramiko安装
  4. laravel5.6 数组传递到前端
  5. 基础知识 一个工具给win7 win10的同学 或者MAC 可以跳过
  6. [已经完美解决]IE下 'document.getElementById(...)' is null
  7. 自定义SpringBoot项目的Maven原型
  8. SpringSecurity的csrf防护措施
  9. Wordpress如何打开调试模式
  10. Tree HDU - 6547 (树链剖分,线段树)
  11. Github | Facebook人工智能实验室出品Pythia模块框架
  12. php 实现二叉树的最大深度_LeetCode题记——104二叉树的最大深度
  13. css关闭窗口按钮的代码,JS+CSS实现带关闭按钮DIV弹出窗口的方法
  14. PXE无人值守安装linux后无法启动图形
  15. [量化学院]机器学习有哪些常用算法
  16. yandex安装插件教程,研究了一下午终于可以用了
  17. SQLAlchemy session 使用问题
  18. 全国绿色计算大赛 模拟赛第三阶段
  19. html表头纵向,实现纵向表头的table
  20. [javascript]替换所有带/的字符串

热门文章

  1. drupal建设多语言站点之四:不同语言的站点名称
  2. Redis常见面试题总结
  3. js 之 object
  4. ClickHouse之Distributed Query Execution
  5. Ubuntu安装软件失败
  6. Skynet入门范例之sproto
  7. 第三百二十七天 how can I 坚持
  8. PostGIS之路——线性参考
  9. 使用pipeline的函数
  10. 【自学笔记】定义一个标准的WPF窗口