开源APM工具pinpoint线上部署

开源APM工具pinpoint线上部署

Pinpoint是一个分析大型分布式系统的平台,提供解决方案来处理海量跟踪数据。2012年七月开始开发,2015年1月9日作为开源项目启动。

安装指南

pinpoint运行需要以实例

  • HBase (用于存储)
  • pinpoint Collector (收集数据)
  • pinpoint Web (使用web 界面)
  • pinpoint Agent (java 探针)

版本信息(以下来源官网)

Java version required to run Pinpoint:

Pinpoint VersionAgentCollectorWeb
1.0.x6-86+6+
1.1.x6-87+7+
1.5.x6-87+7+
1.6.x6-87+7+
1.7.x6-88+8+

HBase compatibility table:

Pinpoint VersionHBase 0.94.xHBase 0.98.xHBase 1.0.xHBase 1.1.xHBase 1.2.x
1.0.xyesnononono
1.1.xnonot testedyesnot testednot tested
1.5.xnonot testedyesnot testednot tested
1.6.xnonot testednot testednot testedyes
1.7.xnonot testednot testednot testedyes

Agent compatibility table:

Agent VersionCollector 1.0.xCollector 1.1.xCollector 1.5.xCollector 1.6.xCollector 1.7.x
1.0.xyesyesyesyesyes
1.1.xnot testedyesyesyesyes
1.5.xnonoyesyesyes
1.6.xnononot testedyesyes
1.7.xnonononoyes

Pinpoint Web Supported Browsers:

  • Chrome

生产环境部署

注意: 该文章是做生产环境部署,并非quick-start guide. 如需要quick-start guide 建议阅读官方文档quick-start guide

应用分布

ip机器名称appName
10.10.10.2vm_1zookeeper
10.10.10.3vm_2zookeeper
10.10.10.4vm_3zookeeper
10.10.10.5vm_4hbase
10.10.10.6vm_5Collector
10.10.10.7vm_6Web

所有机器添加 ‘/etc/hosts’

1
2
3
4
5
10.10.10.2 zk1.iqarr.com
10.10.10.3 zk2.iqarr.com
10.10.10.4 zk3.iqarr.com
10.10.10.5 vm_4
10.10.10.6 agent.iqarr.com

zookeeper部署

  1. 下载最新zookeeper

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    配置 conf/zoo.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/zookeeper/data
    clientPort=2181
    maxClientCnxns=60
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=24
    dataLogDir=/opt/zookeeper/logs
    server.1=10.10.10.2:2888:3888
    server.2=10.10.10.3:2888:3888
    server.3=10.10.10.4:2888:3888
  2. 创建zk的数据目录和日志目录

    1
    2
    mkdir -p /opt/zookeeper/data/
    mkdir -p /opt/zookeeper/logs
  3. 创建myid文件,节点对应id

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 在10.10.10.2 节点配置myid
    cd /opt/zookeeper/data
    echo 1 > myid
    # 在10.10.10.3 节点配置myid
    cd /opt/zookeeper/data
    echo 2 > myid
    # 在10.10.10.4 节点配置myid
    cd /opt/zookeeper/data
    echo 3 > myid
  4. 分别启动每台机器zookeeper

  5. 开放端口

    1
    2
    firewall-cmd --add-port=2181/tcp --permanent
    firewall-cmd --reload

hbase 部署

  1. 下载hbase
  2. 解压安装hbase (HBASE_HOME为 hbase安装目录)
  3. 配置 HBASE_HOME/conf/hbase-env.sh 使用独立zookeeper

    1
    export HBASE_MANAGES_ZK=false
  4. 创建文件 HBASE_HOME/conf/zoo.cfg (注意该文件就是zk 的配置文件)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/opt/zookeeper/data
    clientPort=2181
    maxClientCnxns=60
    autopurge.snapRetainCount=3
    autopurge.purgeInterval=24
    dataLogDir=/opt/zookeeper/logs
    server.1=10.10.10.2:2888:3888
    server.2=10.10.10.3:2888:3888
    server.3=10.10.10.4:2888:3888
  5. 配置 hbase-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <configuration>
    <property>
    <name>hbase.rootdir</name>
    <value>file:///opt/hbase/data</value>
    </property>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com</value>
    </property>
    <property>
    <name>zookeeper.session.timeout</name>
    <value>60000000</value>
    </property>
    <property>
    <name>hbase.regionserver.lease.period</name>
    <value>900000</value> <!-- 900 000, 15 minutes -->
    </property>
    <property>
    <name>hbase.rpc.timeout</name>
    <value>900000</value> <!-- 15 minutes -->
    </property>
    </configuration>

    注:hbase data 目录在/opt/hbase/data

  6. 启动hbase

    1
    2
    #启动hbase
    sh HBASE_HOME/bin/start-hbase.sh
  7. 创建hbase表

    1
    sh HBASE_HOME/bin/hbase shell hbase-create.hbase
  8. 开放端口

    1
    2
    3
    4
    firewall-cmd --add-port=16010/tcp --permanent
    firewall-cmd --add-port=16201/tcp --permanent
    firewall-cmd --add-port=16301/tcp --permanent
    firewall-cmd --reload

    注:hbase-create.hbase脚本,如果是下载release包脚本在pinpoint-x.x.x/hbase/scripts/

配置pinpoint-collector

  1. 下载tomcat和pinpoint-collector-X.X.X.war,解压pinpoint-collector-X.X.X.war到tomcat的webapps目录中
  2. 配置pinpoint-collector配置信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #编辑 tomcat/webapps/collector/WEB-INF/classes/pinpoint-collector.properties
    #修改以下信息
    #配置zk 地址
    cluster.zookeeper.address=zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com
    cluster.enable=true
    cluster.zookeeper.address=zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com #zookeeper 集群地址
    cluster.zookeeper.sessiontimeout=30000
    cluster.listen.ip=0.0.0.0
    cluster.listen.port=9997
  3. 配置hbase.properties配置信息

    1
    2
    3
    #编辑tomcat/webapps/collector/WEB-INF/classes/hbase.properties
    hbase.client.host=zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com #zk集群地址
    hbase.client.port=2181 #zk port
  4. 启动tomcat

  5. 开放端口

    1
    2
    3
    4
    5
    firewall-cmd --add-port=9994/tcp --permanent
    firewall-cmd --add-port=9995/udp --permanent
    firewall-cmd --add-port=9996/udp --permanent
    firewall-cmd --add-port=9997/tcp --permanent
    firewall-cmd --reload

配置pinpoint-web

  1. 下载tomcat和pinpoint-web-x.x.x.war,解压pinpoint-web-X.X.X.war到tomcat的webapps目录中的ROOT目录(目前必须放到ROOT目录)
  2. 配置hbase.properties配置信息

    1
    2
    3
    #编辑tomcat/webapps/ROOT/WEB-INF/classes/hbase.properties
    hbase.client.host=zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com #zk集群地址
    hbase.client.port=2181 #zk port
  3. 配置pinpoint-web.properties配置信息

    1
    2
    3
    4
    5
    6
    7
    8
    #编辑tomcat/webapps/ROOT/WEB-INF/classes/pinpoint-web.properties
    #zk 地址
    cluster.zookeeper.address=zk1.iqarr.com,zk2.iqarr.com,zk3.iqarr.com
    cluster.enable=true
    cluster.web.tcp.port=
    cluster.zookeeper.sessiontimeout=30000
    cluster.zookeeper.retry.interval=60000
    cluster.connect.address=10.10.10.6:9997 # 注意这里是pinpoint-collector ip 地址
  4. 启动tomcat

  5. 开放端口

    1
    2
    firewall-cmd --add-port=8080/tcp --permanent  #注意tomcat port
    firewall-cmd --reload

配置pinpoint-agent

  1. 下载 pinpoint-agent-x.x.x.tar.gz
  2. 解压配置

    1
    2
    # 修改文件pinpoint.config
    profiler.collector.ip=agent.iqarr.com
  3. 配置需要收集应用(这里以tomcat例子)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #创建文件 TOMCAT_HOME/bin/setenv.sh
    #添加如下内容
    AGENT_PATH="$CATALINA_BASE/bin/ex"
    # 这里agent版本号
    PINPOINT_VERSION="1.7.1"
    #默认取主机名称,这里必须唯一
    AGENT_ID=`hostname`
    #应用名称
    APPLICATION_NAME="web-dome"
    export CATALINA_OPTS="$CATALINA_OPTS -javaagent:${AGENT_PATH}/pinpoint-bootstrap-${PINPOINT_VERSION}.jar"
    export CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
    export CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
  4. 复制agent到tomcat目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    #复制 刚才解压配置好的agent到tomcat的 TOMCAT_HOME/bin/ex
    # 目录结构如下
    byzy@debian8:~/tomcat-8_web$ tree -L 3
    .
    ├── bin
    │   ├── bootstrap.jar
    │   ├── catalina.bat
    │   ├── catalina.sh
    │   ├── catalina-tasks.xml
    │   ├── commons-daemon.jar
    │   ├── commons-daemon-native.tar.gz
    │   ├── configtest.bat
    │   ├── configtest.sh
    │   ├── daemon.sh
    │   ├── digest.bat
    │   ├── digest.sh
    │   ├── ex
    │   │   ├── boot
    │   │   ├── lib
    │   │   ├── log
    │   │   ├── pinpoint-bootstrap-1.7.1.jar
    │   │   ├── pinpoint.config
    │   │   ├── plugin
    │   │   ├── script
    │   │   └── tools
    │   ├── setclasspath.bat
    │   ├── setclasspath.sh
    │   ├── setenv.sh
    │   ├── shutdown.bat
    │   ├── shutdown.sh
    │   ├── startup.bat
    │   ├── startup.sh
    │   ├── tomcat-juli.jar
    │   ├── tomcat-native.tar.gz
    │   ├── tomcatService.sh
    │   ├── tool-wrapper.bat
    │   ├── tool-wrapper.sh
    │   ├── version.bat
    │   └── version.sh
    ├── change.log
    ├── conf
    │   ├── Catalina
    │   │   └── localhost
    │   ├── catalina.policy
    │   ├── catalina.properties
    │   ├── context.xml
    │   ├── jaspic-providers.xml
    │   ├── jaspic-providers.xsd
    │   ├── logging.properties
    │   ├── server.xml
    │   ├── tomcat-users.xml
    │   ├── tomcat-users.xsd
    │   └── web.xml
    ├── lib
    │   ├── annotations-api.jar
    │   ├── catalina-ant.jar
    │   ├── catalina-ha.jar
    │   ├── catalina.jar
    │   ├── catalina-storeconfig.jar
    │   ├── catalina-tribes.jar
    │   ├── ecj-4.6.3.jar
    │   ├── el-api.jar
    │   ├── jasper-el.jar
    │   ├── jasper.jar
    │   ├── jaspic-api.jar
    │   ├── jsp-api.jar
    │   ├── org
    │   │   └── apache
    │   ├── servlet-api.jar
    │   ├── spring-instrument-tomcat-4.3.4.RELEASE.jar
    │   ├── tomcat-api.jar
    │   ├── tomcat-coyote.jar
    │   ├── tomcat-dbcp.jar
    │   ├── tomcat-i18n-es.jar
    │   ├── tomcat-i18n-fr.jar
    │   ├── tomcat-i18n-ja.jar
    │   ├── tomcat-jdbc.jar
    │   ├── tomcat-jni.jar
    │   ├── tomcat-util.jar
    │   ├── tomcat-util-scan.jar
    │   ├── tomcat-websocket.jar
    │   └── websocket-api.jar
    ├── logs
    ├── temp
    ├── webapps
    │   ├── ROOT
    │   └── web
    │   ├── META-INF
    │   └── WEB-INF
    └── work
    └── Catalina
    └── localhost
    24 directories, 64 files
  5. 启动应用,当有请求时候在pinpoint-web 可看到请求记录

    注: TOMCAT_HOME为tomcat 安装目录
    注: agent默认收集20%的请求所以可能请求一次无法看到的。当然也可以配置全部收集。

检查pinpoint-web界面

  1. 访问http://10.10.10.7:8080就出如界面。
    pinpoint-web