目录
一、背景
二、简介
三、Pinpoint Collector 收集端
四、Pinpoint Web
五、Pinpoint Agent
六、监控效果图
七、其他
随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个APM工具帮我们监控各个服务的性能及对服务间的调用进行跟踪,而通过调研多个开源APM工具后,最终我们选择了pintpoint。
1.1、github地址是:https://github.com/naver/pinpoint
1.2、选择它有4个方面原因:
Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。在使用上力图简单高效,通过在启动时安装agent,不需要修改哪怕一行代码,最小化性能损失(3%).
2.1、架构图
2.2、三个主要组件
2.3、依赖环境
部署在独立的Tomcat容器中,如 tomcat-pinpoint-collector
3.1、安装 pinpoint-collector
上传pinpoint-collector-1.7.3.war到 tomcat/webapps目录
解压:
unzip pinpoint-collector-1.7.3.war -d pinpoint-collector
3.2、配置 pinpoint-collector
Pinpoint Collector 有 2 个配置文件: pinpoint-collector.properties 和 hbase.properties
这些配置文件在war文件下的 WEB-INF/classes 目录
3.2.1、pinpoint-collector.properties: 包含colletor的配置,在配置pinpoint agent时需要与之对应:
注意:pinpoint collector 1.5.x版本 和 较新的 1.7.x版本的 pinpoint-collector.properties配置文
件有差异
具体参考:
https://github.com/naver/pinpoint/blob/1.7.3/collector/src/main/resources/pinpoint-collecto
r.properties
https://github.com/naver/pinpoint/blob/1.5.2/collector/src/main/resources/pinpoint-collecto
r.properties
3.3.2、hbase.properties : 包含连接到HBase的配置
查看pinpoint-collector.properties的其它配置,请看https://github.com/naver/pinpoint/blob/1.7.3/web/src/main/resources/pinpoint-web.properties
查看hbase.properties的其它配置,请看https://github.com/naver/pinpoint/blob/1.7.3/web/src/main/resources/hbase.properties
部署在独立的Tomcat容器中,如 tomcat-pinpoint-web
4.1、安装 pinpoint-web
上传pinpoint-web-1.7.3.war到 tomcat/webapps目录
pinpoint-web应用需要部署为tomcat的ROOT应用
cd tomcat/webapps
rm -fr ROOT
unzip pinpoint-web-1.7.3.war -d ROOT
4.2、配置 pinpoint-web
和collector类似,Pinpoint web有和安装相关的配置文件:pinpoint-web.properties 和 hbase.properties
这些文件在 WEB-INF/classes 目录下
cluster.zookeeper.address(默认: localhost,修改为hbase相关的zookeeper的IP地址)
hbase.client.host (默认: localhost,修改为hbase相关的zookeeper的IP地址)
hbase.client.port (默认: 2181)
查看pinpoint-web.properties的其它配置,请看https://github.com/naver/pinpoint/blob/1.7.3/web/src/main/resources/pinpoint-web.properties
查看hbase.properties的其它配置,请看https://github.com/naver/pinpoint/blob/1.7.3/web/src/main/resources/hbase.properties
5.1、安装 pinpoint-agent
上传pinpoint-agent-1.7.3.tar.gz到安装目录,如 /home/jyapp
解压:
mkdir pinpoint-agent
tar zxvf pinpoint-agent-1.7.3.tar.gz -C pinpoint-agent
pinpoint-agent 目录层次如下:
|-- boot
| |-- pinpoint-bootstrap-core-$VERSION.jar
|-- lib
| |-- pinpoint-profiler-$VERSION.jar
| |-- pinpoint-profiler-optional-$VERSION.jar
| |-- pinpoint-rpc-$VERSION.jar
| |-- pinpoint-thrift-$VERSION.jar
| |-- ...
|-- pinpoint-bootstrap-$VERSION.jar
|-- pinpoint.config(Agent配置文件)
Pinpoint Agent 作为一个java agent需要附加到采样的应用(如 Tomcat)
为了让agent生效,在运行应用时需要设置 -javaagent JVM 参数为 $AGENT_PATH/pinpointbootstrap-$
VERSION.jar
-javaagent:$AGENT_PATH/pinpoint-bootstrap-$1 VERSION.jar
另外,Pinpoint Agent 需要两个命令行参数来在分布式系统中标记自身:
注意:pinpoint.agentId 必须全局唯一来标识应用实例, 而所有共用相同 pinpoint.applicationName 的应用被当
成单个服务的多个实例
5.2、配置 pinpoint-agent
在pinpoint.config 中有很多Pinpoint Agent的配置选项 ,而最重要的必须检查的配置选项是collector ip
address 和 TCP/UDP 端口,Agent需要这些值来创建到collector的连接并正确工作
在 pinpoint.config 中相应的设置这些值:
查看pinponit.config的其它配置,请看https://github.com/naver/pinpoint/blob/1.7.3/agent/src/main/resources-release/pinpoint.config
5.3、Tomcat集成示例
在tomcat 启动脚本(catalina.sh)中添加 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName
JAVA_OPTS="$JAVA_OPTS -javaagent:/home/jyapp/pinpoint-agent/pinpoint-bootstrap-1.7.3.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=$AGENT_ID"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
注意:
$AGENT_ID - 需改为应用的唯一标记,如 loan-33,代表loan 33服务器
$APPLICATION_NAME - 需改为应用名,如 loan,代表贷款应用
启动tomcat来开始web应用的采样
SpringBoot微服务同理,在启动命令上添加 -javaagent, -Dpinpoint.agentId, -Dpinpoint.applicationName 即可
将web请求路由到agent
从 1.5.0 版本开始, Pinpoint 可以通过collector从web直接发送请求到agent(反之亦然)。 为此需要使用
Zookeeper 来协调agent和collector之间和collectors 和 web 之间的通讯通道.。在此之上,实时通讯(例如活动
线程数量监控)才变的可能
通常使用HBase后端提供的Zookeeper实例,这样就不需要额外的Zookeeper配置。相关的配置选项在这里:
7.1、pinpoint-web.properties
cluster.enable=true
cluster.web.tcp.port=9997
cluster.zookeeper.address=localhost
cluster.zookeeper.sessiontimeout=30000
cluster.zookeeper.retry.interval=60000
cluster.connect.address=
7.2、pinpoint-collector.properties
cluster.enable=true
cluster.zookeeper.address=localhost
cluster.zookeeper.sessiontimeout=30000
cluster.listen.ip=
cluster.listen.port=