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. Python 学习笔记13 类 - 创建和简单使用

    介绍: 面向对象编程是一种非常有效的软件编写方法之一,在面向对象编程中,我们会编写表示现实世界中的事物或者情景的类,并基于类来创建对象. 在编写类的的时候,这些类对象一般都有通用的行为或者属性.基于类 ...

  2. poj3216 Prime Path(BFS)

    题目传送门  Prime Path The ministers of the cabinet were quite upset by the message from the Chief of Sec ...

  3. 别人整理的dp题目

    动态规划 动态规划 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 14 ...

  4. java中多种方式解析xml

    第一种:DOM.DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正 ...

  5. 源码包安装Mysql

    特殊原因我需要装在个人用户下 libtool-2.4.2.tar.xz mysql-5.1.37.tar.gz     1.解压libtool-2.4.2.tar.xz tar -xvf libtoo ...

  6. kubernetes容器集群部署Etcd集群

    安装etcd 二进制包下载地址:https://github.com/etcd-io/etcd/releases/tag/v3.2.12 [root@master ~]# GOOGLE_URL=htt ...

  7. js非布尔值的与(&&)与或(||)运算

    /** * 非布尔值的与(&&)与或(||)运算 * 1.先将其转换成布尔值再做运算,并且返回原值 * 2.与(&&)运算: * a.如果第一个值为true,则返回第二 ...

  8. shell函数的存储和显示

  9. for循环(C语言型)举例

  10. 第十二章 存储之 Secret

    1.Secret 存在意义 Secret 解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中.Secret 可以以 Volume 或者环境变量的 ...