3. 部署webUI
在我们的《Step2. 编译》中,我们已经完成了所有组件的编译。其中webUI是以war包的格式,发布在pinpoint/web/target
中,例如:pinpoint-web-1.8.3-SNAPSHOT.war
。 当然,根据官方QuickStart教程,可以直接运行pinpoint/quickstart/bin/start-web.sh
启动。但是通过阅读start-web.sh
的func_start_pinpoint_web
方法你会发现,每次webUI的启动都需要编译一遍,然后部署在pinpoint/quickstart/web/target
下, 实在是麻烦,而且后续的调优也不方便。因此我推荐直接部署到tomcat。
tomcat部署很简单,其实就是war包的部署过程,说说简单的方法吧。
① 初步启动
下载tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.93/bin/apache-tomcat-7.0.93.zip
解压tomcat
unzip apache-tomcat-7.0.94.zip
进入ROOT目录,删掉ROOT下所有之前的文件
cd apache-tomcat-7.0.93/webapps/ROOT
解压war包到ROOT目录下,效果如下:
[root@im-test-cpr-1 ROOT]# pwd
/opt/pinpoint/apache-tomcat-7.0.93/webapps/ROOT
[root@im-test-cpr-1 ROOT]# ls
common favicon.ico fonts lib scripts v2
components favicon.png images META-INF stat.html WEB-INF
_danger.html features index.html pages styles
编辑conf/server.xml
以配置服务端口,我配置的是28080端口。
71
运行bin/startup.sh
以启动应用:
② 配置webUI后重启
但是只是这样配置,webUI是无法正常工作的,因为他并不知道应该去哪里查询数据,换句话讲,我们应该修改webUI中关于HBase的配置。webUI的所有配置都位于apache-tomcat-7.0.93/webapps/ROOT/WEB-INF/classes
中:
[root@im-test-cpr-1 classes]# pwd
/opt/pinpoint/apache-tomcat-7.0.93/webapps/ROOT/WEB-INF/classes
[root@im-test-cpr-1 classes]# ls
applicationContext-cache.xml ehcache.xml
applicationContext-dao-config.xml hbase.properties
applicationContext-datasource.xml jdbc.properties
applicationContext-hbase.xml log4j.xml
applicationContext-web-namespace.xml mapper
applicationContext-websocket.xml mybatis-config.xml
applicationContext-web.xml pinpoint-web.properties
batch project.properties
batch.properties servlet-context.xml
com sql
- 修改hbase配置
编辑hbase.properties
,其中host和port就是hbase对外提供服务的ip&port。在前文hbase的配置中已经提到过了,这里不多解释。其余的配置就保持默认就行。
hbase.client.host=180.**.***.189
hbase.client.port=2181
- 修改jdbc.properties
pinpoint自带功能足够强大的报警功能,可以在异常情况发生时,将异常发送给特定的用户组。在不同的场景,可以通过配置来灵活满足。这些配置是持久化到数据库中的,而这个jdbc.properties
就是配置数据库连接的地方。
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://devtest.******.rds.bj.***.com:3306/pinpoint?autoReconnect=true&useUnicode=true&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
jdbc.username=***
jdbc.password=*****
现在你的Application中没有东西,因为agent没有配置,collector没有工作,hbase没有数据....
当然,如果不配置jdbc.properties
的话,不会报错,一切看起来很正常。但是在报警配置的所有信息都是存储在运行webUI的jvm内存中,重启一下就没了。
- 修改pinpoint-web.properties
这里有两个要修改的地方。其一:config.sendUsage
设置为false,因为它是Flag to send usage information (button click counts/order) to Google Analytics
,众所周知,大家的PC连接google要科学上网,开着这东西半天打不开网页。其二:config.show.applicationStat
设置为true。是为了一会能看到jvm指标。例如:
image.png
32 config.sendUsage=false
33 config.editUserInfo=true
34 config.openSource=true
35 config.show.activeThread=true
36 config.show.activeThreadDump=true
37 config.enable.activeThreadDump=true
38 config.show.applicationStat=true
39 config.show.stackTraceOnError=true
因为我搭建的webUI不是集群,集群部分我就不说了...
修改完成后,重启tomcat
4. 部署collector
collector在编译之后也是一个war包,部署过程和webUI相同,在这里只说一下几个配置文件。
首先是collector中的hbase.properties
。因为collector扮演的是接收agent上传的性能数据并持久化到hbase的角色,所以需要知道hbase服务的位置。配置和webUI一样即可。
hbase.client.host=****
hbase.client.port=2181
然后比较重要的是pinpoint-collector.properties
。在配置之前首先说一下,agent和collector之间的数据交互,既可以走TCP协议也可以走UDP协议。TCP和UDP的区别就在于性能损耗和数据可靠性,具体请自行百度。但是一定要保证agent和collector保持一致。
例如我的配置:
agent(jvm-stat数据) --tcp--> collector 9995
agent(tx-span数据) --udp--> collector 9996
agent(基础数据) --tcp--> collector 9994
以下是collector配置文件截取:
2 collector.receiver.base.ip=0.0.0.0
3 collector.receiver.base.port=9994
19 # stat receiver config -------------------------------------------------- -------------------
20 collector.receiver.stat.udp=false
21 collector.receiver.stat.udp.ip=0.0.0.0
22 collector.receiver.stat.udp.port=9995
23 collector.receiver.stat.udp.receiveBufferSize=4194304
25 # Should keep in mind that TCP transport load balancing is per connection. (UDP transport loadbalancing is per packet)
26 collector.receiver.stat.tcp=true
27 collector.receiver.stat.tcp.ip=0.0.0.0
28 collector.receiver.stat.tcp.port=9995
45 # span receiver config -------------------------------------------------- -------------------
46 collector.receiver.span.udp=true
47 collector.receiver.span.udp.ip=0.0.0.0
48 collector.receiver.span.udp.port=9996
49 collector.receiver.span.udp.receiveBufferSize=4194304
51 # Should keep in mind that TCP transport load balancing is per connection. (UDP transport loadbalancing is per packet)
52 collector.receiver.span.tcp=false
53 collector.receiver.span.tcp.ip=0.0.0.0
54 collector.receiver.span.tcp.port=9996
配置完成后,启动collector的tomcat。
5. flink提交任务
首先要说明的是,flink的存在是为了在查看Application inspector时,通过flink的预统计,从而在显示JVM指标时,达到快速查询的目的。为了开启Application inspector,请先进入这个链接阅读相关文档。
阅读时需要根据文档进行pinpoint配置文件以及flink配置文件进行相关的配置。flink的相关内容文档中未提及,做一下简单介绍。
- 下载flink
wget http://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.7.2/flink-1.7.2-bin-scala_2.11.tgz
- 解压并配置环境变量
#flink
export FLNK_HOME=/opt/pinpoint/flink-1.7.2
export PATH=$FLINK_HOME/bin:$PATH
- 启动flink
[root@im-test-cpr-1 bin]# pwd
/opt/pinpoint/flink-1.7.2/bin
[root@im-test-cpr-1 bin]# ls
config.sh mesos-appmaster.sh start-cluster.sh
flink mesos-taskmanager.sh start-scala-shell.sh
flink.bat pyflink.bat start-zookeeper-quorum.sh
flink-console.sh pyflink.sh stop-cluster.sh
flink-daemon.sh pyflink-stream.sh stop-zookeeper-quorum.sh
historyserver.sh sql-client.sh taskmanager.sh
jobmanager.sh standalone-job.sh yarn-session.sh
mesos-appmaster-job.sh start-cluster.bat zookeeper.sh
[root@im-test-cpr-1 bin]# ./start-cluster.sh
- 提交任务
flink要提交的任务是一个jar包,在编译成功后,该jar包位于:pinpoint/flink/target/pinpoint-flink-job-1.8.3-SNAPSHOT.jar
,提交时只需要执行:
flink run /opt/pinpoint/pinpoint/flink/target/pinpoint-flink-job-1.8.3-SNAPSHOT.jar
访问 http://{flink所在服务器ip}:8081 查看任务执行情况,如果有正在运行的task,说明任务提交成功。
6. 部署agent
pinpoint的性能数据收集是通过无埋点的javaagent的方式,其工作原理会在后续文章中说明。
- 修改配置文件
agent的配置文件是/pinpoint-agent-1.8.3-SNAPSHOT/pinpoint.config
。与collector对应,需要设置agent发送不同数据时所对应的端口。
例如我的配置:
agent(jvm-stat数据) --tcp--> collector 9995
agent(tx-span数据) --udp--> collector 9996
agent(基础数据) --tcp--> collector 9994
profiler.collector.ip=180.**.***.***
# placeHolder support "${key}"
profiler.collector.span.ip=${profiler.collector.ip}
profiler.collector.span.port=9996
# placeHolder support "${key}"
profiler.collector.stat.ip=${profiler.collector.ip}
profiler.collector.stat.port=9995
# placeHolder support "${key}"
profiler.collector.tcp.ip=${profiler.collector.ip}
profiler.collector.tcp.port=9994
如果应用于生产环境,考虑到性能影响,需要设置采样率等配置项,可比对文件pinpoint-real-env-lowoverhead-sample.config
参考相关配置。
- 添加jvm启动参数
需要添加的参数分为三部分。
-javaagent:{agent Jar包路径}
:编译成功后位于pinpoint/agent/target/pinpoint-agent-1.8.3-SNAPSHOT/pinpoint-bootstrap-1.8.3-SNAPSHOT.jar
。但是需要注意的是,部署时pinpoint-agent-1.8.3-SNAPSHOT
这整个文件夹都需要部署到被监控的宿主应用所在的服务器上,因为下面除了javaagent入口类所在的jar包,还有agent运行所需要的lib和配置文件。
-Dpinpoint.agentId
:需要保证每个被监控的jvm都有不同的agentId。不能超过24个字符
-Dpinpoint.applicationName
: 被监控的jvm所属的应用名称。不能超过24个字符
部署很简单,只需要在服务启动时添加jvm参数。jvm参数的添加方法不同的web服务不一样。具体请自行百度各自web应用的参数的添加方法。我的测试应用是springboot,启动时是java -jar ***.jar
,因此将javaagent参数添加在java
后-jar
前即可。
java -javaagent:/home/appplat/runnable/pinpoint-agent-1.8.3-SNAPSHOT/pinpoint-bootstrap-1.8.3-SNAPSHOT.jar -Dpinpoint.agentId=test_java_business -Dpinpoint.applicationName=appplat_business_test -jar appplat-business-0.0.2-SNAPSHOT.jar
6、日志检查
列一下每种服务对应的日志文件的位置,用于排查是否有错误。
- agent:
pinpoint-agent-1.8.3-SNAPSHOT/log
- collector: tomcat-
apache-tomcat-7.0.93/logs/catalina.out
QuickStart-pinpoint/quickstart/logs/quickstart.collector.log
- webUI: tomcat-
apache-tomcat-7.0.93/logs/catalina.out
QuickStart-pinpoint/quickstart/logs/quickstart.web.log
- hbase:
hbase/hbase-1.0.3/logs
- flink:
flink-1.7.2/log
7、效果展示