0.0 前言
国内的APM行业这两年刚刚起步,但是在国外却比较成熟了,并且由于这两年人力成本的快速提高,国内外涌现了几家非常不错的APM企业,例如APPdynamic,Dynamic,NewRelic等。
我们这里不考虑商业化的实现方案,如何能够提供一种免费的开源实现方案呢?
下面给大家介绍一个开源的 APM (Application Performance Management/应用性能管理)工具 - Pinpoint。一个分布式事务跟踪系统的平台,思路基于google Dapper,用于基于java的大规模分布式系统,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。Pinpoint的目标就是为n(n>=1)层架构开发新的跟踪平台,为n层架构的系统提供解决方案。
0.1 Pinpoint的特点如下:
- 分布式事务跟踪,跟踪跨分布式应用的消息
- 自动检测应用拓扑,帮助你搞清楚应用的架构
- 水平扩展以便支持大规模服务器集群
- 提供代码级别的可见性以便轻松定位失败点和瓶颈
- 使用字节码增强技术,添加新功能而无需修改代码
- 安装探针不需要修改哪怕一行代码及trace server端部署简单,支持hdfs存储
- 具有简单的阀值触发报警功能
- 移植性比较强的,会比较讨人喜欢(相比cat)
- 插件化功能可扩展(https://github.com/naver/pinpoint/wiki/Pinpoint-Plugin-Developer-Guide)
0.2 Pinpoint 架构
1.0 环境准备
为了省事可以直接就到这里(https://get.k8scn.org/packages/others/pinpoint/)下载所需安装包,统一放置在 /root/pp/
目录下面。
apache-tomcat-8.0.36.tar.gz
hbase-1.0.3-bin.tar.gz
jdk-8u92-linux-x64.rpm
pinpoint-agent-1.5.2.tar.gz
pinpoint-collector-1.5.2.war
pinpoint-web-1.5.2.war
pp-collector
pp-web
zookeeper-3.4.6-10.el6.x86_64.rpm
1.1 部署环境约定
192.168.56.11 CentOS6(jdk1.8.0) Pinpoint-collector, Pinpoint-web, zookeeper # 下面我们将简称pp-collector&pp-web
192.168.56.12 CentOS6(jdk1.8.0) Hbase
192.168.56.13 CentOS6(jdk1.8.0) Pinpoint-agent(demo应用)
1.2 系统环境说明
$ /etc/init.d/iptables stop
$ setenforce 0
这里我们为了不影响模块之间的相互通信,暂时先把几台设备的iptables都关闭了。
2.0 开始部署 我们采用rpm方式安装jdk,这里就略过安装过程了,主要说一下Tomcat 和Bbase的安装和配置
2.1 部署和初始化 Hbase
$ vim ~/.bashrc
# Java Environment Variables
export JAVA_HOME=/usr/java/default
export PATH=$PATH:$JAVA_HOME/bin
$ source ~/.bashrc
$ tar xf /root/pp/hbase-1.0.3-bin.tar.gz /usr/local/
$ cd /usr/local/hbase-1.0.3/conf
$ vim hbase-env.sh
export JAVA_HOME=/usr/java/default/ # 指到自己对应的JAVA_HOME,默认使用java6
$ vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///data/hbase</value> # 这里我们指定Hbase本地来存储数据,生产环境将数据建议存入HDFS中。
</property>
</configuration>
$ ../bin/start-hbase.sh // 启动 Hbase
注意: 这里说明一下,我们是最简方式启动的Hbase,没有单独部署Hbase集群管理的zookeeper,而是直接使用Hbase自带的zk模块。另外,Hbase墙裂建议将数据存入HDFS里面,目前我们是存在Hbase本地的。
2.1.1 验证Hbase是否启动成功
$ jps
8114 Jps
7820 HMaster
2.1.2下载并执行pp的Hbase初始化表语句
$ wget -c https://raw.githubusercontent.com/naver/pinpoint/master/hbase/scripts/hbase-create.hbase -P /root/pp/
$ cd /usr/local/hbase-1.0.3
$ ./bin/hbase shell /root/pp/hbase-create.hbase # 这里需要大概半分钟时间完成pp的表初始化
$ ./bin/hbase shell
2016-07-14 20:57:10,606 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.0.3, rf1e1312f9790a7c40f6a4b5a1bab2ea1dd559890, Tue Jan 19 19:26:53 PST 2016
hbase(main):001:0> status 'detailed' # 我这里已经初始化pp相关表,所以数据展示比较多
version 1.0.3
0 regionsInTransition
master coprocessors: []
1 live servers
c612:46781 1468494831781
requestsPerSecond=0.0, numberOfOnlineRegions=194, usedHeapMB=18, maxHeapMB=241, numberOfStores=322, numberOfStorefiles=3, storefileUncompressedSizeMB=0, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0, readRequestsCount=9272, writeRequestsCount=385, rootIndexSizeKB=2, totalStaticIndexSizeKB=1, totalStaticBloomSizeKB=0, totalCompactingKVs=0, currentCompactedKVs=0, compactionProgressPct=NaN, coprocessors=[MultiRowMutationEndpoint]
"AgentEvent,,1468495003477.b13eb3203210fb9d94feb1a445e0ad1b."
numberOfStores=1, numberOfStorefiles=0, storefileUncompressedSizeMB=0, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0,