通过 PinPoint Agent 监控 Tomcat Servlet 服务
Pinpoint 是一款开源的 APM(Application Performance Management/应用性能管理)工具,通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。
智能日志平台全链路追踪的 Pinpoint 链路监控方案的数据采集功能主要分两个角色完成:
Agent 端负责监控链路上各服务的调用情况,采集 tracing 数据并上报给 Collector;
Collector 端负责收集所有 Agent 汇集来的 tracing 数据。
Collector 位于 logkit-pro上,负责将 Pinpoint Agent 上报的 tracing 数据,转化成智能日志平台可处理的标准 OpenTracing 协议数据,并打入 Pandora 智能日志管理平台。
本教程通过三个 Tomcat Servlet 应用来讲述如何使用 logkit-pro 接收 Pinpoint tracing 埋点数据,发送到智能日志平台,并使用全链路追踪应用查看链路详情。
1.环境准备
1.1 安装 JDK
建议使用 JDK8 或以上版本,请至Oracle官网下载。
1.2 下载 Pinpoint Agent 包
解压到本地目录: $PinpointAgentRoot,解压出的目录结构如下:
1.3 下载并安装 Apache Tomcat Application Server
若您想按照 Demo 源码自己创建 Tomcat Servlet 项目,并编译源码,请下载 Tomcat 6/7/8 版本中的任意一版本。
若您不想通过源码运行 Demo,可跳过环境准备,下一章节 2.2)中,我们将提供打包完成的 Tomcat 包,可以直接解压运行 Demo,快速体验全链路监控服务效果。
2. 准备 Demo:JAVA Tomcat Servlet 服务
2.1 准备 Demo 服务
为了演示如何使用全链路追踪功能,这里提供三个应用 Demo:分别为 ServletHello, ServletServer1, ServletServer2。三者之间的调用关系如下:
2.2 通过 Tomcat 包启动 Demo
解压 tomcat-servlet-demo.tar.gz
,解压后,包含三个 Tomcat 目录和一个 pinpoint-agent 目录,每个 Tomcat 目录里包含一个可独立执行的服务。解压后结果如下图:
由于压缩包里包含了 Pinpoint Agent 包,而且每个 Tomcat 服务中均配置了 Pinpoint Agent 的路径指向解压包中的 pinpoint-agent, 所以这里就省去了 Pinpoint Agent 的配置。若想查看相关配置,请到 apache-tomcat-8.5.34-xxx/bin/catalina.sh
文件中,关注下图中的配置项:
接下来到每个 Tomcat 目录,启动每个服务即可,命令行演示如下:
# 进入 ServletServer2 启动脚本目录
cd apache-tomcat-8.5.34-server2/bin
# 启动服务,请确保 18082,8007 端口可用
./startup.sh
# 关闭服务请执行 ./shutdown.sh
# 进入 ServletServer1 启动脚本目录
cd apache-tomcat-8.5.34-server1/bin
# 启动服务,请确保 18081,8006 端口可用
./startup.sh
# 关闭服务请执行 ./shutdown.sh
# 进入 ServletHello 启动脚本目录
cd apache-tomcat-8.5.34-hello/bin
# 启动服务,请确保 18080,8005 端口可用
./startup.sh
# 关闭服务请执行 ./shutdown.sh
2.3 通过源码创建 Demo
若您想手动编译执行源码,请下载 Demo 源码。解压后有三个服务的项目源码。建议使用 IDE 打开编译执行。执行时每个服务的参数和配置,请关注以下步骤。
ServletHello 服务以:18080 端口启动, 启动附加 Pinpoint Agent参数如下:
-javaagent:$PinpointAgentRoot/pinpoint-bootstrap-1.8.0-RC1.jar
-Dpinpoint.agentId=hello_agent
-Dpinpoint.applicationName=hello_app
ServletServer1 服务以:18081 端口启动, 启动附加 Pinpoint Agent 参数如下:
-javaagent:$PinpointAgentRoot/pinpoint-bootstrap-1.8.0-RC1.jar
-Dpinpoint.agentId=server1_agent
-Dpinpoint.applicationName=server1_app
ServletServer2 服务以:18082 端口启动, 启动附加 Pinpoint Agent 参数如下:
-javaagent:$PinpointAgentRoot/pinpoint-bootstrap-1.8.0-RC1.jar
-Dpinpoint.agentId=server2_agent
-Dpinpoint.applicationName=server2_app
3.到 logkit-pro 接入 Pinpoint Agent 收集的 tracing 数据
进入 logkit-pro 数据收集页面,点击 添加收集器 -> 日志收集。
3.1 配置数据源
选择数据源类型为从 socket 中读取 tracing 数据
,其中调用链数据类型选择 pinpoint
, 监听的地址和端口填udp://:9996
。
跳过数据解析与数据转换。
3.2 填写发送信息
选择发送到智能日志平台的链路追踪服务。
注意:
数据发送到智能日志平台全链路追踪服务会同时生成两个日志仓库 tracingspan
和 tracingservice
。tracingspan
仓库里只记录 tracing 数据, tracingservice
仓库里记录服务数据。
3.3 分发收集器到机器
确认添加收集器之后系统会提示您是否需要分发到当前机器,选择确认分发。
3.4 观察数据收集情况
进入数据收集页面,找到刚刚配置的收集器,点击查看机器运行信息查看收集器运行情况:
有读取成功和发送成功记录证明数据采集发送成功。
4.操作验证
浏览器中输入 http://127.0.0.1:18080/hello
,这是 ServletHello 服务的对外接口。浏览器响应如下图:
证明服务已经启动,接下来使用全链路追踪应用查看链路调用详情。
5.到全链路追踪服务查看链路详情
5.1到智能日志管理平台查看 tracing 数据:
选择 logkit Pro 发送数据时自动生成的 repo(tracingspan
),搜索 tracing 数据:
5.2 到全链路追踪服务查看链路之间的调用关系
根据服务名 hello_app
搜索出链路:
点击链路,查看全链路详细信息,如下图,显示的全链路调用关系与 2.1 节中描述的一致:
6.Pinpoint 可监控服务兼容性列表
Pinpoint Agent 请使用最新版本1.8.0
组件 | 版本 |
---|---|
JDK | 6+ |
Tomcat | 6/7/8 |
Jetty | 8/9 |
JBoss EAP | 6 |
Resin | 4 |
Websphere | 6/7/8 |
Vertx | 3.3/3.4/3.5 |
Spring | |
Spring Boot | |
Apache HTTP Client | 3.x/4.x |
JDK HttpConnector | |
GoogleHttpClient | |
OkHttpClient | |
NingAsyncHttpClient | |
Thrift Client | |
Thrift Service | |
DUBBO PROVIDER | |
DUBBO CONSUMER | |
kafka | 0.11+ |
ActiveMQ | |
RabbitMQ | |
MySQL | 5.x |
Oracle | |
MSSQL(jtds) | |
CUBRID | |
POSTGRESQL | |
MARIA | |
Arcus | |
Memcached | |
Redis | |
CASSANDRA | |
iBATIS | |
MyBatis | |
DBCP(2) | |
HIKARICP | |
gson | |
Jackson | |
Json Lib | |
log4j | |
Logback | 0.9.8+ |
详细兼容信息可参考 Pinpoint 官方文档。