Pinpoint简介

Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,方便工程师能够快速定位问题。

其架构图如下:

架构说明:

  • Pinpoint-Collector:收集各种性能数据
  • Pinpoint-Agent:和自己运行的应用关联起来的探针
  • Pinpoint-Web:将收集到的数据显示成WEB网页形式
  • HBase Storage:收集到的数据存到HBase中

Pinpoint搭建

我们这里直接将数据存储到HDFS中,所以整体规划如下:

IP 主机名 用途
10.2.42.59 collector Pinpoint-collector
10.2.42.60 web Pinpoint-web
10.2.42.61 hbase-master Hadoop/Hbase/zookeeper
10.2.42.62 hbase-slave01 Hadoop/Hbase/zookeeper
10.2.42.63 hbase-slave02 Hadoop/Hbase/zookeeper

软件版本:

软件名 版本 下载地址
pinpoint-collector 1.7.1 https://github.com/naver/pinpoint/releases
pinpoint-web 1.7.1 https://github.com/naver/pinpoint/releases
pinpoint-agent 1.7.1 https://github.com/naver/pinpoint/releases
java 1.8.0_131 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html
zookeeper 3.4.10 https://archive.apache.org/dist/zookeeper/stable/
hbase 1.2.6 http://apache.mirror.cdnetworks.com/hbase/
hadoop 2.8.4 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.4/
tomcat 8.0.47 https://tomcat.apache.org/download-80.cgi

安装JDK

解压JDK到opt目录下,配置环境变量

  1. tar xf jdk-8u131-linux-x64.tar.gz -C /opt

vim /etc/profile

  1. export JAVA_HOME=/opt/jdk1.8.0_131
  2. export PATH=$JAVA_HOME/bin:$PATH

加载环境变量

  1. source /etc/profile

配置免密

配置10.2.42.61,10.2.42.62,10.2.42.63节点之间互信,可以三台同时操作。

  1. ssh-keygen
  2. ssh-copy-id 10.2.42.61
  3. ssh-copy-id 10.2.42.62
  4. ssh-copy-id 10.2.42.63

如果没有ssh-copy-id,则使用下面命令安装即可

  1. yum -y install openssh-clients

配置Hosts映射

五台都需要配置hosts映射。
vim /etc/hosts

  1. 10.2.42.61 DCA-APP-COM-pinpoint-HBaseMaster
  2. 10.2.42.62 DCA-APP-COM-pinpoint-HBaseSlave01
  3. 10.2.42.63 DCA-APP-COM-pinpoint-HBaseSlave02

安装zookeeper集群

解压安装包到opt目录下,三台可以同时操作。

  1. tar xf zookeeper-3.4.10.tar.gz -C /opt/
  2. cd /opt/zookeeper-3.4.10/conf
  3. cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. # do not use /tmp for storage, /tmp here is just
  11. # example sakes.
  12. dataDir=/data/zookeeper/data
  13. # the port at which the clients will connect
  14. clientPort=2181
  15. # the maximum number of client connections.
  16. # increase this if you need to handle more clients
  17. #maxClientCnxns=60
  18. #
  19. # Be sure to read the maintenance section of the
  20. # administrator guide before turning on autopurge.
  21. #
  22. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  23. #
  24. # The number of snapshots to retain in dataDir
  25. #autopurge.snapRetainCount=3
  26. # Purge task interval in hours
  27. # Set to "0" to disable auto purge feature
  28. #autopurge.purgeInterval=1
  29. server.1=10.2.42.61:12888:13888
  30. server.2=10.2.42.62:12888:13888
  31. server.3=10.2.42.63:12888:13888

创建数据目录

  1. mkdir /data/zookeeper/data -p

在10.2.42.61上添加竞选ID

  1. echo 1 > /data/zookeeper/data/myid

在10.2.42.62上添加竞选ID

  1. echo 2 > /data/zookeeper/data/myid

在10.2.42.63上添加竞选ID

  1. echo 3 > /data/zookeeper/data/myid

启动服务

  1. /opt/zookeeper-3.4.10/bin/zkServer.sh start

查看集群状态

  1. [root@DCA-APP-COM-pinpoint-HBaseMaster data]# /opt/zookeeper-3.4.10/bin/zkServer.sh status
  2. ZooKeeper JMX enabled by default
  3. Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
  4. Mode: follower

安装Hadoop集群

namenode 10.2.42.61
datanode01 10.2.42.62
datanode02 10.2.42.63

解压安装文件到opt目录下,注:没做特别说明,下面操作均在三台机器上同时操作。

  1. tar xf hadoop-2.8.3.tar.gz -C /opt/

进入hadoop配置文件目录,进行配置

  1. cd /opt/hadoop-2.8.3/etc/hadoop

配置hadoop-env.sh,指定hadoop的java运行环境
vim hadoop-env.sh

  1. #export JAVA_HOME=${JAVA_HOME} # 默认就是这个,所以实际上这一步可以跳过
  2. export JAVA_HOME=/opt/jdk1.8.0_131

配置core-site.xml,指定访问hadoop web界面访问
vim core-site.xml

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://10.2.42.61:9000</value>
  5. </property>
  6. <property>
  7.   <name>io.file.buffer.size</name>
  8.   <value>131072</value>
  9. </property>
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/data/hadoop/tmp</value>
  13. </property>
  14. </configuration>

配置hdfs-site.xml
vim hdfs-site.xml

  1. <configuration>
  2. <property>
  3.   <name>dfs.namenode.secondary.http-address</name>
  4.   <value>10.2.42.61:50090</value>
  5. </property>
  6. <property>
  7. <name>dfs.replication</name>
  8. <value>2</value>
  9. </property>
  10. <!-- 指定namenode数据存放临时目录,自行创建 -->
  11. <property>
  12. <name>dfs.namenode.name.dir</name>
  13. <value>file:/data/hadoop/dfs/name</value>
  14. </property>
  15. <!-- 指定datanode数据存放临时目录,自行创建 -->
  16. <property>
  17. <name>dfs.datanode.data.dir</name>
  18. <value>file:/data/hadoop/dfs/data</value>
  19. </property>
  20. </configuration>

配置mapred-site.xml,这是mapreduce的任务配置,可以查看以运行完的作业情况。
vim mapred-site.xml

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. <property>
  7. <name>mapreduce.jobhistory.address</name>
  8. <value>0.0.0.0:10020</value>
  9. </property>
  10. <property>
  11. <name>mapreduce.jobhistory.webapp.address</name>
  12. <value>0.0.0.0:19888</value>
  13. </property>
  14. </configuration>

配置yarn-site.xml,datanode不需要修改这个配置文件。
vim yarn-site.xml

  1. <configuration>
  2. <!-- Site specific YARN configuration properties -->
  3. <property>
  4.   <name>yarn.nodemanager.aux-services</name>
  5.   <value>mapreduce_shuffle</value>
  6. </property>
  7. <property>
  8.   <name>yarn.resourcemanager.address</name>
  9.   <value>10.2.42.61:8032</value>
  10. </property>
  11. <property>
  12.   <name>yarn.resourcemanager.scheduler.address</name>
  13.   <value>10.2.42.61:8030</value>
  14. </property>
  15. <property>
  16.   <name>yarn.resourcemanager.resource-tracker.address</name>
  17.   <value>10.2.42.61:8031</value>
  18. </property>
  19. <property>
  20.   <name>yarn.resourcemanager.admin.address</name>
  21.   <value>10.2.42.61:8033</value>
  22. </property>
  23. <property>
  24.   <name>yarn.resourcemanager.webapp.address</name>
  25.   <value>10.2.42.61:8088</value>
  26. </property>
  27. </configuration>

配置datanode,方便namenode调用
vim slaves

  1. 10.2.42.62
  2. 10.2.42.63

创建数据目录

  1. mkdir /data/hadoop/tmp -p
  2. mkdir /data/hadoop/dfs/name -p
  3. mkdir /data/hadoop/dfs/data -p

格式化namenode,由于namenode

上的文件系统是 HDFS 的,所以要格式化。

  1. /opt/hadoop-2.8.3/bin/hdfs namenode -format

如下表示格式化成功。

启动集群

  1. /opt/hadoop-2.8.3/sbin/start-all.sh

输出日志如下:

启动jobhistory 服务,查看 mapreduce 运行状态

  1. /opt/hadoop-2.8.3/sbin/mr-jobhistory-daemon.sh start historyserver

通过URL访问的地址

  1. http://10.2.42.61:50070 #整个hadoop 集群
  2. http://10.2.42.61:50090 #SecondaryNameNode的情况
  3. http://10.2.42.61:8088 #resourcemanager的情况
  4. http://10.2.42.61:19888 #historyserver(MapReduce历史运行情况)

配置HBase集群

注:未做特别声明,一下操作在三个节点同时进行。
**
解压安装包到opt目录下

  1. tar xf hbase-1.2.6-bin.tar.gz -C /opt/

复制hdfs配置文件,这是为了保障hbase和hdfs两边的配置文件一致

  1. cp /opt/hadoop-2.8.3/etc/hadoop/hdfs-site.xml /opt/hbase-1.2.6/conf/

配置HBase配置文件
vim hbase-site.xml

  1. <configuration>
  2. <property>
  3. <name>hbase.zookeeper.property.clientPort</name>
  4. <value>2181</value>
  5. </property>
  6. <property>
  7. <name>hbase.zookeeper.quorum</name>
  8. <value>10.2.42.61,10.2.42.62,10.2.42.63</value>
  9. <description>The directory shared by RegionServers.</description>
  10. </property>
  11. <property>
  12. <name>hbase.zookeeper.property.dataDir</name>
  13. <value>/data/zookeeper/zkdata</value>
  14. <description>
  15. 注意这里的zookeeper数据目录与hadoop ha的共用,也即要与 zoo.cfg 中配置的一致
  16. Property from ZooKeeper config zoo.cfg.
  17. The directory where the snapshot is stored.
  18. </description>
  19. </property>
  20. <property>
  21. <name>hbase.rootdir</name>
  22. <value>hdfs://10.2.42.61:9000/hbase</value>
  23. <description>The directory shared by RegionServers.
  24. 官网多次强调这个目录不要预先创建,hbase会自行创建,否则会做迁移操作,引发错误
  25. 至于端口,有些是8020,有些是9000,看 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 里面的配置,本实验配置的是
  26. dfs.namenode.rpc-address.hdcluster.nn1 , dfs.namenode.rpc-address.hdcluster.nn2
  27. </description>
  28. </property>
  29. <property>
  30. <name>hbase.cluster.distributed</name>
  31. <value>tre</value>
  32. <description>分布式集群配置,这里要设置为true,如果是单节点的,则设置为false
  33. The mode the cluster will be in. Possible values are
  34. false: standalone and pseudo-distributed setups with managed ZooKeeper
  35. true: fully-distributed with unmanaged ZooKeeper Quorum (see hbase-env.sh)
  36. </description>
  37. </property>
  38. </configuration>

配置regionservers文件
vim regionservers

  1. 10.2.42.62
  2. 10.2.42.63

配置hbase-env.sh,由于我们是自己搭建的zookeeper,所以需要加入下面一段代码。

  1. export HBASE_MANAGES_ZK=false

启动集群

  1. /opt/hbase-1.2.6/bin/start-hbase.sh

查看集群状态
1、通过URL查看:http://10.2.42.61:16010/master-status
2、通过命令行查看

  1. /opt/hbase-1.2.6/bin/hbase shell
  2. hbase(main):002:0> status
  3. 1 active master, 0 backup masters, 1 servers, 0 dead, 2.0000 average load

如果报错:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
1、先停止HBase:/opt/hbase-1.2.6/bin/stop-hbase.sh
2、启动regionserver:/opt/hbase-1.2.6/bin/hbase-daemon.sh start regionserver
3、启动master:/opt/hbase-1.2.6/bin/hbase-daemon.sh start master

初始化HBase的PinPoint库,hbase-create.hbase是需要下载的。
地址是:https://github.com/naver/pinpoint/tree/master/hbase/scripts

  1. /opt/hbase-1.2.6/bin/hbase shell /root/install/hbase-create.hbase

配置PinPoint-Collecter

解压war包到tomcat的webapps目录下

  1. unzip pinpoint-collector-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT

配置文件目录/home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
修改配置文件hbase.properties

  1. hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
  2. hbase.client.port=2181
  3. ......

修改配置文件pinpoint-collector.properties

  1. cluster.enable=true
  2. cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
  3. ......
  4. flink.cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
  5. flink.cluster.zookeeper.sessiontimeout=3000

启动tomcat

  1. /home/tomcat/apache-tomcat-8.0.47/bin/startup.sh

配置PinPoint-WEB

解压对应的war包到tomcat的webapps目录

  1. unzip pinpoint-web-1.7.1.war -d /home/tomcat/apache-tomcat-8.0.47/webapps/ROOT

配置文件目录/home/tomcat/apache-tomcat-8.0.47/webapps/ROOT/WEB-INF/classes
vim hbase.properties

  1. hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
  2. hbase.client.port=2181
  3. ......

vim pinpoint-web.properties

  1. cluster.enable=true
  2. cluster.web.tcp.port=9997
  3. cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
  4. cluster.zookeeper.sessiontimeout=30000
  5. cluster.zookeeper.retry.interval=60000
  6. .......

启动tomcat

  1. /home/tomcat/apache-tomcat-8.0.47/bin/startup.sh

访问URL:http://10.2.42.60:8080/#/main

配置探针

复制pinpoint-agent-1.7.1.tar.gz到应用服务器上,解压到tomcat目录

  1. tar xf pinpoint-agent-1.7.1.tar.gz -C /home/tomcat

修改配置文件:
vim /home/tomcat/ppagent/pinpoint.config

  1. # ip为pinpoint-collecter的服务器ip
  2. profiler.collector.ip=10.2.42.59

配置tomcat的Catalina.sh启动脚本,在脚本中加入如下代码

  1. CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
  2. CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
  3. CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"

如果是jar包,直接用Java启动,需要跟下面参数

  1. java -javaagent:/home/tomcat/tmp/ppagent/pinpoint-bootstrap-1.7.1.jar -Dpinpoint.agentId=jss-spring-boot-app11201 -Dpinpoint.applicationName=jss-spring-boot-app -jar jssSpringBootDemo-0.0.1-SNAPSHOT.jar

配置完后重启tomcat,然后在WEB端查看如下:

PinPoint APM搭建全过程的更多相关文章

  1. linux环境(CentOS-6.7)下redis集群的搭建全过程

    linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...

  2. Gerrit代码审核服务器搭建全过程

    Gerrit代码审核服务器搭建全过程 转载请标明出处:http://blog.csdn.net/ganshuyu/article/details/8978614 环境:Ubuntu12.xx 1.建立 ...

  3. Ubuntu16+pinpoint环境搭建

    最近研究了pinpoint,稍后放上环境搭建教程,建议想学习搭建的同学记得参考pinpointGitHub

  4. Git服务器搭建全过程分步详解【转】

    转自:http://developer.51cto.com/art/201507/483448.htm GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用, ...

  5. 完整版的OpenLDAP搭建全过程

    总结:          先写总结,再写正文,嘿嘿嘿.这还是第一次认真的写个文档,写个总结,哈哈.大概在一个月前,第一次听说这个东西,完全没有概念,刚开始的时候看理论的知识,看了几次之后就没看了,看不 ...

  6. Git服务器搭建全过程

    GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...

  7. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  8. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  9. Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程

    一.修改hosts文件 在主节点,就是第一台主机的命令行下; vim /etc/hosts 我的是三台云主机: 在原文件的基础上加上; ip1 master worker0 namenode ip2 ...

随机推荐

  1. Java Array数组使用详解

    本文主要讲解java中array数组使用,包含堆.栈内存分配及区别 1.动态初始化 package myArray; /* * 堆:存储的是new出来的东西,实体,对象 * A 每个对象都有地址值 * ...

  2. nghttp2 交叉编译

    touch run.sh chmod 755 run.sh mkdir build cd build ../run.sh run.sh #!/bin/bash #cd build ../configu ...

  3. 数据结构和算法(Golang实现)(26)查找算法-哈希表

    哈希表:散列查找 一.线性查找 我们要通过一个键key来查找相应的值value.有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链 ...

  4. C#多线程(6):线程通知

    目录 AutoRestEvent 类 常用方法 一个简单的示例 解释一下 复杂一点的示例 解释 回顾一下,前面 lock.Monitor 部分我们学习了线程锁,Mutex 部分学习了进程同步,Sema ...

  5. 数字电路技术之触发器(基本RS触发器)

    一.触发器的知识 1.触发器是构成时序逻辑电路的基本逻辑部件. 2.[1]它有两个稳定的状态:0状态和1状态:      [2]在不同的输入情况下,它可以被置成0状态或1状态:      [3]当输入 ...

  6. HashMap主要方法源码分析(JDK1.8)

    本篇从HashMap的put.get.remove方法入手,分析源码流程 (不涉及红黑树的具体算法) jkd1.8中HashMap的结构为数组.链表.红黑树的形式     (未转化红黑树时)   (转 ...

  7. stand up meeting 1/20/2016

    part 组员                工作              工作耗时/h 明日计划 工作耗时/h    UI 冯晓云  修复bug    6 修复bug    6 foxit PDF ...

  8. Epicor RoHS Overview

    Epicor ERP具有一个旨在帮助符合指令2002/95/EC (RoHS1) and 2011/65/EU (RoHS2)的模块,特别适用于医疗设备公司. 不合格的依据是–最大浓度值和合格声明/ ...

  9. 3. git获取历史版本

    1.使用gitbash进入git命令行,查看commit记录.操作如下: git log 1 2.找到你想提取的目标版本,复制对应的SHA值. 3.新建一个分支,操作如下: git branch 新分 ...

  10. redis: List列表类型(四)

    list设置值(头部):lpush list one list设置值(尾部):**rpush ** list one list获取值:lrange list 0 -1 list获取指定范围的值:lra ...