链路监控工具pinpoint的安装和配置

Tags: APM
pinpoint调用链工具初识
===
在本文中重点讲一下pinpoint工具的架构,安装和部署;

1. pinpoint工具介绍:

  Pinpoint是一款对Java编写的大规模分布式系统的APM工具,有些人也喜欢称呼这类工具为调用链系统、分布式跟踪系统。我们知道,前端向后台发起一个查询请求,后台服务可能要调用多个服务,每个服务可能又会调用其它服务,最终将结果返回,汇总到页面上。如果某个环节发生异常,工程师很难准确定位这个问题到底是由哪个服务调用造成的,Pinpoint等相关工具的作用就是追踪每个请求的完整调用链路,收集调用链路上每个服务的性能数据,方便工程师能够快速定位问题。
  pinpoint对服务器性能的影响非常小(只增加约3%资源利用率),安装agent是无侵入式的,只需要在被测试的Tomcat中加上3句话,打下探针,就可以监控整套程序了。类似的工具包括google的Dapper,twitter的Zipkin,淘宝的鹰眼(EdleEye),大众点评的CAT,还有国内开源的skywalking,商业的听云APM工具等;

2. pinpoint系统架构:

pinpoint.png

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

3. Hbase数据库的安装和配置:

  Pinpoint以Hbase作为存储的数据库。HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问,是Google的BigTable的开源实现。HBase的目标是存储并处理大型的数据,更具体地说仅用普通的硬件配置,能够处理成千上万的行和列所组成的大型数据库。HBase是一个开源的、分布式的、多版本的、面向列的存储模型。可以直接使用本地文件系统,也可使用Hadoop的HDFS文件存储系统。为了提高数据的可靠性和系统的健壮性,并且发挥HBase处理大型数据的能力,还是使用HDFS作为文件存储系统更佳。
  HBase的服务器体系结构遵从简单的主从服务器架构,它由HRegion Server群和HBase Master服务器构成。HBase Master负责管理所有的HRegionServer,而HBase中的所有RegionServer都是通过ZooKeeper来协调,并处理HBase服务器运行期间可能遇到的错误。
  HBase Master Server本身并不存储HBase中的任何数据,HBase逻辑上的表可能会被划分成多个Region,然后存储到HRegion Server群中。HBase Master Server中存储的是从数据到HRegion Server的映射.
  HBase的安装也有三种模式:单机模式、伪分布模式和完全分布式模式,在这里只介绍完全分布模式。前提是Hadoop集群和Zookeeper已经安装完毕,并能正确运行。

#在第一台节点上面安装zookeeper:
tar xzvf zookeeper-3.4.8.tar.gz -C /usr/local/
cd /usr/local/
ln -sv zookeeper-3.4.8 zookeeper
cd /usr/local/zookeeper
mkdir -p data3
mkdir -p logs3
cd /usr/local/zookeeper/conf
cp -r zoo_sample.cfg zoo.cfg
vim zoo.cfg

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/usr/local/zookeeper/data3
dataLogDir=/usr/local/zookeeper/logs3
clientPort=2181
server.189=192.168.1.189:2888:3888 
server.190=192.168.1.190:2888:3888 
server.191=192.168.1.191:2888:3888

echo "189" >> /usr/local/zookeeper/data3/myid
#将服务器的标识内容登记到/usr/local/zookeeper/data3/myid文件中,这个189是我的服务器的IP地址最后一位。
/usr/local/zookeeper/bin/zkServer.sh start
#启动服务
/usr/local/zookeeper/bin/zkServer.sh stop
#停止服务
/usr/local/zookeeper/bin/zkServer.sh status
#查看主从角色,leader是主角色,follower是从角色
  • tickTime: zookeeper中使用的基本时间单位, 毫秒值
  • dataDir: zk的数据目录. 可以是任意目录
  • dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置
  • clientPort: 监听client连接的端口号,默认就是2181
  • initLimit zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s
  • syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms
  • server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口。如果配置的是伪集群模式, 那么各个server的B, C参数必须不同。啥是伪集群,就是在一个服务器上面运行三个实例做成的集群;
  • 其他两台服务器安装zk和第一台的方式一样,配置文件也一样,唯一不同的是myid文件的内容,应该对应自己服务器的IP地址最后一位标识;

  安装完成zk集群之后,就需要HDFS文件系统了,因为Hbase数据库依赖于HDFS文件系统,其实Hbase数据库也可以使用本地文件系统。只不过使用HDFS文件系统更有利用系统的健壮和性能;因为我刚开始接触Hbase数据库,对大数据方面的中间件还不是很熟悉,所以我的HDFS文件系统是单机的。然后我把Hbase数据库安装的是集群结构的。分为Hmaster和HRegionServer。

# 安装hbase数据库的三台服务器都必须能够使用root登录,并且端口是默认端口22
chattr -i /etc/ssh/sshd_config
sed -i 's#PermitRootLogin no#PermitRootLogin yes#g' /etc/ssh/sshd_config
sed -i 's#AllowUsers bqadm#AllowUsers bqadm root#g' /etc/ssh/sshd_config
sed -i 's#10022#22#g' /etc/ssh/sshd_config
systemctl restart sshd
# 然后再master的这台机器上面配置公钥和私钥,拷贝公钥到另外两台机器
ssh-keygen -t rsa
ssh-copy-id 192.168.1.190
ssh-copy-id 192.168.1.191
cd /usr/local/hbase-1.4.10/conf/
vim hbase-env.sh

# 这个参数如果是true,表示使用Hbase自带的zk,因为我们安装了独立的zk集群,所以需要将这个参数设置为false
export HBASE_MANAGES_ZK=false

# The java implementation to use.  Java 1.7+ required.
export JAVA_HOME=/usr/local/jdk1.8.0_131

# Extra Java CLASSPATH elements.  Optional.
export HBASE_CLASSPATH=/usr/local/hbase-1.4.10/conf

# vim hbase-site.xml
<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://192.168.1.189:9000/hbase</value>
        </property>

        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>

   <!-- 0.98后的新变动,之前版本没有.port,默认端口为60000 -->
        <property>
                <name>hbase.master.port</name>
                <value>16000</value>
        </property>

        <property>
                <name>hbase.zookeeper.quorum</name>
             <value>192.168.1.189:2181,192.168.1.190:2181,192.168.1.191:2181</value>
        </property>

        <property>
                <name>hbase.zookeeper.property.dataDir</name>
             <value>/usr/local/zookeeper/data3</value>
        </property>
</configuration>

# hbase-site.xml这个配置文件主要配置了Hbase的数据库存储路径,依赖zk的一些信息;Hbase数据库存储可以使用本地存储,也可以使用HDFS文件系统。如果是本地存储,格式如下:
<name>hbase.rootdir</name>
    <value>file:/usr/src/pinpoint_resource/hbase-1.2.4/data</value>

vim regionservers 
192.168.1.189
192.168.1.190
192.168.1.191
# 配置regionserver的服务器地址

cd /usr/local/hbase-1.4.10/bin
./start-hbase.sh
# 启动hbase数据库,启动之前需要将hbase的安装程序和配置文件都拷贝到另外两台机器上面,然后配置好免密登录之后,执行start-hbase.sh之后,会自动在另外两台机器上面HRegionServer。检查的方式就是jps命令

# 两台从节点上面查看hbase进程
[root@SZ1PRDOAM00AP010 ~]# jps
17408 HRegionServer  #表示hbase的RegionServer
16931 QuorumPeerMain #这个是zk的进程
18475 Bootstrap
24047 Jps

# 在主节点上查看hbase进程
[root@SZ1PRDOAM00AP009 conf]# jps
21968 SecondaryNameNode  # hdfs文件系统的进程
21793 DataNode  #这个是hdfs文件系统的进程,存储数据
98883 Jps
73397 QuorumPeerMain  #zk的进程
81286 Bootstrap
74201 HRegionServer  #hbase的进程
21659 NameNode   # hdfs文件系统的进程,管理元数据
74061 HMaster  #  

# 初始化pinpoint的数据库
wget https://github.com/naver/pinpoint/blob/1.8.5/hbase/scripts/hbase-create.hbase
hbase shell hbase-create.hbase
# 如果需要清除数据,就下载hbase-drop.hbase脚本

Hbase数据库安装成功之后,有个web管理页面可以查看数据库表的。http://192.168.1.189:16010/master-status,访问16010端口就可以查看了。其中可以看到我们刚才初始化的TABLE.

  因为Hbase数据库依赖于HDFS文件系统,所以我们顺便说一下安装HDFS文件系统了。安装HDFS文件系统首先先按照hadoop.

  Hadoop Common是在Hadoop0.2版本之后分离出来的HDFS和MapReduce独立子项目的内容,是Hadoop的核心部分,能为其他模块提供一些常用工具集,如序列化机制、Hadoop抽象文件系统FileSystem、系统配置工具Configuration,并且在为其平台上的软件开发提供KPI等。其他Hadoop子项目都是以此为基础而建立来的

  HDFS是分布式文件存储系统,类似于FAT32,NTFS,是一种文件格式,是底层的HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,在低成本的通用硬件上运行。

  Hbase是Hadoop database,即Hadoop数据库。它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。HBase是一个建立在HDFS之上,面向结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。 Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持

cd /usr/local
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz
tar xzvf hadoop-2.9.0.tar.gz
cd /usr/local/hadoop-2.9.0/etc/hadoop
vim hadoop-env.sh
# set JAVA_HOME in this file, so that it is correctly defined on
export JAVA_HOME=/usr/local/jdk1.8.0_13

# 查看hadoop版本
cd /usr/local/hadoop-2.9.0/bin
[root@SZ1PRDOAM00AP009 bin]# ./hadoop version
Hadoop 2.9.0
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 756ebc8394e473ac25feac05fa493f6d612e6c50
Compiled by arsuresh on 2017-11-13T23:15Z
Compiled with protoc 2.5.0
From source with checksum 0a76a9a32a5257331741f8d5932f183
This command was run using /usr/local/hadoop-2.9.0/share/hadoop/common/hadoop-common-2.9.0.jar
[root@SZ1PRDOAM00AP009 bin]# 

# 配置hadoop的环境变量
[root@SZ1PRDOAM00AP009 bin]# cat /etc/profile.d/hadoop.sh 
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

安装完成hadoop之后,我们接下来安装hdfs文件系统。HDFS文件系统和Hadoop软件包是一个,修改几个配置文件就可以了;

vim /usr/local/hadoop-2.9.0/etc/hadoop/core-site.xml

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://192.168.1.189:9000</value>
    </property>
</configuration>

#配置nameNode:接收请求的地址,客户端将请求该地址

vim /usr/local/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
<configuration>
        <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>file:///usr/local/hadoop/hdfs/namenode</value>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>file:///usr/local/hadoop/hdfs/datanode</value>
    </property>
</configuration>
# 配置数据副本,因为我们是单机,所以就配置了1副本。存储目录是本地文件的目录。
#ssh免密码登录
ssh localhost
#如果不支持,按顺序执行下面三行命令即可
  $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  $ chmod 0600 ~/.ssh/authorized_keys

#格式化
#初次使用hdfs需要进行格式化
hdfs namenode -format  

#启动
#格式化完成以后,我们就可以启动hdfs了
sbin/start-dfs.sh  

#启动完成,我们查看一下hdfs进程

ps -ef|grep hdfs
#你会看到:nameNode\dataNode\secondaryNameNode这三个进程,则表示启动成功,否则到logs下的对应日志中查看错误信息。

#安装好HDFS文件系统之后,可以通过web管理页面查看状态;
http://192.168.1.189:50070/dfshealth.html#tab-overview

4. pinpoint的安装和配置:

  pinpoint一般由三个组件组成。分别是pinpoint-Collector用来收集数据,Pinpoint-Web用来展示数据,pinpoint-agent是收集客户端。Hbase是用来存储数据。我们先看看pinpoint-Collector的安装;

wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-collector-1.8.5.war
wget https://github.com/naver/pinpoint/releases/download/1.8.5/pinpoint-web-1.8.5.war

# pinpoint-collector和pinpoint-web都是war包,运行在tomcat里面就可以了.如果在生产环境,建议收集器和web管理界面安装在不同的机器上面;

cd /usrl/local/tomcat/webapps/
rm -rf *
unzip pinpoint-collector-1.6.1.war -d ROOT
cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes

vim pinpoint-collector.properties
cluster.zookeeper.address=192.168.1.191
#修改zookeeper地址

vim hbase.properties
hbase.client.host=192.168.1.191
hbase.client.port=2181
#配置数据库存储的地址

/usr/local/tomcat/bin/startup.sh 
#启动tomcat
cd /usrl/local/tomcat/webapps/
rm -rf *
unzip pinpoint-web-1.8.5.war -d ROOT
cd /usr/local/tomcat/webapps/ROOT/WEB-INF/classes

vim hbase.properties
hbase.client.host=192.168.1.191
hbase.client.port=2181
#配置数据库存储的地址

vim pinpoint-web.properties
cluster.enable=false
cluster.web.tcp.port=9997
cluster.zookeeper.address=192.168.1.191
# web集群功能禁用掉,然后配置zk的地址

/usr/local/tomcat/bin/startup.sh 
#启动tomcat

mkdir -p /usr/local/pinpoint-agent
cd /usr/local
tar xzvf pinpoint-agent-1.8.5.tar.gz -C pinpoint-agent

vim pinpoint.config

profiler.collector.ip=192.168.1.190
# 配置collector服务器的地址
cd scripts
[root@SZ1PRDOAM00AP009 script]# sh networktest.sh 
CLASSPATH=./tools/pinpoint-tools-1.8.5.jar:
2019-10-15 16:13:17 [INFO ](com.navercorp.pinpoint.bootstrap.config.DefaultProfilerConfig) configuration loaded successfully.
UDP-STAT:// SZ1PRDOAM00AP010.bf.cn
    => 192.168.1.190:9995 [SUCCESS]

UDP-SPAN:// SZ1PRDOAM00AP010.bf.cn
    => 192.168.1.190:9996 [SUCCESS]

TCP:// SZ1PRDOAM00AP010.bf.cn
    => 192.168.1.190:9994 [SUCCESS]

[root@SZ1PRDOAM00AP009 script]#

#有个网络测试脚本,可以测试agent到collector之间的网络是否正常。我这里遇到了一个问题,一直是9995端口不通。后续经过排查,将三台主机的ip和主机名配置到/etc/hosts文件之中就可以了。

vim /usr/local/tomcat/bin/catalina.sh 
JAVA_OPTS="$JAVA_OPTS -javaagent:/usr/local/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=gytest"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=gytest01"

# 给增加agent,只需要修改catalina.sh启动脚本就可以,增加pinpoint的jar包路径,应用的标识而已;
-Dpinpoint.agentId - 唯一标记agent运行所在的应用(如,loan-33)
-Dpinpoint.applicationName - 将许多的同样的应用实例分组为单一服务(如,loan)
# 注意:pinpoint.agentId 必须全局唯一来标识应用实例, 而所有共用相同 pinpoint.applicationName 的应用被当成单个服务的多个实例

  差不多有近三个月没有写技术博文了,最近老婆生了二胎家里的事情比较多,加上年底了公司的工作也比较忙,所以一直没有抽出时间来写博客了,也希望大家能够谅解。最近我在公司换了一个项目在做,主要是关于统一监控的项目。涉及到了APM链路跟踪,zabbix监控,业务监控等内容,有时间的话我也会将一些经验分享出来给大家。感谢大家的持续关注。 我的微信公众号是“云时代IT运维”,大家可以扫码关注。
链路监控工具pinpoint的安装和配置

猜你喜欢

转载自blog.51cto.com/zgui2000/2447366