PinPoint APM搭建全过程
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搭建全过程的更多相关文章
- linux环境(CentOS-6.7)下redis集群的搭建全过程
linux环境下redis集群的搭建全过程: 使用mount命令将光盘挂载到/mnt/cdrom目录下: [root@hadoop03 ~]# mount -t iso9660 -o ro /dev/ ...
- Gerrit代码审核服务器搭建全过程
Gerrit代码审核服务器搭建全过程 转载请标明出处:http://blog.csdn.net/ganshuyu/article/details/8978614 环境:Ubuntu12.xx 1.建立 ...
- Ubuntu16+pinpoint环境搭建
最近研究了pinpoint,稍后放上环境搭建教程,建议想学习搭建的同学记得参考pinpointGitHub
- Git服务器搭建全过程分步详解【转】
转自:http://developer.51cto.com/art/201507/483448.htm GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用, ...
- 完整版的OpenLDAP搭建全过程
总结: 先写总结,再写正文,嘿嘿嘿.这还是第一次认真的写个文档,写个总结,哈哈.大概在一个月前,第一次听说这个东西,完全没有概念,刚开始的时候看理论的知识,看了几次之后就没看了,看不 ...
- Git服务器搭建全过程
GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- Hadoop2.7.3+Spark2.1.0 完全分布式环境 搭建全过程
一.修改hosts文件 在主节点,就是第一台主机的命令行下; vim /etc/hosts 我的是三台云主机: 在原文件的基础上加上; ip1 master worker0 namenode ip2 ...
随机推荐
- java消除 list重复值及交集,并集,差集
消除 list重复值 Java代码 public void removeDuplicate(List list) { HashSet h = new HashSet(list); list.clea ...
- java中取得用户输入的方法
java中取得用户输入的方法 1.采用java.util.Scanner类 采用Scannerd的next()方法读取,测试代码如下: Scanner sc=new Scanner(System.in ...
- while和do-while
1. While(条件表达式){ 只要条件表达式结果为true,循环一直执行,当条件表达式结果为false的时候,循环终止 } 2. Do{ 循环体代码:首先执行该循环体代码一次.如果while后边的 ...
- AJ学IOS 之小知识之_xcode插件的删除方法_自动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自动提示,
AJ分享,必须精品 一:解决解决自动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自动提示 其实,插件神马的我们自己也能写,并没有想象中的那么难,不过目前我们还是先解决当前问题 在做微 ...
- 分布式 and 集群
集群是个物理形态,强调个体和群体之间的联系: 同一个业务部署在多个服务器上,形成的逻辑上的整体. 分布式是个工作方式.强调请求和处理直接的分发状况: 一个业务分拆多个子业务,部署在不同的服务器上,通过 ...
- PLSQL Developer 中文乱码踩坑记
环境 操作系统版本: Windows 7 PL/SQL 版本: 12.0.1.1814 原因 由于 Oracle 服务器端和客户端字符集编码不一致引起的. 注意点 写在最前面,减少踩坑!!! 网上教程 ...
- 使用 PyQt5 实现图片查看器
一.前言 在学习 PyQt5 的过程中我会不断地做一些小的 Demo,用于让自己能够更好地理解和学习,这次要做的就是一个图片查看器,主要功能包括打开图片.拖动图片.放大和缩小图片. 最终实现的图片查看 ...
- 这价格看得我偷偷摸了泪——用python爬取北京二手房数据
如果想了解更多关于python的应用,可以私信我,或者加群,里面到资料都是免费的 http://t.cn/A6Zvjdun 近期,有个朋友联系我,想统计一下北京二手房的相关的数据,而自己用Excel统 ...
- SpringCloud-Ribbon负载均衡机制、手写轮询算法
Ribbon 内置的负载均衡规则 在 com.netflix.loadbalancer 包下有一个接口 IRule,它可以根据特定的算法从服务列表中选取一个要访问的服务,默认使用的是「轮询机制」 Ro ...
- Python冒泡排序算法及其优化
冒泡排序 所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了.(图中排好序的元素标记为黄 ...