官网地址:https://github.com/pinpoint-apm/pinpoint
从下图来看,Pinpoint主要分成几个部分:
Agent,负责从应用服务端收集数据,上传到collector;
Collector,负责接收Agent上传的数据,并存储到Hbase中;
Web,负责展示性能监控数据;
Hbase,负责存储性能监控数据;
到pinpoint的github官方地址查看支持的模块:
从这里来看,collector和web目前仍然只支持JDK8,而Agent最高已经可以支持JDK14:
Hbase建议使用1.2.x或者1.4.x版本:
版本:
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就搭建完成了。
版本:
问题现像:如果使用了hbase2.X作为Pinpoint的数据存储,那么就会遇到搭建完毕之后,web上的数据有一些异常,特别是首页上看不到应用的server map特别明显,且右边的Response Summary也不显示请求统计。
解决方案:需要自己编译源码,替换掉Pinpoint默认带的hbase client 1.X版本,变成2.X才可以。
解决方法:
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}
进入源码的根目录,执行以下命令进行编译:
./mvnw clean install -P hbase2,release -DskipTests=true
../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 建表文件
启动: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端口
启动: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/
上传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:\soft\pinpoint-hbase2\pinpoint-agent-2.2.2-masl\pinpoint-bootstrap-2.2.2.jar -Dpinpoint.agentId=localmasl -Dpinpoint.applicationName=masl -Dspring.profiles.active=release
访问相关业务请求,然后刷新Pinpoint,主界面如下图所示:
应用、中间件、DB之间的调用关系链路清晰:
jvm、cpu、gc信息简单明了:
{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‘
# 创建表 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
上图5中是请求的url统计,可以使用鼠标右键选择部分请求,松开鼠标跳到下面这个页面
标注注释:
1、是请求的url,所在服务器的IP,pinpoint客户端定义的server名称以及时间。 如果有错误的请求,在Exception栏有一个标志
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里有两个选项,分别是VIEW SERVERS和Inspector。VIEW SERVERS展示的是在一个项目中运行在两台服务器上处理的请求对比。
如上图,在Servers List中有两台服务器运行同一个服务,pinpoint使用agent_id用来区分,服务共接收到18个请求,分别在26237和5635上各处理了9个请求,这就是负载均衡。
Inspector展示的就相对比较多了,不但有服务的信息,还有服务所耗时的CPU,Memory,以及连接mysql的信息等,如下图:
这里展示的是服务的信息,和服务所消耗的资源信息。下面看一下mysql的信息:
引用:
原文:https://www.cnblogs.com/caoweixiong/p/14517888.html