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目录下,配置环境变量

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

vim /etc/profile

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

加载环境变量

source /etc/profile

配置免密

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

ssh-keygen
ssh-copy-id 10.2.42.61
ssh-copy-id 10.2.42.62
ssh-copy-id 10.2.42.63

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

yum -y install openssh-clients

配置Hosts映射

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

10.2.42.61	DCA-APP-COM-pinpoint-HBaseMaster
10.2.42.62 DCA-APP-COM-pinpoint-HBaseSlave01
10.2.42.63 DCA-APP-COM-pinpoint-HBaseSlave02

安装zookeeper集群

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

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

vim zoo.cfg

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

创建数据目录

mkdir /data/zookeeper/data -p

在10.2.42.61上添加竞选ID

echo 1 > /data/zookeeper/data/myid

在10.2.42.62上添加竞选ID

echo 2 > /data/zookeeper/data/myid

在10.2.42.63上添加竞选ID

echo 3 > /data/zookeeper/data/myid

启动服务

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

查看集群状态

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

安装Hadoop集群

namenode 10.2.42.61
datanode01 10.2.42.62
datanode02 10.2.42.63

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

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

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

cd /opt/hadoop-2.8.3/etc/hadoop

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

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

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

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.2.42.61:9000</value>
</property>
<property>
  <name>io.file.buffer.size</name>
  <value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>

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

<configuration>
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>10.2.42.61:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 指定namenode数据存放临时目录,自行创建 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/dfs/name</value>
</property>
<!-- 指定datanode数据存放临时目录,自行创建 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/hadoop/dfs/data</value>
</property>
</configuration>

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

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
</configuration>

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

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.resourcemanager.address</name>
  <value>10.2.42.61:8032</value>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>10.2.42.61:8030</value>
</property>
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>10.2.42.61:8031</value>
</property>
<property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>10.2.42.61:8033</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>10.2.42.61:8088</value>
</property>
</configuration>

配置datanode,方便namenode调用
vim slaves

10.2.42.62
10.2.42.63

创建数据目录

mkdir /data/hadoop/tmp -p
mkdir /data/hadoop/dfs/name -p
mkdir /data/hadoop/dfs/data -p

格式化namenode,由于namenode

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

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

如下表示格式化成功。

启动集群

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

输出日志如下:

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

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

通过URL访问的地址

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

配置HBase集群

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

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

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

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

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

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

配置regionservers文件
vim regionservers

10.2.42.62
10.2.42.63

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

export HBASE_MANAGES_ZK=false

启动集群

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

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

/opt/hbase-1.2.6/bin/hbase shell
hbase(main):002:0> status
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

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

配置PinPoint-Collecter

解压war包到tomcat的webapps目录下

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

hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181 ......

修改配置文件pinpoint-collector.properties

cluster.enable=true
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
......
flink.cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
flink.cluster.zookeeper.sessiontimeout=3000

启动tomcat

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

配置PinPoint-WEB

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

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

hbase.client.host=10.2.42.61,10.2.42.62,10.2.42.63
hbase.client.port=2181
......

vim pinpoint-web.properties

cluster.enable=true
cluster.web.tcp.port=9997
cluster.zookeeper.address=10.2.42.61,10.2.42.62,10.2.42.63
cluster.zookeeper.sessiontimeout=30000
cluster.zookeeper.retry.interval=60000
.......

启动tomcat

/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目录

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

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

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

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

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

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

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. pgsql中的事务隔离

    pgsql中的事务隔离级别 前言 事物隔离级别 在各个级别上被禁止出现的现象是 脏读 不可重复读 幻读 序列化异常 读已提交隔离级别 可重复读隔离级别 可序列化隔离级别 摘录 pgsql中的事务隔离级 ...

  2. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects

    The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...

  3. 用Python绘制全球疫情变化地图

    目前全球疫情仍然比较严重,为了能清晰地看到疫情爆发以来至现在全球疫情的变化趋势,我绘制了一张疫情变化地图,完整代码共 230 行,需要的朋友在公众号回复关键字 疫情地图 即可. 废话不多说,先上图 下 ...

  4. 统计子串数量,Python基础

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:陈YL PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  5. stand up meeting 1-6

    今日更新: 1.修复初始最佳战绩显示bug:  初始为击败全国0% 用户 2.挑战结果界面显示“哎,今天的饭又白吃了,回去多吃两碗###”, 去除API返回string中的“###”. 3.分享模块初 ...

  6. 安全测试-WEB安全渗透测试基础知识(四)

    .4. HTTP标准 1.4.1. 报文格式 1.4.1.1. 请求报文格式 <method><request-URL><version> <headers& ...

  7. 博客搬家 - 记第四次搬家(hugo建站推送到谷歌云存储)

    写在前面,搬迁记录 记录我的博客这次搬家过程.我的博客之前经历过: wordpress github page Bitcron - 机制很不错(写完的博客自动保存到dropbox并发布,可惜搜索引擎的 ...

  8. fasttext 和pysparnn的安装

  9. MySQL之外键、主键、自增

    1.创建外键 create table userinfo( uid int auto_increment primary key, name varchar(32), department_id in ...

  10. 线程Event

    版本一: from threading import Event,current_thread,Thread import time event=Event() #造一个对象,内部维护一个全局变量,状 ...