文档章节

Dubbo 整合 Pinpoint 做分布式服务请求跟踪

字数 1586
阅读 1347
收藏 72

在使用Dubbo进行服务化或者整合应用后,假设某个服务后台日志显示有异常,这个服务又被多个应用调用的情况下,我们通常很难判断是哪个应用调用的,问题的起因是什么,因此我们需要一套分布式跟踪系统来快速定位问题,Pinpoint可以帮助我们快速定位问题(当然,解决方案也不止这一种)。

什么是Pinpoint

摘自Pinpoint学习笔记

https://skyao.gitbooks.io/learning-pinpoint

Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。 仿照Google Dapper,Pinpoint通过跟踪分布式应用之间的调用来提供解决方案,以帮助分析系统的总体结构和内部模块之间如何相互联系。

注:对于各个模块之间的通讯英文原文中用的是transaction一词,但是我觉得如果翻译为"事务"容易引起误解,所以替换为"交互"或者"调用"这种比较直白的字眼。

Pinpoint是一个分析大型分布式系统的平台,提供解决方案来处理海量跟踪数据。2012年七月开始开发,2015年1月9日作为开源项目启动。

服务器地图

ServerMap

通过可视化分布式系统的模块和他们之间的相互联系来理解系统拓扑。点击某个节点会展示这个模块的详情,比如它当前的状态和请求数量。

实时活动线程图表

Realtime Active Thread Chart

实时监控应用内部的活动线程。

请求/应答分布图表

Request/Response Scatter Chart

长期可视化请求数量和应答模式来定位潜在问题。通过在图表上拉拽可以选择请求查看更多的详细信息。

调用栈

CallStack

在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点。

巡查

Inspector

查看应用上的其他详细信息,比如CPU使用率,内存/垃圾回收,TPS,和JVM参数。

支持模块

  • 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(嵌入式Tomcat,Jetty)
  • Apache HTTP Client 3.x / 4.x,JDK HttpConnector,GoogleHttpClient,OkHttpClient,NingAsyncHttpClient
  • Thrift Client,Thrift Service,DUBBO PROVIDER,DUBBO CONSUMER
  • ActiveMQ,RabbitMQ
  • MySQL,Oracle,MSSQL,CUBRID,POSTGRESQL,MARIA
  • Arcus,Memcached,Redis,CASSANDRA
  • iBATIS,MyBatis
  • DBCP,DBCP2,HIKARICP
  • gson,Jackson,Json Lib
  • log4j,Logback

部署

本次基础环境搭建我就不讲了,如不会,请自行搜索或者参考我博客文章https://www.souyunku.com

  • 说下我的测试环境:hadoop-2.7.4 集群,hbase-1.3.1 集群,zookeeper-3.4.9 单机,一共四台机器
  • 为避免部分端口不通等可疑问题, 建议关闭防火墙

下载

进入GitHub 找到需要的版本:https://github.com/naver/pinpoint/releases

wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-agent-1.7.3.tar.gz
wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-collector-1.7.3.war
wget https://github.com/naver/pinpoint/releases/download/1.7.3/pinpoint-web-1.7.3.war

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.5/hbase-1.4.5-bin.tar.gz

准备环境

  1. 配置 JDK 环境 (笔者使用 Oracle 1.8, openJdk 可以)
  2. 搭建 Zookeeper 环境
  3. 搭建 Hbase (单节点即可)
  4. 在 Hbase/bin 下执行 ./hbase shell hbase-create.hbase 创建相关存储结构
  5. 准备 Tomcat 环境
  6. 准备可分布式部署的项目用于测试

修改 Pinpoint

pinpoint-collector-1.7.3.war

修改 WEB-INF\classes\hbase.properties 文件
hbase.client.host 设置为 hbase 所用的 zk 地址

修改 WEB-INF\classes\pinpoint-collector.properties 文件
cluster.zookeeper.address 修改为给 Pinpoint 准备的 zk 地址

pinpoint-web-1.7.3.war

修改 WEB-INF\classes\hbase.properties 文件
hbase.client.host 设置为 hbase 所用的 zk 地址

修改 WEB-INF\classes\pinpoint-web.properties 文件
cluster.zookeeper.address 修改为给 Pinpoint 准备的 zk 地址

部署 collector 和 web

  1. 将准备好的 tomcat 中 webapps 目录清空
  2. 将上一步修好的两个 war 包放置到 webapps
  3. 将 pinpoint-web-1.7.3.war 修改为 ROOT.war
  4. 将 pinpoint-collector-1.7.3.war 修改为 collector.war
  5. 启动 Tomcat

查看 tomcat/logs 下的日志, 注意观察有没有连接不到 2181 端口的日志, 如果有, 可能是 war 中的配置没有修改正确, 建议清空 tomcat 下 work、temp 文件夹后重试

部署 agent

  • 安装agent,不需要修改哪怕一行代码
  • Pinpoint对性能的影响最小(资源使用量增加约3%)
  1. 将 pinpoint-agent-1.7.3.tar.gz 解压,
  2. 把 pinpoint.config 文件中 profiler.collector.ip 属性值修改为部署 collector 机器的主机名或 IP

注意: 每个项目所在的服务器都需要部署 agent

准备Dubbo示例程序

我的测试项目:https://github.com/souyunku/spring-boot-examples/tree/master/spring-boot-dubbo

配置 application.properties,修改地址 zookeeper.connect=127.0.0.1:2181 为自己的zk

mvn clean package

修改自己项目的启动参数

需要添加三个启动参数

-javaagent: 指向 agent 目录下的 pinpoint-bootstrap-1.7.3.jar
-Dpinpoint.agentId:设置全局唯一标示 ID
-Dpinpoint.applicationName: 设置项目的名称(如果同一项目部署两台实例,这两台的参数应该一致)

Tomcat 和 Jar 项目有不同的添加方式,可参考如下方式修改

Tomcat

找到 bin/catalina.sh 添加下面的代码

CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-1.7.3.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=tomcat1"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=webcontroller"

SpringBoot

# DUBBO 提供者
java -javaagent:/opt/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=dubbo-provider-1 -Dpinpoint.applicationName=dubbo-provider -jar dubbo-provider-1.0-SNAPSHOT.jar

# DUBBO 消费者
java -javaagent:/opt/pinpoint-bootstrap-1.7.3.jar -Dpinpoint.agentId=dubbo-consumer-1 -Dpinpoint.applicationName=dubbo-consumer -jar dubbo-consumer-1.0-SNAPSHOT.jar

在自己的项目添加完毕启动后,即可登录 web 后台查看集群的状态, 跟踪请求

测试

访问消费方地址模拟用户请求

http://localhost:8080/sayHello?name=souyunku

截图

首页

指定时间点的,选中区域的请求明细

请求响应明细和系统拓扑

视图中定位瓶颈和失败点

消费者机器的, CPU使用率,内存/垃圾回收,TPS,和JVM参数

参考:

https://segmentfault.com/a/1190000011290541

http://dubbo.apache.org/#!/blog/pinpoint.md?lang=en-us

Contact

关注公众号-搜云库

© 著作权归作者所有

共有 人打赏支持
关注公众号_搜云库_每天更新
粉丝 109
博文 68
码字总数 227639
作品 1
朝阳
后端工程师
加载中

评论(2)

大哈ha
大哈ha
zipkin 怎么看 ?
铂金大雕
铂金大雕
pp是个好东西
应用监控利器:Pinpoint 全链路监控部署实践

一、Pinpoint 是什么 Pinpoint 是一款全链路分析工具,提供了无侵入式的调用链监控、方法执行详情查看、应用状态信息监控等功能。基于Google Dapper论文进行的实现。 核心思想就是在服务各节...

技术小能手
08/01
0
0
各大厂分布式链路跟踪系统架构对比

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布...

james8888
04/19
0
0
Pinpoint技术概述

Pinpoint是一个分析大型分布式系统的平台,提供解决方案来处理海量跟踪数据。2012年七月开始开发,2015年1月9日作为开源项目启动。 本文将介绍Pinpoint: 什么促使我们开始搭建它, 用了什么...

super_yu
2016/11/17
600
0
几种分布式调用链监控组件的实践与比较(一)实践

引言:最近在调研与选型分布式调用链监控组件。选了主要的三种APM组件进行了实践与比较。本来打算一篇文章写完的,篇幅太长,打算分两篇。本文主要讲下链路traceing的基本概念和几种APM组件的...

aoho
2017/11/10
0
0
分布式跟踪工具Pinpoint初探

前言 由于工作需要,前段时间抽口研究了一下APM相关技术。 大的互联网公司都有自己的分布式跟踪系统,比如Google的Dapper,Twitter的zipkin,淘宝的鹰眼,新浪的Watchman,京东的Hydra等,当...

小柒2012
05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

移除或自定义 WordPress 仪表盘欢迎面板

第一次登录 WordPress 后台仪表盘页面,默认都会显示 WordPress 的欢迎面板: 如果我们要移除这个面板,在主题的 functions.php 中添加下面的代码即可: 12 //移除 WordPress 仪表盘欢迎面...

james_laughing
12分钟前
0
0
HashMap实现原理及源码分析

HashMap实现原理及源码分析   哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,...

DemonsI
15分钟前
0
0
eggjs学习笔记

快速初始化 生成项目(要求最低的node版本8.x) npm i egg-init -gegg-init egg-example --type=simplecd egg-examplenpm i 启动项目 npm run dev 配置 环境配置会覆盖默认配置 config...

别人说我名字很长
18分钟前
1
0
Winform Timer控件时间间隔

sender as System.Timers.Timer).Interval = 23 * 60 * 60 * 1000.0;//将时间间隔改为23小时,23小时后重新发生timer_Elapsed事件。 //60000:时间间隔1分钟,300000:时间间隔5分钟,600000:...

笑丶笑
19分钟前
0
0
在win10系统下怎样快速切换任务视图

切换窗口:Alt + Tab 任务视图:Win + Tab (松开键盘界面不会消失) 切换任务视图:Win + Ctrl +左/右 创建新的虚拟桌面:Win + Ctrl + D 关闭当前虚拟桌面:Win + Ctrl + F4...

SummerGao
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部