pinpoint是用JAVA编写开源在GitHub上的一款APM监控工具,用于大规模分布式系统
对系统的影响小(只增加%3的资源利用率)
agent端探针是无侵入式的,只需要在被检测的项目上打下探针,就可以监控整套Java程序了
通过在分布式应用程序中跟踪事务来帮助分析系统的整体结构以及它们中的组件之间的相互关系
原理图:
Pinpoint-Collector:收集各种性能数据,并且发送数据存储到HBASE中
Pinpoint-Agent:和应用一起启动和应用共享JVM,发送数据给
Pinpoint-Web:从HBASE中读取数据,展示给用户。
HBase Storage:收集到的数据存到HBase中
架构中各组件的角色:
pinpoint web UI显示的内容来自于后端的pinpoint web服务,
pinpoint web服务会去hbase中取数,
collector会把来自于agent的数据采集上来,由collector存入hbase(本案例采用hbase集群模式,不是单机HBASE)。
Demo展示时,可以把pp collector服务和pp web服务部署在同一个主机上,方便collector接收agent发来的数据后发给web服务,web服务再对hbase读/写;agent服务部署在应用端,方便将数据发送给collector。
用的2台Centos7的服务器
下载链接:https://github.com/naver/pinpoint/releases/tag/1.8.4
进入/usr/local 创建一个pp_file的目录,用来存放依赖包
cd /usr/local/
mkdir pp_file
上传所需的依赖文件
Jdk8- Java运行环境 –
hbase-1.0 — 数据库,用来存储监控信息
tomcat8.0 — Web服务器
pinpoint-collector.war — pp的控制器
pinpoint-web.war — pp展示页面
使用进去该目录,使用 ls –l查看当前是否上传成功
这套APM系统主要是用JDK1.8来进行部署的,首先需要部署java环境
cd /usr/local/pp_file
tar –zxvf jdk-8u45-linux-x64.tar.gz
ls –l
mv jdk1.8.0_45 /usr/local/
vi /etc/profile
#在最后的一列添加以下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_45
export PATH=$PATH:$JAVA_HOME/bin
#测试是否安装成功
[root@ecs-69c7 local]# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
Pinpoint收集来的测试数据,主要是存在HBASE数据库中的,它可以收集量的数据,可以进行更加详细的分析
将HBASE解压,放入指定目录
cd /usr/local/pp_file
tar –zxvf hbase-1.0.3-bin.tar.gz
mv hbase-1.0.3 /usr/local/hbase
cd ..
cd hbase
vi hbase –env.sh
#在27行左右添加如下
export JAVA_HOME=/usr/local/jdk1.8.0_45
修改HBASE的配置信息
vi hbase-site.xml
#在结尾修改成如下,这里我们指定Hbase本地来存储数据,生产环境将数据建议存入HDFS中。
hbase.rootdir
file:///data/hbase
初始化HBASE的pinpoint库
#执行pinpoint提供的Hbase初始化语句
./hbase shell /usr/local/pp_file/hbase-create.hbase
#执行完了以后,进入Hbase./hbase shell
#进入后可以看到Hbase的版本,还有一些相关的信息
[root@ecs-69c7 bin]# ./hbase shell
2019-04-23 16:51:37,387 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicableHBase Shell; enter ‘help’ for list of supported commands.Type “exit” to leave the HBase ShellVersion 1.0.3, rf1e1312f9790a7c40f6a4b5a1bab2ea1dd559890, Tue Jan 19 19:26:53 PST 2016
#输入"status ‘detailed’"可以查看刚才初始化的表,是否存在
hbase(main):001:0> status 'detailed'
version 1.0.30 regionsInTransitionmaster coprocessors: []1 live servers localhost:50887 1478538574709 requestsPerSecond=0.0, numberOfOnlineRegions=498, usedHeapMB=24, maxHeapMB=237, numberOfStores=626, numberOfStorefiles=0, storefileUncompressedSizeMB=0, storefileSizeMB=0, memstoreSizeMB=0, storefileIndexSizeMB=0, readRequestsCount=7714, writeRequestsCount=996, rootIndexSizeKB=0, totalStaticIndexSizeKB=0, totalStaticBloomSizeKB=0, totalCompactingKVs=0, currentCompactedKVs=0, compactionProgressPct=NaN, coprocessors=[MultiRowMutationEndpoint] “AgentEvent,1478539104778.aa1b3b14d0b48d83cbf4705b75cb35b7.”
可以登录Web界面来查看HBASE的数据是否初始化成功(差不多是16张表)
HbaseWeb:http://[server IP]:16010/master-status
#解压Tomcat,将Tomcat重命名移动到指定位置
cd /usr/local/pp_file
tar -zxvf apache-tomcat-8.0.36.tar.gz
mv apache-tomcat-8.0.36 /usr/local/pp_col
#修改pp-col的Tomcat的配置,主要修改端口,避免与pp-web的Tomcat的端口冲突。我在原本默认的端口前都加了1,下面是替换的shell命令。#【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
cd /usr/local /pp-col/conf/
sed -i 's/port="8005"/port="18005"/g' server.xml
sed -i 's/port="8080"/port="18080"/g' server.xml
sed -i 's/port="8443"/port="18443"/g' server.xml
sed -i 's/port="8009"/port="18009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml
sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml
#部署pinpoint-collector.war包
#【注意:如果没有unzip命令,可以 “yum install unzip” 】
cd /usr/local/pp_file
rm -rf /usr/local/pp-col/webapps/*
unzip pinpoint-collector-1.8.4.war -d /usr/local/pp-col/webapps/ROOT
#启动Tomcatcd /usr/local/pp-col/bin/
./startup.sh
#查看日志,是否成功启动
tail -f ../logs/catalina.out
#解压Tomcat,将Tomcat重命名移动到指定位置
cd /usr/local/pp_file
tar -zxvf apache-tomcat-8.0.36.tar.gz
mv apache-tomcat-8.0.36 /usr/local/pp_web
#修改pp-web的Tomcat的配置,主要修改端口,避免与pp-col的Tomcat的端口冲突。我在原本默认的端口前都加了2,下面是替换的shell命令#【注意】最后一条是将tomcat的私有ip开放,需要将localhost替换成本机的ip,我本机的网卡是默认的,如果你本机的网卡不是eth0,需要进行相关的修改。或者直接用"vi"进去,修改localhost
cd /usr/local/pp_web/conf/
sed -i 's/port="8005"/port="28005"/g' server.xml
sed -i 's/port="8080"/port="28080"/g' server.xml
sed -i 's/port="8443"/port="28443"/g' server.xml
sed -i 's/port="8009"/port="28009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml
sed -i "s/localhost/`ifconfig eth0 | grep 'inet addr' | awk '{print $2}' | awk -F: '{print $2}'`/g" server.xml
#部署pinpoint-collector.war包
#【注意:如果没有unzip命令,可以 “yum install unzip” 】
cd /usr/local/pp_file
rm -rf /usr/local/pp_web/webapps/*
unzip pinpoint-web-1.8.4.war -d /usr/local/pp_web/webapps/ROOT
#查看war包是否解压成功
[root@localhost conf]# ll /usr/local/pp_web/webapps/ROOT/WEB-INF/classes/
total 88
-rw-rw-r--. 1 root root 2164 Apr 7 2016 applicationContext-cache.xml # 这些 *.xml 文件在后续的调优工作中会用到。
-rw-rw-r--. 1 root root 3649 Apr 7 2016 applicationContext-dao-config.xml
-rw-rw-r--. 1 root root 1490 Apr 7 2016 applicationContext-datasource.xml
-rw-rw-r--. 1 root root 6680 Apr 7 2016 applicationContext-hbase.xml
-rw-rw-r--. 1 root root 1610 Apr 7 2016 applicationContext-websocket.xml
-rw-rw-r--. 1 root root 6576 Apr 7 2016 applicationContext-web.xmld
rwxrwxr-x. 2 root root 4096 Apr 7 2016 batch
-rw-rw-r--. 1 root root 106 Apr 7 2016 batch.propertiesd
rwxrwxr-x. 3 root root 4096 Apr 7 2016 com
-rw-rw-r--. 1 root root 682 Apr 7 2016 ehcache.xml
-rw-rw-r--. 1 root root 1001 Apr 7 2016 hbase.properties #配置我们pp-web从哪个数据源获取采集数据,这里我们只指定Hbase的zookeeper地址。
-rw-rw-r--. 1 root root 153 Apr 7 2016 jdbc.properties #连接自身Mysql数据库的连接认证配置。
-rw-rw-r--. 1 root root 3338 Apr 7 2016 log4j.xmld
rwxrwxr-x. 2 root root 4096 Apr 7 2016 mapper
-rw-rw-r--. 1 root root 1420 Apr 7 2016 mybatis-config.xmld
rwxrwxr-x. 3 root root 4096 Apr 7 2016 org
-rw-rw-r--. 1 root root 630 Apr 7 2016 pinpoint-web.properties #这里pp-web集群的配置文件,如果你需要pp-web集群的话。
-rw-rw-r--. 1 root root 141 Apr 7 2016 project.properties
-rw-rw-r--. 1 root root 3872 Apr 7 2016 servlet-context.xmld
rwxrwxr-x. 2 root root 4096 Apr 7 2016 sql # sql目录 pp-web本身有些数据需要存放在MySQL数据库中,这里需要初始化一下表结构。
#启动Tomcat
cd /usr/local/pp_web/bin/
./startup.sh
#查看日志,Tocmat是否启动成功
tail -f ../logs/catalina.out
#日志中出现下面这句话,说明已经启动成功了
org.apache.catalina.startup.Catalina.start Server startup in 79531 ms
#这时候我们可以访问一下这个地址,在浏览器中输入
http://[server IP]:28080"
就会出现主页面了
#如果访问不了的话,关闭防火墙
[root@localhost conf]#/etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
cd /usr/local/pp_file
tar -zxvf pinpoint-agent-1.8.4.tar.gz
mv pinpoint-agent-1.8.4 /usr/local/pp_agent
cd pp_agent/conf
vim pinpoint.config
主要修改IP,只需要指定到安装pp-col的IP就行了,安装pp-col启动后,自动就开启了9994,9995,9996的端口了。这里就不需要操心了,如果有端口需求,要去pp-col的配置文件(“pp-col/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties”)中,修改这些端口
profiler.collector.ip=127.0.0.1
开启TCP 端口:9994 9995 9996
UDP端口:9995 9996
然后测试agent端跟server端的连通性,会出现三个successful
本人项目用的是jar包所以只需要在java项目的启动配置文件添加如下即可
-javaagent:/usr/local/pp-agent/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=eureka1 -Dpinpoint.applicationName=eureka
第一个参数:pinpoint-bootstrap-1.8.4.jar的位置
第二个参数:这里的agentId必须唯一,标志一个jvm。
第三个参数:applicationName表示同一种应用:同一个应用的不同实例应该使用不同的agentId,相同的applicationName。
我们在访问pp-web,可以发现它的下拉框中,多了一个app,然后点击就会显示如下
一旦注册了应用程序名称和代理ID,它们就会保留在HBase中,直到它们的TTL过期(默认为1年)。但是,一旦不再使用它们,您可以使用管理API主动删除它们。
删除应用名称- http://192.168.1.xx:8080/admin/removeApplicationName.pinpoint?applicationName=KaTeX parse error: Expected 'EOF', got '&' at position 17: …PPLICATION_NAME&̲password=PASSWORD
删除代理程序ID- http://192.168.1…xx:8080/admin/removeAgentId.pinpoint?applicationName=KaTeX parse error: Expected 'EOF', got '&' at position 17: …PPLICATION_NAME&̲agentId=AGENT_ID&password=$PASSWORD
(password参数的值是您admin.password在pinpoint-web.properties中定义的属性。保留此空白将使您无需密码参数即可调用管理API)
默认密码admin< /string>< /string>