zoukankan      html  css  js  c++  java
  • 分布式服务调用链路追踪——Pinpoint

    1. Pinpoint架构

    官网地址:https://github.com/pinpoint-apm/pinpoint

    从下图来看,Pinpoint主要分成几个部分:

    • Agent,负责从应用服务端收集数据,上传到collector;
    • Collector,负责接收Agent上传的数据,并存储到Hbase中;
    • Web,负责展示性能监控数据;
    • Hbase,负责存储性能监控数据;

    2. 支持模块

    到pinpoint的github官方地址查看支持的模块:

    3. 版本兼容矩阵

    从这里来看,collector和web目前仍然只支持JDK8,而Agent最高已经可以支持JDK14:

    Hbase建议使用1.2.x或者1.4.x版本:

    4. 安装Hbase

    版本:

    • HBase-2.0.0

    Hbase支持集群或者单机部署,集群部署比较麻烦点,需要先部署zookeeper和hadoop集群,这也是很多人觉得 pinpoint的存储过于笨重的原因,

    但是其实我们可以采用单机部署,就可以简单很多,因为普通压力下, APM的监控数据,并不需要这么强大的存储负载均衡能力。如需安装集群HBase,请参考我的HBase集群安装部署文章。

    下载地址:https://archive.apache.org/dist/hbase/

    解压 tar
    -xvzf hbase-2.0.0-bin.tar.gz 修改conf下的hbase-site.xml文件,指定数据的存储位置。 添加 <configuration> <property> <name>hbase.rootdir</name> <value>file:///data/pinpoint/hbase</value> </property> </configuration> 修改conf下的hbase-env.sh文件 添加jdk,并且使用hbase自带的zk: export JAVA_HOME=/usr/local/java/jdk1.8.0_191 export HBASE_MANAGES_ZK=true 启动 ./bin/start-hbase.sh

    启动hbase后,访问ip:16010/master-status后观察Master和Region server是否显示的是主机名即可。

    初始化HBase表:

      Hbase安装完毕后,我们先把pinpoint需要的hbase表创建出来,通过执行如下命令创建:

    创建Hbase Schemas ,下载文件到hbase shell执行
    https://github.com/pinpoint-apm/pinpoint/blob/master/hbase/scripts/hbase-create.hbase
    bin/hbase shell hbase-create.hbase
    
    注意:pinpoint默认的TTL存储策略是存储一年的,如果pinpoint监控的系统请求量是很大的,那么需要注意pinpoint所在服务器的存储空间是否够用。
    解决方案:修改上述hbase建表脚本中的TTL值,比如:
    create 'AgentInfo', { NAME => 'Info', TTL => 31536000(改为604800,存储7天), DATA_BLOCK_ENCODING => 'PREFIX' }

    一共是15张表。至此hbase就搭建完成了。

    5. 编译Pinpoint

    版本:

    • JDK-1.6、JDK-1.7、JDK-1.8、JDK1.9
    • Pinpoint-2.2.2

    问题现像:如果使用了hbase2.X作为Pinpoint的数据存储,那么就会遇到搭建完毕之后,web上的数据有一些异常,特别是首页上看不到应用的server map特别明显,且右边的Response Summary也不显示请求统计。

    解决方案:需要自己编译源码,替换掉Pinpoint默认带的hbase client 1.X版本,变成2.X才可以。

    解决方法:

    1. 因为打包的时候要依赖java1.6(建议使用1.6.0_45)、java1.7(建议使用1.7.0_80)、java1.8(建议使用jdk1.8.0_191)、java1.9(建议使用9.0.4)环境,所以这几个版本的java都需要安装及配置环境变量;
    2. 安装及配置maven,版本这里建议使用3.5.x版本(本文使用3.5.4),使用3.6.1版本编译会报错;
    3. JAVA_HOME=/home/software/java/jdk1.8.0_191
      PATH=$JAVA_HOME/bin:$PATH
      CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      export JAVA_HOME
      export PATH
      export CLASSPATH
      
      export JAVA_6_HOME=/home/software/java/jdk1.6.0_45
      export JAVA_7_HOME=/home/software/java/jdk1.7.0_80
      export JAVA_8_HOME=/home/software/java/jdk1.8.0_191
      export JAVA_9_HOME=/home/software/java/jdk-9.0.4
      
      export MAVEN_HOME=/usr/local/apache-maven-3.5.4
      export PATH=${MAVEN_HOME}/bin:${PATH}
    4. 官网github下载pinpoint-2.2.2.tar.gz并解压;
    5. 修改源码中的pom.xml,把hbase.shaded.client.version值改成hbase的版本2.0.0
    6. 进入源码的根目录,执行以下命令进行编译:

    7. ./mvnw clean install -P hbase2,release -DskipTests=true
    8. 编译成功后,进入源码的以下目录,获取相关包:
    9. ../pinpoint-2.2.2/collector/target/deploy/pinpoint-collector-boot-2.2.2.jar 收集端包
      ../pinpoint-2.2.2/web/target/deploy/pinpoint-web-boot-2.2.2.jar 页面包
      ../pinpoint-2.2.2/agent/target/pinpoint-agent-2.2.2.tar.gz 探针包
      ../pinpoint-2.2.2/hbase/scripts/hbase-create.hbase 建表文件
    10. 检查collector和web包下的hbase版本是否正确:

    6. 部署Pinpoint-collector

    启动:nohup java -Dpinpoint.zookeeper.address=172.16.10.73:2181,172.16.10.76:2181,172.16.10.78:2181 -jar /home/software/pinpoint-hbase2/pinpoint-collector-boot-2.2.2.jar >./pinpoint-collector.log 2>&1 &
    
    机器有启用防火墙的,注意放开:TCP 9991~9994端口,UDP 9995~9996端口

    7. 部署Pinpoint-web

    启动:nohup java -Dserver.port=8088 -Dpinpoint.zookeeper.address=172.16.10.73:2181,172.16.10.76:2181,172.16.10.78:2181 -jar /home/software/pinpoint-hbase2/pinpoint-web-boot-2.2.2.jar >./pinpoint-web.log 2>&1 &
    其他同上
    
    访问端口:
    http://172.16.208.79:8088/

    8. 程序接入Pinpoint

    上传pinpoint-agent-2.0.1.tar.gz 包到服务器任意目录,解压:

    tar -zxvf pinpoint-agent-2.2.2.tar.gz 
    • 1. 修改配置

    修改文件/profiles/release/pinpoint.config,将collector的ip配置为监控收集服务pinpoint-collector的IP:

    • 2. 修改采集比例

    默认只有5%,如果没有改,会感觉好像采集不到监控数据:

    • 3. 应用日志中输出transaction-id

    修改agent/pinpoint.config

    profiler.logback.logging.transactioninfo=true

    logback通过%X{PtxId}输出TransactionId%X{PspanId}输出SpanId

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
       <charset>UTF-8</charset>
       <layout class="ch.qos.logback.classic.PatternLayout">
          <pattern>
               %black(%d{ISO8601}) [%X{PtxId},%X{PspanId}] %highlight(${LOG_LEVEL_PATTERN:-%5p}) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
          </pattern>
      </layout>
    </encoder>

    • 4. 应用集成pinpoint-agent

    JAR file:

    在启动你的应用程序的命令行中添加 -javaagent 参数. 并确保在-jar参数之前添加它。

    -javaagent:/home/perf/pinpoint/pinpoint-bootstrap-2.2.2.jar -Dpinpoint.agentId=serviceName -Dpinpoint.applicationName=applicationName

    Tomcat:

    修改 tomcat/bin/catalina.sh,在首行加入如下信息:

    CATALINA_OPTS="$CATALINA_OPTS -javaagent:${pinpointPath}/pinpoint-bootstrap-2.2.2jar"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=masl01"
    CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=masl"

    参数说明:

      • -javaagent::指定PinPoint代理;
      • -Dpinpoint.agentId=:必须全局唯一,代表一个服务、应用实例,建议用hostname,部署多个jvm的话加前缀;
      • -Dpinpoint.applicationName=:指定服务、应用名称。相同服务部署不同实例,applicationName相同,agentId不同;

    Idea: 

    -javaagent:D:softpinpoint-hbase2pinpoint-agent-2.2.2-maslpinpoint-bootstrap-2.2.2.jar -Dpinpoint.agentId=localmasl -Dpinpoint.applicationName=masl -Dspring.profiles.active=release

    9. 验证测试

    访问相关业务请求,然后刷新Pinpoint,主界面如下图所示:

    应用、中间件、DB之间的调用关系链路清晰:

    jvm、cpu、gc信息简单明了:

    10. 其它

    Hbase修改TTL存储策略

    {hbase_home}/bin/hbase shell  --进入shell命令行
    
    desc 'AgentInfo'
    修改1天后过期
    disable 'AgentInfo'
    alter 'AgentInfo',NAME=>'Info',TTL=>'43200'
    enable 'AgentInfo'
    
    desc 'AgentStatV2'
    修改1天后过期
    disable 'AgentStatV2'
    alter 'AgentStatV2',NAME=>'S',TTL=>'86400'
    enable 'AgentStatV2'

    Hbase删除或者刷新表

    # 创建表
    https://github.com/pinpoint-apm/pinpoint/blob/master/hbase/scripts/hbase-create.hbase
    {hbase_home}/bin/hbase shell hbase-create.hbase
    
    # 删除表
    https://github.com/pinpoint-apm/pinpoint/blob/master/hbase/scripts/hbase-drop.hbase
    {hbase_home}/bin/hbase shell hbase-drop.hbase
    
    # 刷新表(清空数据)
    https://github.com/pinpoint-apm/pinpoint/blob/master/hbase/scripts/hbase-flush-table.hbase
    {hbase_home}/bin/hbase shell hbase-flush-table.hbase

    11. 功能介绍

    图片标注注释:

    1. 项目名称(可以上下拉动选择不同项目)
    2. 入站和出站(可以根据不同出入数生成不同的map图)
    3. 时间选择,左至右顺序,日历,5秒,20秒,1小时,3小时,6小时,12小时,1天,2天
    4. 根据2生成的链路图,相关联的程序之间的走向
    5. 动态实时走势图,一个请求算是一个点,红点是请求失败,y轴表示请求时间
    6. 程序资源使用情况,包括使用的cpu,内存,mysql的并发等。
    7. 根据请求时间对数量进行统计(一段时间内,请求耗时1秒钟的数量,3秒钟的数量,5秒钟的数量,慢请求,错误)
    8. 一段时间的请求使用柱状图展示,下面的颜色进行区分

    特别注意事项5:

    上图5中是请求的url统计,可以使用鼠标右键选择部分请求,松开鼠标跳到下面这个页面

    标注注释:

    1、是请求的url,所在服务器的IP,pinpoint客户端定义的server名称以及时间。  如果有错误的请求,在Exception栏有一个pinpoint使用说明标志

    2、是请求的url的相信信息,请求调用的函数,函数中查询的数据库语句,在这里有几个关键词,分别是Gap(ms),Exec(ms),Exec(ms),self(ms),看一下这几个关键词的意思:

    Gap -- Elapsed time between the start of the previous method and the entry of this method(从上一个方法的开始到该方法的输入之间经过的时间)

    Exec -- Duration of the method call from entry to exit(方法调用从入口到出口的持续时间)

    Exec(%) --  ⬤   The execution time of the method call as a percentage of the total execution time of the transaction(方法调用的执行时间占事务总执行时间的百分比)

    –-   ⬤    A percentage of the self execution time(自执行时间的百分比)

    Self -- Duration of the method call from entry to exit, excluding time consumed in nested methods call(方法调用从入口到出口的持续时间,不包括嵌套方法调用中消耗的时间)

    特别注意事项6

    在首页的标注6里有两个选项,分别是VIEW SERVERS和Inspector。VIEW SERVERS展示的是在一个项目中运行在两台服务器上处理的请求对比。

    如上图,在Servers List中有两台服务器运行同一个服务,pinpoint使用agent_id用来区分,服务共接收到18个请求,分别在26237和5635上各处理了9个请求,这就是负载均衡。

    Inspector展示的就相对比较多了,不但有服务的信息,还有服务所耗时的CPU,Memory,以及连接mysql的信息等,如下图:

    这里展示的是服务的信息,和服务所消耗的资源信息。下面看一下mysql的信息:

    引用:

  • 相关阅读:
    【流程图绘制】+Visual Paradigm+各种常用流程图绘制
    【数据库】+visual paradigm+设计ER数据库模型
    【Java】+正则
    【前端】
    【selenium】+java+谷歌+实现UI自动化
    【前端】+前、后端通过json接口建立连接
    【Java】+前、后端通过json接口建立连接
    【前端】+可视化布局工具
    【jmeter】+Not able to find Java executable or version. Please check your Java installation
    【Git】+常用命令大全
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/14517888.html
Copyright © 2011-2022 走看看