Pinpoint 一款强大的APM工具

背景

程序的监控一直是程序员最头痛的事情之一,现网程序有问题怎么办?看进程看端口 top/free/df 三件套?网络抓包?看日志?所以为了满足这些初级需求很多公司都做了主机监控,进程端口监听等功能,例如主机磁盘满/只读告警,端口不监听告警。这些基础的监控说到底都是黑盒监控,并没有进入到程序内部的调用链里面,程序内部的运行情况完全是两眼一抹黑,导致是该模块本身有问题还是下游的依赖模块出了问题,完全不知道,只能看一行行看日志慢慢确认。换言之,我们需要的是一个分布式调用链追踪系统,能够清楚的描述程序的调用关系,每一跳的耗时,以及请求数量的统计,很明显,Pinpoint就是我们要找的工具。

Pinpoint

Pinpoint 是一个APM(Application performance management)工具,相对于其他APM工具(例如ZipKin)有一个强大的优势,那就是应用程序无需修改一行代码就能直接使用,例如Java程序直接使用Pinpoint提供的Java agent(jar包)就能使用。目前Pinpoint直接Java/PHP/Python三种语言,未来可能会支持更多语言,开源社区极其活跃,版本迭代比较快。

 

Pinpoint的优势

除了上面谈到的对用户代码无嵌入外,Pinpoint还有以下优势:

1.强大的UI

UI会自动识别程序的调用关系并且绘制图表,支持的组件多,例如Tomcat/Jetty/JBoss/Thrift/Kafka/Mysql等等。

2.调用链信息全

除了能看到调用关系及每一级耗时外,还能看到每一级的参数及SQL。

3.高性能

在JVM字节码层做处理,程序的性能损耗小于3%。

Pinpoint架构

由Pinpoint官方给出的架构图我们可以看出,Pinpoint Agent负责采集用户程序的信息 通过 网络将信息发给服务端 Pinpoint Collector,Pinpoint Collector将数据持久化到Hbase中,前端Web UI从Hbase中读取数据展示给用户。是一个标准的C/S分布式架构,选中Hbase的原因想必是为了支持海量数据。

安装实验 

以下记录比较流水,由于笔者实验已经已经安装JDK1.8所以没有这块的安装说明。

安装zookeeper

理论上不用安装,hbase默认会拉起zookeeper,不过是单机的

Apache Download Mirrors

安装步骤参考:Zookeeper安装教程_yuan_xw的专栏-CSDN博客_zookeeper安装步骤

安装hbase

Apache Download Mirrors

注意设置JAVA_HOME环境变量,修改/data/hbase-1.4.13/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/

cd /data/hbase-1.4.13/bin

./start-hbase.sh 

创建hbase pinpoint相关表

https://github.com/naver/pinpoint/tree/master/hbase/scripts

$HBASE_HOME/bin/hbase shell hbase-create.hbase

$HBASE_HOME/bin/hbase shell hbase-create-snappy.hbase

安装tomcat

参考:Linux tomcat安装详解_lcyaiym的专栏-CSDN博客_linux安装tomcat步骤

Apache Tomcat® - Apache Tomcat 9 Software Downloads 下载 apache-tomcat-9.0.37.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

cd /usr/local/tomcat/bin

./startup.sh 

安装pinpoint collector

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-collector-2.0.4.war

启动 

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-collector-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/profiles/release

配置中有关zookeeper的配置都改成localhost

根据 /usr/local/tomcat/logs/catalina.out 的报错信息进行排查。

注意修改主机名,collector注册zookeeper节点用的是主机名供其他服务发现,所以要确保DNS能正确解析。

安装pinpoint web

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-web-2.0.4.war

rm -rf /usr/local/tomcat/webapps/*

unzip pinpoint-web-2.0.4.war -d /usr/local/tomcat/webapps/ROOT

把 /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/jdbc.properties 文件清空。

安装测试pinpoint agent

https://github.com/naver/pinpoint/releases/tag/v2.0.4

下载 pinpoint-agent-2.0.4.tar.gz

mkdir /usr/local/tomcat

mv apache-tomcat-9.0.37/* /usr/local/tomcat

rm -rf /usr/local/tomcat/webapps/*

unzip test.war -d /usr/local/tomcat/webapps/ROOT

/usr/local/tomcat/bin/catalina.sh 中加入以下三项配置:

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pinpoint/pinpoint-agent-2.0.4/pinpoint-bootstrap-2.0.4.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=pp20200906"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=JustTestPP"

配置说明:

agentId 表示该实例的唯一标识,是全局唯一的ID。

applicationName 表示同一服务。

例如有一个购买服务,但是有两个实例,那么就可以这样定义:

agentId=buy1

applicationName=buysercie

agentId=buy2

applicationName=buysercie

问题定位

只有开始的两条记录能被统计到,之后的记录无法统计

解决方法:

修改 

/data/pinpoint/pinpoint-agent-2.0.4/pinpoint.config  

/data/pinpoint/pinpoint-agent-2.0.4/profiles/release/pinpoint-env.config

/data/pinpoint/pinpoint-agent-2.0.4/profiles/local/pinpoint-env.config

中 profiler.sampling.rate 值改为1,表示每一条记录都采集。默认是20,表示每20条采集一条。

编译安装:

1 编译源码

1.1 下载源码,项目代码托管在github上,地址: https://github.com/naver/pinpoint,最新稳定版为2.0.1,使用git clone下载2.0.1版本源码至本地。

git clone -b v2.0.1 https://github.com/naver/pinpoint.git

1.2 编译源码,maven版本建议3.5.x,需要配置java环境变量。

将JAVA_HOME环境变量设置为JDK 8主目录

将JAVA_6_HOME环境变量设置为JDK 6主目录(建议使用1.6.0_45)

将JAVA_7_HOME环境变量设置为JDK 7主目录(建议使用1.7.0_80)

将JAVA_8_HOME环境变量设置为JDK 8主目录

将JAVA_9_HOME环境变量设置为JDK 9主目录

终端执行下面命令开始编译:

mvn compile package -DskipTests=true

编译顺利,爽!编译成功之后,找到下面包:

agent目录下:pinpoint-agent-2.0.1.tar.gz 探针包

collector目录下:pinpoint-collector-2.0.1.war 收集端包

web目录下:pinpoint-web-2.0.1.war web页面包

hbase目录下:hbase-create.hbase

2. 实施部署

2.1 部署单机版Hbase,pinpoint支持的HBase版本为0.98.x、1.0.x、1.2.x,本次使用hbase-1.2.6-bin.tar.gz 版本,解压Hbase。

tar -zxvf hbase-1.2.6-bin.tar.gz

2.2 配置HBase

cd hbase-1.2.6/conf
vi hbase-site.xml

修改为以下内容,路径和zookeeper信息请根据实际配置。

<configuration>
        <property>
                  <name>hbase.zookeeper.quorum</name>
                  <value>192.168.166.122:2181</value><!--配置内置的zookeeper-->
        </property>
        <property>
                 <name>hbase.zookeeper.property.dataDir</name>
                 <value>/xx/hbase-1.2.6/zookeeperdata</value>
        </property>
         <property>
                   <name>hbase.tmp.dir</name>
                   <value>/xx/hbase-1.2.6/tmpdata</value>
        </property>
        <property>
                  <name>hbase.rootdir</name>
                  <value>/xx/hbase-1.2.6/data</value>
        </property>
        <property>
                 <name>hbase.cluster.distributed</name>
                 <value>false</value>
       </property>
</configuration>

2.3 启动HBase

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

使用jps命令查看是否启动成功

jps
3238 HMaster

出现HMaster进程说明启动成功

2.4 初始化pinpoint使用的hbase表脚本

上传hbase-create.hbase文件到bin目录

cd hbase-1.2.6/bin
./hbase shell hbase-create.hbase

2.5 部署 pinpoint-collector-2.0.1.war 包

以tomcat为例,解压pinpoint-collector-2.0.1.war到webapps/ROOT 目录

转到release目录。

cd ROOT/WEB-INF/classes/profiles/release

修改hbase-env.properties文件:

hbase.client.host=192.168.166.122

hbase.client.port=2181

hbase.client.host=192.168.166.122
hbase.client.port=2181

# hbase default:/hbase
hbase.zookeeper.znode.parent=/hbase

# hbase namespace to use default:default
hbase.namespace=default


# ==================================================================================
# hbase client thread pool option
hbase.client.thread.max=64
hbase.client.threadPool.queueSize=5120
# prestartAllCoreThreads
hbase.client.threadPool.prestart=true

# warmup hbase connection cache
hbase.client.warmup.enable=true


# enable hbase async operation. default: false
hbase.client.async.enable=true

修改 pinpoint-collector-env.properties文件

pinpoint.zookeeper.address=192.168.166.122:2181

启动tomcat

2.6 部署 pinpoint-web-2.0.1.war 包

以tomcat为例,解压pinpoint-web-2.0.1.war到webapps/ROOT 目录

转到release目录

cd ROOT/WEB-INF/classes/profiles/release

修改hbase-env.properties文件:

hbase.client.host=192.168.166.122

hbase.client.port=2181

hbase.client.host=192.168.166.122
hbase.client.port=2181

# hbase default:/hbase
hbase.zookeeper.znode.parent=/hbase

# hbase namespace to use default:default
hbase.namespace=default

修改 pinpoint-web-env.properties文件

pinpoint.zookeeper.address=192.168.166.122:2181

启动tomcat

访问web页面:http://192.168.166.122:<tomcat 端口>,

出现如下页面,恭喜你pinpoint部署成功。

3. 程序接入pinpoint

上传pinpoint-agent-2.0.1.tar.gz 包到服务器任意目录,

解压

tar -zxvf pinpoint-agent-2.0.1.tar.gz 

重命名

mv pinpoint-agent-2.0.1 agent

应用程序jvm加入启动参数

JAVA_OPTS="-javaagent:/xx/agent/pinpoint-bootstrap-2.0.1.jar -Dpinpoint.agentId=test -Dpinpoint.applicationName=test"

docker方式安装


安装docker docker-compose

yum update -y
yum install docker epel-release python-pip -y
pip install --upgrade pip
pip install docker-compose

修改daemon.json

[root@i-vzdytl5t ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://579fe187.m.daocloud.io","https://pee6w651.mirror.aliyuncs.com"]}

启动docker

systemctl enable docker
systemctl start docker

下载pinpoint-docker,启动pinpoint服务

git clone https://github.com/naver/pinpoint-docker.git
cd Pinpoint-Docker
docker-compose pull && docker-compose up -d

如有问题,请修改相对路径为绝对路径

...
 volumes:
      - /home/pinpoint/hbase
      - /home/pinpoint/zookeeper
...
镜像

root@i-vzdytl5t pinpoint-docker]# docker images
REPOSITORY                                     TAG                 IMAGE ID            CREATED             SIZE
docker.io/zookeeper                            3.4                 bf5cbc9d5cac        10 days ago         146 MB
docker.io/pinpointdocker/pinpoint-agent        1.7.3               d10e8ad4472e        11 days ago         18.5 MB
docker.io/pinpointdocker/pinpoint-hbase        1.7.3               24ec151afe93        11 days ago         993 MB
docker.io/pinpointdocker/pinpoint-web          1.7.3               cfffbb994f1b        11 days ago         659 MB
docker.io/pinpointdocker/pinpoint-collector    1.7.3               998b986648a8        11 days ago         604 MB
docker.io/pinpointdocker/pinpoint-quickstart   latest              125fa49a4a38        2 weeks ago         566 MB
docker.io/flink                                1.3.1               c08ccd5bb7a6        10 months ago       480 MB


启动完成后所起的容器

[root@i-vzdytl5t pinpoint-docker]# docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                                                                                                                            NAMES
770e180203e9        pinpointdocker/pinpoint-quickstart        "catalina.sh run"        3 hours ago         Up 3 hours          0.0.0.0:8000->8080/tcp                                                                                                           pinpoint-quickstart
968c689aad3d        pinpointdocker/pinpoint-agent:1.7.3       "/usr/local/bin/co..."   3 hours ago         Up 3 hours                                                                                                                                           pinpoint-agent
19fac27003e3        pinpointdocker/pinpoint-web:1.7.3         "/usr/local/bin/st..."   3 hours ago         Up 3 hours          0.0.0.0:9997->9997/tcp, 0.0.0.0:8079->8080/tcp                                                                                   pinpoint-web
08f7242e3612        pinpointdocker/pinpoint-collector:1.7.3   "/usr/local/bin/st..."   3 hours ago         Up 3 hours          8080/tcp, 0.0.0.0:9994-9996->9994-9996/tcp, 0.0.0.0:9995-9996->9995-9996/udp                                                     pinpoint-collector
23262f75eec0        pinpointdocker/pinpoint-hbase:1.7.3       "/bin/sh -c '${BAS..."   3 hours ago         Up 3 hours          0.0.0.0:16010->16010/tcp, 0.0.0.0:16030->16030/tcp, 0.0.0.0:60000->60000/tcp, 0.0.0.0:60020->60020/tcp, 0.0.0.0:2180->2181/tcp   pinpoint-hbase
f0525f78484e        flink:1.3.1                               "/docker-entrypoin..."   4 hours ago         Up 4 hours          6123/tcp, 0.0.0.0:6121-6122->6121-6122/tcp, 0.0.0.0:19994->19994/tcp, 8081/tcp                                                   pinpoint-flink-taskmanager
ec7959d91bab        zookeeper:3.4                             "/docker-entrypoin..."   4 hours ago         Up 4 hours          2181/tcp, 2888/tcp, 3888/tcp                                                                                                     pinpoint-docker_zoo3_1
67fe5108a1f8        zookeeper:3.4                             "/docker-entrypoin..."   4 hours ago         Up 4 hours          2181/tcp, 2888/tcp, 3888/tcp                                                                                                     pinpoint-docker_zoo2_1
ff751bd4ce44        zookeeper:3.4                             "/docker-entrypoin..."   4 hours ago         Up 4 hours          2181/tcp, 2888/tcp, 3888/tcp                                                                                                     pinpoint-docker_zoo1_1
34ae285a9246        flink:1.3.1                               "/docker-entrypoin..."   4 hours ago         Up 4 hours          6123/tcp, 0.0.0.0:8081->8081/tcp                                                                                                 pinpoint-flink-jobmanager

访问nodeIP:8079

http://127.0.0.1:8079/

hbase页面

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我无法亲自进行Pinpoint集群部署实践。但是,我可以提供一些指导和建议来帮助您完成这个过程。 Pinpoint一款分布式应用程序性能管理工具,它可以帮助用户快速诊断和解决应用程序性能问题。Pinpoint的集群部署需要以下步骤: 1. 安装和配置Zookeeper和Hadoop集群 Pinpoint需要Zookeeper和Hadoop作为基础设施来管理和存储数据。在进行Pinpoint集群部署之前,您需要先安装和配置Zookeeper和Hadoop集群。 2. 下载和解压Pinpoint 您可以从Pinpoint官方网站下载最新版本的Pinpoint。下载完成后,解压缩文件并准备部署。 3. 配置Pinpoint 在进行Pinpoint集群部署之前,您需要配置Pinpoint。主要配置包括以下内容: - 修改Pinpoint的配置文件,包括修改Zookeeper的地址和端口号、修改Hadoop的地址和端口号等。 - 配置Pinpoint的数据存储方式,可以选择使用HBase或MySQL等数据库。 4. 部署Pinpoint 完成配置后,您可以开始部署Pinpoint。主要包括以下步骤: - 将解压缩后的文件复制到每个节点上。 - 启动Pinpoint的Agent和Collector。 - 配置Pinpoint的Web界面,可以使用Tomcat或Jetty等Web服务器。 5. 测试和优化 完成部署后,您可以进行测试和优化。主要包括以下内容: - 测试Pinpoint是否正常工作,包括监控应用程序的性能和运行情况。 - 优化Pinpoint的性能和稳定性,包括调整Pinpoint的配置文件、增加节点等。 总之,Pinpoint集群部署需要一些技术和经验,如果您不熟悉相关技术,建议寻求专业人士的帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值