开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PinPoint分布式全链路监控

简介:
+关注继续查看

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
面试官:Redis分布式锁解决方案是什么?
面试官:Redis分布式锁解决方案是什么?
50 0
LXJ
端口监控脚本
端口监控脚本
29 0
分布式锁实现思路(面试官直呼内行)
目前java中的synchronized或者juc包中的锁都是针对单个jvm的,分布式环境下就无能为力,只能用分布式锁;
57 0
Qt编写安防视频监控系统10-视频轮询
一、前言 视频轮询在视频监控系统中是一个基础的核心功能,尤其是上了大屏以后,这个功能是必须的,根据预先设定的轮询间隔逐个加载视频到预先设定的通道画面数中,轮询间隔、轮询画面数、轮询采用的码流类型(主码流、子码流)都可以在系统设置中进行统一设置,轮询的视频源采用摄像机表中的所有摄像机,当画面数不够的时候,其余留空显示即可,轮询到最后一个视频,重新从第一个开始轮询。
1240 0
Qt编写安防视频监控系统8-双击节点
一、前言 在所有的视频监控系统中,双击摄像机的节点,对应摄像机加载到当前焦点通道显示,这个都是必须具备的功能,还有一些厂家会做双击NVR节点,自动加载该NVR下的所有摄像机全部显示,从通道1开始到通道16或者32,知道排满,或者双击对应的分组,分组下面的所有摄像机自动加载显示视频,这个基础效果在Q...
997 0
.Net架构篇:思考如何设计一款实用的分布式监控系统?
前言 无论从最早期的unix操作系统,还是曾经大行其道的单体式应用,还是现在日益流行的微服务架构,始终都离不开监控的身影。如windows的任务管理器,linux的top命令,都可以看作是监控的面板。
1190 0
SharePoint 2013 定制搜索显示模板(二)
前言   之前一篇博客,简单的介绍了如何定制搜索显示模板,这一次,我们介绍一下如何定制搜索显示时,弹出来的那个页面,相信这个大家也都会遇到的。   1、第一部分就是搜索显示模板的部分,第二部分就是搜索项目详情的部分,如下图:   2、按照之前一篇博客介绍的过程,找到下面红框的html,下载...
928 0
SharePoint 2010 BCS - 简单实例(二)外部列表创建
博客地址 http://blog.csdn.net/foxdave 接上篇 由于图片稍多篇幅过长影响阅读,所以分段来写。 添加完数据源之后,我们需要为我们要放到SharePoint上的数据表定义操作,即在SharePoint都可以进行什么操作。
874 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载