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

什么是Pinpoint

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

服务器地图

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

部署

说下我的测试环境: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

Dubbo 整合 Pinpoint 做分布式服务请求跟踪相关推荐

  1. 配置中心、消息队列、分布式服务链路跟踪

    配置中心 配置中心定义 配置中心目的 配置中心选型 开源配置中心 选型对比 配置中心是AP模型? 比如将超时时间从100毫米修改为200毫米1秒后生效还是1分钟生效都没有关系无非是用户体验的问题 1秒 ...

  2. Netty游戏服务器实战开发(6):Netty整合Zookeeper实现分布式服务发现与注册

    1:Zookeeper基础 安装zookeeper.当然,很多时候我们会在Windows上开发,所以,我们需要在本地搭建一个zookeeper环境.方便开发过程中的测试. 首先我们去Apache上下载 ...

  3. 【JEECG Dubbo专题】Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)

    Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...

  4. 分布式服务治理框架Dubbo的前世今生及应用实战

    Dubbo的出现背景# Dubbo从开源到现在,已经出现了接近10年时间,在国内各大企业被广泛应用. 它到底有什么魔力值得大家去追捧呢?本篇文章给大家做一个详细的说明. 大规模服务化对于服务治理的要求 ...

  5. Spring Cloud构建微服务架构:分布式服务跟踪(抽样收集)【Dalston版】

    通过 TraceID和 SpanID已经实现了对分布式系统中的请求跟踪,而这些记录的跟踪信息最终会被分析系统收集起来,并用来实现对分布式系统的监控和分析功能,比如:预警延迟过长的请求链路.查询请求链路 ...

  6. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】

    在本节内容之前,我们已经对如何引入Sleuth跟踪信息和搭建Zipkin服务端分析跟踪延迟的过程做了详细的介绍,相信大家对于Sleuth和Zipkin已经有了一定的感性认识.接下来,我们介绍一下关于Z ...

  7. 利用Vert.x构建简单的API 服务、分布式服务

    目前已经使用Vertx已经一年多了,虽然没有太多的造诣,但也已在项目中推广了下:从最初的vertx搭建web服务,到项目上线运营,还算比较稳定.再到后来尝试搭建基于vertx的分布式服务,一路下来也积 ...

  8. springboot+mybatis+mysql+dubbo整合使用

    作为ssm的升级版框架springboot,在崇尚分布式,微服务的今天,越来越受到开发人员的喜爱和青睐,其优秀而简洁的配置,相比ssm的一大堆的xml配置文件,尤其在快速高效的敏捷开发节奏下,显得脱颖 ...

  9. SpringBoot+Dubbo整合

    说明: 由于此文章是博主2017年学习时写的文章,项目dubbo版本过低,新项目不应该继续采用此版本.阿里巴巴已经将dubbo重新维护并捐给Apache开源组织,新起了比较新版本的项目整合.学习整合的 ...

最新文章

  1. 服务器系统策略功能,设置服务器系统口令复杂度策略
  2. 怎样判断子进程已经结束 process.waitFor();的问题
  3. oracle 日期 extract,ORACLE——EXTRACT() 截取日期时间的函数使用
  4. iOS学习笔记---oc语言第八天
  5. reactjs组件实例三大属性之refs使用示例:字符串形式的ref、回调函数形式的ref、回调ref中回调执行次数的问题
  6. 硬件工程师面试经历2015---面试篇
  7. 回文树或者回文自动机,及相关例题
  8. php中改变函数路由,php – 如何修改codeigniter中的路由
  9. php 大流量网站访问
  10. winform等待窗口之最简单使用线程实现loading
  11. Air202学习(2)烧写底层固件
  12. mysql 1273错误
  13. 业内人士坦言——猎头公司做不大
  14. maple java,讲解:MACM 401、Maple worksheet、Java,Python、Java,c++SQL|
  15. 多种非接触卡 ATQA 字节说明
  16. 泰国ATM机被入侵致1200多万泰铢被盗,幕后黑客留疑团
  17. 【力扣刷题笔记】由简到难,模块突破, 你与AC只差一句提示
  18. 虚拟机环境搭建: virtualBox6.1+window10
  19. GBK解码报错-UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa1 in position 98: illegal multibyte seq
  20. 大数据常见应用场景及架构改进

热门文章

  1. 如何删除mac通用二进制文件
  2. 将不确定变为确定~Flag特性的枚举是否可以得到Description信息
  3. sharepoint 备份还原
  4. ib_logfile 在数据库中有何作用?
  5. 3.15好水指数N1能否让饮水健康不失控?
  6. 《Cacti实战》——第1章 认识Cacti
  7. BZOJ1042 [HAOI2008]硬币购物
  8. 如何设置 Linux 上 SSH 登录的 Email 提醒
  9. docker 数据共享,数据复制
  10. Java基础班学习笔记(13)IO流