应用性能管理工具PinPoint介绍

概述

下面给大家介绍一个开源的 APM (Application Performance Management/应用性能管理)工具 - Pinpoint。一个分布式事务跟踪系统的平台,思路基于google Dapper,用于基于java的大规模分布式系统,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。Pinpoint的目标就是为n(n>=1)层架构开发新的跟踪平台,为n层架构的系统提供解决方案。pinpoint 有3个主要组件组成:日志收集器[Collector]、控制台[Web]、代理[Agent],采用HBase进行存储。 Collector和Web都是WAR包,Agent采用一个JAVA应用程序加载。

Pinpoint的特点如下:

  • 分布式事务跟踪,跟踪跨分布式应用的消息
  • 自动检测应用拓扑,帮助你搞清楚应用的架构
  • 水平扩展以便支持大规模服务器集群
  • 提供代码级别的可见性以便轻松定位失败点和瓶颈
  • 使用字节码增强技术,添加新功能而无需修改代码
  • 安装探针不需要修改哪怕一行代码及trace server端部署简单,支持hdfs存储
  • 具有简单的阀值触发报警功能
  • 移植性比较强的,会比较讨人喜欢(相比cat)
  • 插件化功能可扩展(https://github.com/naver/pinpoint/wiki/Pinpoint-Plugin-Developer-Guide)

    平台的架构图如下:


环境准备

apache-tomcat-8.0.36.tar.gz
hbase-1.0.3-bin.tar.gz
jdk-7u79-linux-x64.tar.gz
pinpoint-agent-1.5.2.tar.gz
pinpoint-collector-1.5.2.war
pinpoint-web-1.5.2.war
zookeeper-3.4.6-10.el6.x86_64.rpm

以上软件地址10.21.10.77  路径/home/cib/software(绝对路径) 用户名/密码 cib/cib123456

部署环境约定

192.168.56.11    CentOS6(jdk1.7.0)    Pinpoint-collector, Pinpoint-web, zookeeper    #下面我们将简称pp-collector&pp-web
192.168.56.12    CentOS6(jdk1.7.0)    Hbase
192.168.56.13    CentOS6(jdk1.7.0)    Pinpoint-agent(demo应用)
以上服务器地址也可以部署在同一台服务器上 我的都是安装在10.21.10.77上的

系统环境说明

查看服务器上面1.0安装的软件是否已经安装了和相关的服务是否是开启的 如果有开启的服务 先暂停服务

开始部署

jdk安装

我这里的jdk安装的方式是用tar.zp的方式 安装请用root用户 切换到root用户sudo su - 
解压jdk,解压命令:tar -xvzf /home/java/jdk-7u25-linux-x64.tar.gz
设置环境变量 
vi ~/.bashrc
export JAVA_HOME=/home/java/jdk/jdk1.7.0_69
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
刷新环境变量设计
source ~/.bashrc
查看jdk版本java -version 如果有版本号信息 表示安装成功

安装 HBase

部署和初始化 Hbase

pinpoint存储依赖于hbase,hbase的分布式文件存储系统依赖于hadoop,因此如果hbase需要要使用hdfs存储数据,就需要安装hadoop,但是hbase如果使用普通的文件系统存储数据,就不需要安装hadoop。

下图为pinpoint版本和Hbase的关系:

Pinpoint Version   HBase 0.94.x	HBase 0.98.x   HBase 1.0.x   HBase 1.1.x
    1.0.x	      yes	      no	    no          no
    1.1.x	      no	 not tested	   yes	     not tested
    1.5.x	      no	 not tested	   yes	     not tested

hbase 安装

解压hbase-1.0.3-bin.tar.gz
$ tar xf /root/pp/hbase-1.0.3-bin.tar.gz /usr/local/
$ cd /usr/local/hbase-1.0.3/conf
修改/usr/local/hbase-1.0.3/conf/hbase-env.sh
$ vim hbase-env.sh
export JAVA_HOME=/home/java/jdk/jdk1.7.0_69     # 指到自己对应的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本地的。

验证Hbase是否启动成功

$ jps
8114 Jps
7820 HMaster

下载并执行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, readRequestsCount=0, writeRequestsCount=0, rootIndexSizeKB=0, totalStaticIndexSizeKB=0, totalStaticBloomSizeKB=0, totalCompactingKVs=0, currentCompactedKVs=0, compactionProgressPct=NaN, completeSequenceId=-1, dataLocality=0.0
    "AgentInfo,,1468494998919.fa9d36f7b52b95ee5216a1ec757ad690."
...

HBase脚本介绍

  • hbase-create.hbase - 创建pinpoint必须的表。
  • hbase-drop.hbase - 删除pinpoint必须的所有表
  • hbase-flush-table.hbase - 刷新所有表
  • hbase-major-compact-htable.hbase- 压缩主要的所有表

    我们同时可以登录Hbase Web管理控制台来验证相关数据 http://192.168.56.12:16010/master-status 这个地址是指你自己安装的地址

    安装 Pinpoint-collector

    安装pp-collector的jdk条件:

    系统已安装JDK 6、JDK 7+ 、Maven 3.2.x+ ;并设置环境变量:JAVA_6_HOME和JAVA_7_HOME.下图为JDK版本与Pinpoint版本关系:

    Pinpoint Agent Collector  Web
    1.0.x   6+   6+         6+
    1.1.x   6+   7+         7+
    1.5.x   6+   7+         7+

    pp-collector的安装与配置

    #创建/data/service/目录
    $ mkdir -p /data/service/
    #解压你的tomcat致 /data/service 这个路径你可以解压到自己创建的目录
    $ tar xf /root/pp/apache-tomcat-8.0.35.tar.gz -C /data/service/
    $ cd /data/service/
    #将apache-tomcat-8.0.35移动到pinpoint-collector文件中
    $ mv apache-tomcat-8.0.35/ pinpoint-collector
    #更改pinpoint-collector tomcat的server.xml
    $ vim /data/service/pinpoint-collector/conf/server.xml       # 因为我们的pp-collector和pp-web部署在同台设备,所以请确认tomcat启动端口不会冲突
    #如果在同一个服务器启用多个tomcat 请更改下面server的port端口 当然你也可以用别的方式
    <Server port="8005" shutdown="SHUTDOWN">     
    #设置pinpoint-collector tomcat的端口
    <Connector port="8085" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->     #  注释该行
    #pinpoint-collector-1.5.2.war部署到webapps 并命名为ROOT
    $ rm -rf /data/service/pinpoint-collector/webapps/*
    $ unzip pinpoint-collector-1.5.2.war -d /data/service/pinpoint-collector/webapps/ROOT/
    $ cd  /data/service/pinpoint-collector/webapps/ROOT/WEB-INF/classes
    $ ls -al
    -rw-rw-r-- 1 root root 15835 Apr  7 14:43 applicationContext-collector.xml
    -rw-rw-r-- 1 root root  7485 Apr  7 14:43 applicationContext-hbase.xml
    -rw-rw-r-- 1 root root   757 Apr  7 14:43 hbase.properties     
    -rw-rw-r-- 1 root root  1845 Apr  7 14:43 log4j.xml
    -rw-rw-r-- 1 root root  1360 Apr  7 14:43 pinpoint-collector.properties     # 主要针对pp-agent的配置,同时支持tcp和udp协议数据传输
    -rw-rw-r-- 1 root root  3292 Apr  7 14:43 servlet-context.xml
    ...

    这里大概说一下: applicationContext-collector.xml, applicationContext-hbase.xml 这俩个配置文件时collector与agent和Hbase之间通信时需要设定的一些参数,在后续调优的时候需要用到,hbase.properties 主要是设定后端存储的连接配置,log4j.xml那就是log相关了。

    $ vim hbase.properties
    hbase.client.host=192.168.56.12        # 这里我们只修改这一项配置就好,能够让collector将汇报上来的数据存储到Hbase 如果你是在同一台机器上安装的hbase就没必要改了 因为默认就是localhost
    hbase.client.port=2181

    这里tomcat我们就用8085端口了,实际的生产环境可能需要根据实际情况修改tomcat侦听端口。OK,到此,pp-collector我们就基本上配置完成了。接下来我们开始配置pp-web,它与collector很类似。

    安装 Pinpoint-web

    2.2.3 pp-web的配置

    $ cd /data/service/
    $ tar xf /root/pp/apache-tomcat-8.0.35.tar.gz -C /data/service/
    $ mv apache-tomcat-8.0.35 pinpoint-web
    #更改pinpoint-collector tomcat的server.xml
    $ vim /data/service/pinpoint-web/conf/server.xml       # 因为我们的pp-collector和pp-web部署在同台设备,所以请确认tomcat启动端口不会冲突
    #如果在同一个服务器启用多个tomcat 请更改下面server的port端口 当然你也可以用别的方式
    <Server port="8006" shutdown="SHUTDOWN">     
    #设置pinpoint-collector tomcat的端口
    <Connector port="8086" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->     #  注释该行
    #pinpoint-collector-1.5.2.war部署到webapps 并命名为ROOT
    $ rm -rf /data/service/pinpoint-web/webapps/*
    $ unzip pinpoint-web-1.5.2.war -d /data/service/pinpoint-web/webapps/ROOT/
    $ cd  /data/service/pinpoint-web/webapps/ROOT/WEB-INF/classes   
    $ ls -al
    total 88
    -rw-rw-r-- 1 root root 2164 Apr  7 14:43 applicationContext-cache.xml
    -rw-rw-r-- 1 root root 3649 Apr  7 14:43 applicationContext-dao-config.xml
    -rw-rw-r-- 1 root root 1490 Apr  7 14:43 applicationContext-datasource.xml
    -rw-rw-r-- 1 root root 6680 Apr  7 14:43 applicationContext-hbase.xml
    -rw-rw-r-- 1 root root 1610 Apr  7 14:43 applicationContext-websocket.xml
    -rw-rw-r-- 1 root root 6576 Apr  7 14:43 applicationContext-web.xml
    -rw-rw-r-- 1 root root  106 Apr  7 14:43 batch.properties
    -rw-rw-r-- 1 root root  682 Apr  7 14:43 ehcache.xml
    -rw-rw-r-- 1 root root 1005 Jul 14 21:45 hbase.properties
    -rw-rw-r-- 1 root root  153 Apr  7 14:43 jdbc.properties
    -rw-rw-r-- 1 root root 3338 Apr  7 14:43 log4j.xml
    -rw-rw-r-- 1 root root 1420 Apr  7 14:43 mybatis-config.xml
    -rw-rw-r-- 1 root root  630 Apr  7 14:43 pinpoint-web.properties
    -rw-rw-r-- 1 root root  141 Apr  7 14:43 project.properties
    -rw-rw-r-- 1 root root 3872 Apr  7 14:43 servlet-context.xml
    drwxrwxr-x 2 root root 4096 Jul 14 21:46 sql 
    
    $ vim hbase.properties
    hbase.client.host=192.168.56.12    # 设置Hbase数据源
    hbase.client.port=2181
    ...
     

    配置解说

    //pinpoint-web.properties --web参数配置如下:
    cluster.enable=true
    cluster.web.tcp.port=9997
    cluster.zookeeper.address=localhost
    cluster.zookeeper.sessiontimeout=30000
    cluster.zookeeper.retry.interval=60000
    cluster.connect.address=
    
    
    //hbase.properties        -- 配置连接hbase参数如下:
    hbase.client.host (default: localhost)
    hbase.client.port (default: 2181)
    
    //hbase数据库和mysql数据库选择一项配置,如果配置了hbase数据库,此项不用配置,仅当选用mysql数据库时配置
    //jdbc.properties         -- 配置连接mysql数据库如下:
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:13306/pinpoint?characterEncoding=UTF-8
    jdbc.username=admin
    jdbc.password=admin
    
    //hbase数据库和mysql数据库选择一项配置,如果配置了hbase数据库,此项不用配置,仅当选用mysql数据库时配置
    //创建pinpoint数据库并创建表 mysql命令行下执行命令如下:
    create DATABASE if not exists pinpoint DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    use pinpoint
    \. sql/CreateTableStatement-mysql.sql
    \. sql/SpringBatchJobReositorySchema-mysql.sql
    commit;

    注:zookeeper和pp-collector、pp-web不在同一台服务器上时的配置

    从pinpoint1.5.0开始,pp-web到pp-agent的request请求直接通过pp-collector来统筹管理,包括一些real-time级别的信息监测,而zookeeper在其中间协调三者之间的通信沟通。如果zookeeper部署在独立的一台设备,这里我就需要修改一下pp-colletor & pp-web的配置文件pinpoint-collector.properties,pinpoint-web.properties,不然会导致俩个模块启动失败。详细描述参见官方文档

    $ rpm -ivh /root/pp/zookeeper-3.4.6-10.el6.x86_64.rpm
    $ /etc/init.d/zookeeper start     # 保证zookeeper的2181端口起来就可以了
    
    修改pinpoint-collector.properties
    vi /data/service/pinpoint-collector/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties
    
    
    # enable cluster in socket manager.
    cluster.enable=true
    cluster.zookeeper.address=localhost            #如果zk单独配置, 需要修改此项
    cluster.zookeeper.sessiontimeout=30000
    cluster.listen.ip=
    cluster.listen.port=
    
     修改pinpoint-web.properties
    vi /data/service/pinpoint-web/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties  
    
    # -------------------------------------------------------------------------------------------------
    # The cluster related options are used to establish connections between the agent, collector, and web in order to send/receive data between them in real time.
    # You may enable additional features using this option (Ex : RealTime Active Thread Chart).
    # -------------------------------------------------------------------------------------------------
    # Usage : Set the following options for collector/web components that reside in the same cluster in order to enable this feature.
    # 1. cluster.enable (pinpoint-web.properties, pinpoint-collector.properties) - "true" to enable
    # 2. cluster.zookeeper.address (pinpoint-web.properties, pinpoint-collector.properties) - address of the ZooKeeper instance that will be used to manage the cluster
    # 3. cluster.web.tcp.port (pinpoint-web.properties) - any available port number (used to establish connection between web and collector)
    # -------------------------------------------------------------------------------------------------
    # Please be aware of the following:
    #1. If the network between web, collector, and the agents are not stable, it is advisable not to use this feature.
    #2. We recommend using the cluster.web.tcp.port option. However, in cases where the collector is unable to establish connection to the web, you may reverse this and make the web establish connection to the collector.
    #   In this case, you must set cluster.connect.address (pinpoint-web.properties); and cluster.listen.ip, cluster.listen.port (pinpoint-collector.properties) accordingly.
    cluster.enable=true
    cluster.web.tcp.port=9997
    cluster.zookeeper.address=localhost
    cluster.zookeeper.sessiontimeout=30000
    cluster.zookeeper.retry.interval=60000
    cluster.connect.address=
    
    注意:以上配置文件需要修改 是因为zookeeper单独部署

    到这里,我们就可以启动pp-colletor和pp-web了

    启动的方式有很多 我是用比较笨的方式进去pinpoint-colletor 和pinpoint-web 的bin目录下执行start.sh启动的

    安装 Pinpoint-agent

    我们这个时候可以部署一个pp-agent试玩一下了,其实也就是很多APM厂商传说中的探针。这里我的探针是部署在自己的应用下面的,就只贴一下跑在tomcat下的探针配置信息了。顺带说明一下部署上的注意点。

    以下是pp目前支持埋点的java模块:

    JDK 6+
    Tomcat 6/7/8, Jetty 8/9
    Spring, Spring Boot
    Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
    Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER
    MySQL, Oracle, MSSQL, CUBRID, DBCP, POSTGRESQL, MARIA
    Arcus, Memcached, Redis, CASSANDRA
    iBATIS, MyBatis
    gson, Jackson, Json Lib
    log4j, Logback

    部署pp-agent (探针)

    我们约定tomcat容器安装位置 /data/projects/service/app_demo,这里我们就将pp-agent解压至 /data/projects/service/下。

    $ tar xf /root/pp/pinpoint-agent-1.5.2.tar.gz -C /data/projects/service/
    $ cd /data/projects/service/pinpoint-agent-1.5.2/
    $ vim pinpoint.config
    profiler.collector.ip=192.168.56.11  #这里说明一下: 我们只要指定pp-colletor的地址就可以了,至于端口如果之前pp-colletor没有变更这里也不需要修改。如果你的生产环境特殊,pinpoint支持还是很丰富的,同时支持tcp和udp协议传输。 默认是localhost 

    此刻,我们开始往我们的应用里部署探针。

    $ vim /data/projects/service/app_demo/bin/catalina.sh
    AGENT_VERSION="1.5.1"
    AGENT_ID="pp201606011442"
    APPLICATION_NAME="app-192-168-56-13"
    AGENT_PATH="/data/projects/service/pinpoint-agent-1.5.1"
    CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-${AGENT_VERSION}.jar"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"

    这里说明一下:

  • 探针配置项写到 CATALINA_OPTS 变量下一行即可。
  • AGENT_ID 命名必须在生产环境里唯一,否则后面将会混乱。
  • APPLICATION_NAME 配置为一个服务组的ID号,即服务组下的实例ID。
  • 此外参考官方agent文档说明

    重启被采集端的应用,使探针生效。

    Pinpoint安装完成

    打开浏览器,访问如下pp-web的页面验证我们的探针部署是否成功。其中,第二个链接是pp的APM主页面可以看到探针汇报上来的信息了。

    http://192.168.56.11:8086/stat.html      # pp-agent 信息统计页面,即探针部署情况的统计信息 
    http://192.168.56.11:8086/#/main       # pp APM信息主页面

    Pinpoint源码下载

  • 下载pinpoint源码

    制作自己的Pinpoint定制版war包 编译环境要求

    maven:3.2+
    jdk-6/7/8

    解压master.zip,然后执行命令: maven命令

    mvn install -Dmaven.test.skip=true

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我无法亲自进行Pinpoint集群部署实践。但是,我可以提供一些指导和建议来帮助您完成这个过程。 Pinpoint是一款分布式应用程序性能管理工具,它可以帮助用户快速诊断和解决应用程序性能问题。Pinpoint的集群部署需要以下步骤: 1. 安装和配置Zookeeper和Hadoop集群 Pinpoint需要Zookeeper和Hadoop作为基础设施来管理和存储数据。在进行Pinpoint集群部署之前,您需要先安装和配置Zookeeper和Hadoop集群。 2. 下载和解压Pinpoint 您可以从Pinpoint官方网站下载最新版本的Pinpoint。下载完成后,解压缩文件并准备部署。 3. 配置Pinpoint 在进行Pinpoint集群部署之前,您需要配置Pinpoint。主要配置包括以下内容: - 修改Pinpoint的配置文件,包括修改Zookeeper的地址和端口号、修改Hadoop的地址和端口号等。 - 配置Pinpoint的数据存储方式,可以选择使用HBase或MySQL等数据库。 4. 部署Pinpoint 完成配置后,您可以开始部署Pinpoint。主要包括以下步骤: - 将解压缩后的文件复制到每个节点上。 - 启动Pinpoint的Agent和Collector。 - 配置Pinpoint的Web界面,可以使用Tomcat或Jetty等Web服务器。 5. 测试和优化 完成部署后,您可以进行测试和优化。主要包括以下内容: - 测试Pinpoint是否正常工作,包括监控应用程序的性能和运行情况。 - 优化Pinpoint性能和稳定性,包括调整Pinpoint的配置文件、增加节点等。 总之,Pinpoint集群部署需要一些技术和经验,如果您不熟悉相关技术,建议寻求专业人士的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值