一、介绍

Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。
仿照 Google Dapper , Pinpoint 通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系.
注:对于各个模块之间的通讯英文原文中用的是transaction一词,但是我觉得如果翻译为”事务”容易引起误解,所以替换为”交互”或者”调用”这种比较直白的字眼。

pinpoint主要有四个部分组成:

  • agent:其中包含一些插件,用于客户端向收集器发送跟踪数据。
  • pinpoint-collector:收集器,处理agent端发送过来的数据,并持久化。
  • pinpoint-web:展示统计数据。
  • hbase: 持久化层。

在使用上力图简单高效:
• 安装agent,不需要修改哪怕一行代码
• 最小化性能损失
• 官网地址:https://github.com/naver/pinpoint

二、概述

如今的服务通常由很多不同模块组成,他们之间相互调用并通过API调用外部服务。每个交互是如何被执行的通常是一个黑盒。Pinpoint跟踪这些模块之间的调用流并提供清晰的视图来定位问题区域和潜在瓶颈。
服务器地图(ServerMap)
通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。
实时活动线程图表(Realtime Active Thread Chart)
实时监控应用内部的活动线程。
请求/应答分布图表(Request/Response Scatter Chart)
长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息。

三、系统约定

控制端和WEB-UI应用服务器安装在192.168.162.113
监控端和WEB应用服务器安装在192.168.162.102
数据目录:/data
软件源码:/data/packages
脚本目录:/data/scripts
软件下载:https://github.com/naver/pinpoint/releases/tag/1.6.2

四、配置JDK环境

1
2
3
4
5
6
7
8
9
10
11
mkdir -p /data/packages/
#上传JDK、kibana、elasticsearch
tar xf jdk-8u60-linux-x64.tar.gz
mv jdk1.8.0_60/ /usr/local/jdk1.8
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile

五、安装hbase-1.2.6

192.168.162.113:

1
2
3
4
5
cd /data/packages/
wget http://mirrors.hust.edu.cn/apache/hbase/1.2.6/hbase-1.2.6-bin.tar.gz
tar xf hbase-1.2.6-bin.tar.gz
mv hbase-1.2.6 /data/hbase/
mkdir /data/hbase/data
指定java环境:(不设置使用全局的java配置也是可以的)
1
2
vim +27 /data/hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/local/jdk.18
修改Hbase的配置信息:
1
2
3
4
5
6
7
8
vim /data/hbase/conf/hbase-site.xml  
#配置如下信息
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///data/hbase/data</value>
</property>
</configuration>
启动Hbase:
1
2
cd /data/hbase/bin/
nohup ./start-hbase.sh
初始化Hbase的pinpoint库:
1
2
3
4
5
6
7
8
9
./hbase shell hbase-create.hbase
额外配置:

修改hbase表的存储时间,建表的默认TTL时间比较长,需要比较大的磁盘空间,我们可以修改一下 默认的TTL时间
修改的脚本地址为:alterTable7Days.hbase
到hbase安装目下,执行bin/hbase shell
然后复制脚本内容,粘贴执行。
执行完之后 可以查看表信息,describe 'AgentInfo'
可以看到 TTL => '604800 SECONDS (7 DAYS)
检查Hbase是否初始化成功:

登录http://192.168.162.113:16010/master-status#baseStats

六、安装pinpoint-collector

192.168.162.113:

1
2
3
4
5
#解压Tomcat,将Tomcat重命名移动到/data/web下命名为:tomcat-pinpoint-collector
cd /data/packages
mkdir /data/web/tomcat-pinpoint-collector/webapps/ROOT
#上传pinpoint-collector-1.6.2.war
#unzip pinpoint-collector-1.6.2.war 到/data/web/tomcat-pinpoint-collector/webapps/ROOT
启动pinpoint-collector:
1
sh /data/web/tomcat-pinpoint-collector/bin/startup.sh

七、安装pinpoint-web-ui

192.168.162.113:

1
2
3
4
5
#解压Tomcat,将Tomcat重命名移动到/data/web下命名为:tomcat-pinpoint-web
cd /data/packages
mkdir /data/web/tomcat-pinpoint-web/webapps/ROOT
#上传pinpoint-web-1.6.2.war
#unzip pinpoint-web-1.6.2.war 到/data/web/tomcat-pinpoint-web/webapps/ROOT
配置Hbase
1
2
3
4
cd /data/web/tomcat-pinpoint-web/webapps/ROOT /WEB-INF/classes
vi hbase.properties #hbase zk ip+port
hbase.client.host=localhost
hbase.client.port=2181
启动pinpoint-collector:
1
sh /data/web/tomcat-pinpoint-web/bin/startup.sh

八、安装pinpoint-agent

192.168.162.102
1
2
3
#上传到pinpoint-agent-1.6.2.tar.gz到/data/packages
mkdir /data/pinpoint-agent
#把pinpoint-agent-1.6.2.tar.gz解压到/data/pinpoint-agent
修改配置文件
1
2
3
4
vim pinpoint.config
profiler.collector.ip=192.168.162.113
vim pinpoint-real-env-lowoverhead-sample.config
profiler.collector.ip=192.168.162.113
在tomcat应用服务器配置
1
2
3
4
5
[root@localhost tomcat]# vim +20 bin/catalina.sh

CATALINA_OPTS="$CATALINA_OPTS -javaagent:/data/pinpoint-agent/pinpoint-bootstrap-1.6.2.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=jdapp20170812"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=jd"
启动tomcat并模拟浏览点击

非tomcat的java项目:

在启动命令行加上 -javaagent:(agent包所在的目录地址) -Dpinpoint.agentId=(不重复的ID) -Dpinpoint.applicationName=(应用名)

十、登录pinpoint-web-ui查看

http://192.168.162.113:8080



十一、调优配置

修改hbase表的存储时间,建表的默认TTL时间比较长,需要比较大的磁盘空间,我们可以修改一下 默认的TTL时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
disable 'AgentInfo'
disable 'AgentStat'
disable 'AgentStatV2'
disable 'AgentLifeCycle'
disable 'AgentEvent'
disable 'ApplicationIndex'
disable 'StringMetaData'
disable 'ApiMetaData'
disable 'SqlMetaData_Ver2'
disable 'ApplicationTraceIndex'
disable 'Traces'
disable 'TraceV2'
disable 'ApplicationMapStatisticsCaller_Ver2'
disable 'ApplicationMapStatisticsCallee_Ver2'
disable 'ApplicationMapStatisticsSelf_Ver2'
disable 'HostApplicationMap_Ver2'
alter 'AgentInfo', NAME => 'Info', TTL => 604800
alter 'AgentStat', NAME => 'S', TTL => 604800
alter 'AgentStatV2', NAME => 'S', TTL => 604800
alter 'ApplicationIndex', NAME => 'Agents', TTL => 604800
alter 'AgentLifeCycle', NAME => 'S', TTL => 604800
alter 'AgentEvent', NAME => 'E', TTL => 604800
alter 'StringMetaData', NAME => 'Str', TTL => 604800
alter 'ApiMetaData', NAME => 'Api', TTL => 604800
alter 'SqlMetaData_Ver2', NAME => 'Sql', TTL => 604800
alter 'Traces', NAME => 'S', TTL => 604800
alter 'Traces', NAME => 'A', TTL => 604800
alter 'Traces', NAME => 'T', TTL => 604800
alter 'TraceV2', NAME => 'S', TTL => 604800
alter 'ApplicationTraceIndex', NAME => 'I', TTL => 604800
alter 'ApplicationMapStatisticsCaller_Ver2', NAME => 'C', TTL => 604800
alter 'ApplicationMapStatisticsCallee_Ver2', NAME => 'C', TTL => 604800
alter 'ApplicationMapStatisticsSelf_Ver2', NAME => 'C', TTL => 604800
alter 'HostApplicationMap_Ver2', NAME => 'M', TTL => 604800
enable 'AgentInfo'
enable 'AgentStat'
enable 'AgentStatV2'
enable 'AgentLifeCycle'
enable 'AgentEvent'
enable 'ApplicationIndex'
enable 'StringMetaData'
enable 'ApiMetaData'
enable 'SqlMetaData_Ver2'
enable 'ApplicationTraceIndex'
enable 'Traces'
enable 'TraceV2'
enable 'ApplicationMapStatisticsCaller_Ver2'
enable 'ApplicationMapStatisticsCallee_Ver2'
enable 'ApplicationMapStatisticsSelf_Ver2'
enable 'HostApplicationMap_Ver2'
exit

到hbase安装目下,执行bin/hbase shell
然后复制脚本内容,粘贴执行。
执行完之后 可以查看表信息,describe ‘AgentInfo’
可以看到 TTL => ‘604800 SECONDS (7 DAYS)

十二、pinpoint预警功能

官方有比较详细文档:
https://skyao.gitbooks.io/learning-pinpoint/content/alarm/alarm.html

Comments

2017-09-09