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
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,不然会导致俩个模块启动失败。
如果有最新版本建议使用新的版本,老版本存在一些问题。