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的信息:

    引用:

  • 相关阅读:
    HDU 1358 Period (KMP)
    POJ 1042 Gone Fishing
    Csharp,Javascript 获取显示器的大小的几种方式
    css text 自动换行的实现方法 Internet Explorer,Firefox,Opera,Safar
    Dynamic Fonts动态设置字体大小存入Cookie
    CSS Image Rollovers翻转效果Image Sprites图片精灵
    CSS three column layout
    css 自定义字体 Internet Explorer,Firefox,Opera,Safari
    颜色选择器 Color Picker,Internet Explorer,Firefox,Opera,Safar
    CSS TextShadow in Safari, Opera, Firefox and more
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/14517888.html
Copyright © 2011-2022 走看看