https://naver.github.io/pinpoint/

https://github.com/naver/pinpoint

背景

  随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个APM工具帮我们监控各个服务的性能及对服务间的调用进行跟踪,而通过调研多个开源APM工具后,最终我们选择了pintpoint:

  •     pinpoint是基于java开发的,利于项目后期对源代码的修改
  •     集成pinpoint不需要修改一行代码
  •     pinpoint有非常直观的UI,符合项目的当前需求
  •     pinpoint的社区还是挺活跃,一般提问题第二天就有项目的committer回复

简介

  Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统。在使用上力图简单高效,通过在启动时安装agent,不需要修改哪怕一行代码,最小化性能损失(3%)。

  通过源码你也能发现,pinpoint包含3个主要的组件:

  • Collector, 收集应用中agent发送的数据并存储到Hbase中
  • Agent,  是和应用一起启动的和应用共享JVM,定时发送数据给Collector
  • Web UI, 从hbase中读取数据并展示给用户,之后会有demo展示其功能

支持的模块

  • JDK 6+
  •     Tomcat 6/7/8, Jetty 8/9
  •     Spring, Spring Boot
  •     Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
  •     Thrift Client, Thrift Service
  •     MySQL, Oracle, MSSQL, CUBRID, DBCP, POSTGRESQL
  •     Arcus, Memcached, Redis
  •     iBATIS, MyBatis
  •     gson, Jackson, Json Lib
  •     log4j, Logback

分布式追踪原理

  pinpoint的实现是基于Google Dapper论文,Google dapper提出了一个简单的解决方案来解决分布式追踪的问题。这个解决方案通过在发送消息时添加应用级别的标签作为消息之间的关联。例如,在HTTP请求中的HTTP header中为消息添加一个标签信息并使用这个标签跟踪消息。

  如下图所示,在微服务之间的一次请求过程,请求经过的每个节点时都会生成一组TxId,SpanId,pSpanId并发送到collector中,TxId体现了三次不同的RPC作为单个事务被相互关联,同时Pinpoint可以通过SpanId,pSpanId发现关联的n个Span,并将这n个span排列为继承树结构。

实战集成打包

    项目使用的是pinpoint 1.6.2, 官网已经有更新了,目前功能够用,不打算更新。

在打包之前你需要将jdk6,jdk7,jdk8在要打包的机器上装好,通过下面3个命令export出来,也不知道为什么打包这个需要装3个版本的jdk, 确实有点反人类。

  export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

  export JAVA_6_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

  export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

github中clone下来,打开agent/src/main/resourse-local/pinpoint.config,resource-release下的文件也是一样

profiler.collector.ip=collector部署的机器ip
        profiler.sampling.rate=10 ## 按照10%概率抽样

打开web/src/main/resources/hbase.properties, 修改hbase的连接地址:

  hbase.client.host=hbase地址
  hbase.client.port=hbase端口

打开collector/src/main/resources/hbase.properties, 修改hbase的连接地址:

  hbase.client.host=hbase地址
  hbase.client.port=hbase端口

在主目录下输入mvn package -DskipTests=true打包, 会生成下面3个重要的文件,留好它们后面需要用

  web/target/pinpoint-web-1.6.2.war

  collector/target/pinpoint-collector-1.6.2.war

  agent/target/pinpoint-agent-1.6.2.tar.gz

部署collector和web

        下载最新的tomcat,解压缩将上面的war包部署到webapps目录下,如下是部署的例子,其中

    portal部署文件: ROOT.war, 这个是由build打包过程中的web/target/pinpoint-web-1.6.2.war重命名而来    

      collector部署文件:collector.war这个是由build打包过程中的collector/target/pinpoint-collector-1.6.2.war重命名而来

  启动tomcat, 检查一下tomcat的log没有错误.

   访问tomcat的地址,如果部署正常,则能看见UI,只是目前没有数据部署agent

   由于项目是springboot开发,采用内嵌的tomcat容器,打成jar包后,启动的时候采用如下脚本:

   export APPLICATION_NAME=TEST

   tar xvf pinpoint-agent.tar.gz

  exec java -jar -Xms768m -Xmx768m -javaagent:./pinpoint-bootstrap-1.6.2.jar -Dspring.profiles.active=dev -Dpinpoint.agentId=myvm -Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar

  启动后再刷新一下web ui的界面,会发现已经有一个应用的数据显示的。

优缺点总结

优点:

  1.     使用字节码增强使得pinpoint不需要现有代码的修改,可以随时切换。
  2.     直观的图形化的界面,支持分布式的集群监控,能够对同一个服务不同instance同时记录。
  3.     提供报警机制,可以自由定制。
  4.     可开发插件定制需要的指标,例如rabbitmq插件。

缺点:

  1.  字节码增强技术让应用容易造成风险。如果问题发生在pinpoint中,它会影响应用。
  2.  文档目前比较少,社区还没有很活跃。

微服务-技术专区-链路追踪(pinpoint)-部署使用的更多相关文章

  1. 微服务-技术专区-监控专区(Skywalking与Pinpoint) - 监控对比分析

    由于公司目前有200多微服务,微服务之间的调用关系错综复杂,调用关系人工维护基本不可能实现,需要调研一套全链路追踪方案,初步调研之后选取了skywalking和pinpoint进行对比; 选取skyw ...

  2. SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么

    从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...

  3. 庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署

    庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署 一.简介      从今天开始,不出意外的话,以后所写的文章中所介绍项目的部署环境都应该会迁移到Linux环境上,而且是 ...

  4. 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius

    前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...

  5. 微服务技术栈简单介绍,Eureka和Ribbon的引入和使用

    一.了解微服务架构 1.微服务技术栈 整体框架 整体学习规划路线2.微服务与单体架构的区别 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优势 结构简单 部署成本低 缺点 耦合度高, ...

  6. 微服务技术栈:API网关中心,落地实现方案

    本文源码:GitHub·点这里 || GitEE·点这里 一.服务网关简介 1.外观模式 客户端与各个业务子系统的通信必须通过一个统一的外观对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用 ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  8. Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  9. Spring Cloud 微服务技术整合

    微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些 ...

随机推荐

  1. this.$router.push相关的vue-router的导航方法

    this.$router.push相关的vue-router的导航方法:https://blog.csdn.net/zeroyulong/article/details/80312750

  2. 多线性方程组迭代算法——Jacobi迭代算法的Python实现

    多线性方程(张量)组迭代算法的原理请看这里:若想看原理部分请留言,不方便公开分享 Gauss-Seidel迭代算法:多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现 impo ...

  3. fiddler抓取手机端的数据流量包

    1.首先下载安装fiddler 2.然后打开fiddler,进入到tools-->options-->connections 3.然后进入到https 4.设置完成后,查找本机ip 然后打 ...

  4. 获取年月日格式为yyyy-m-d简单写法

    方法:通过日期函数toLocaleString()获取.new Date().toLocaleString( );  //"2019/9/1 上午11:20:23" 获取年月日方法 ...

  5. go语言从例子开始之Example6.if/else

    if 和 else 分支结构在 Go 中当然是直接了当的了. package main import "fmt" func main() { 这里是一个基本的例子. if 7%2 ...

  6. Redis面试题大全含答案

    Redis面试题大全含答案 Redis面试题大全含答案 1.什么是Redis?答:Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写.支持网络.可基于内 ...

  7. java模式-----单例模式

    什么是单例设计模式? 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例.即一个类只有一个对象实例. 类结构 ...

  8. MySQL图形化管理工具之Navicat安装以及激活

    软件以及激活包下载地址 1. 安装navicat 双击navicat_trial_11.1.20.0.1449226634.exe,一路下一步安装(记住安装目录) 2. 激活 双击PatchNavic ...

  9. CF1061E Politics E. Politics 解题报告

    CF1061E Politics E. Politics 考虑利用树的性质,因为是子树问题,所以放到dfs序上. 只考虑一个树,问题是每个区间选恰好\(k\)个.因为区间其实是子树,所以区间要么包含, ...

  10. windows 下安装python 的requests模块

    下载地址:https://codeload.github.com/requests/requests/legacy.zip/master 下载好后解压,进入目录执行下面命令 在cmd下:python ...