详解Java中的pinpoint1.8.5安装及使用指南

pinpoint1.8.5安装及使用指南

简介

pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的。

各大APM工具,几乎都是根据google这篇经典的Dapper论文而来,一定要读一读。这里是它的源文地址:https://research.google.com/pubs/pub36356.html,感谢这位同学的翻译:http://bigbully.github.io/Dapper-translation/

pinpoint提供了一些功能:

服务映射:通过可视化其组件如何互连来了解任何分布式系统的关联关系。单击节点可显示有关组件的详细信息,例如其当前状态和事务计数。

实时的活跃线程数

请求/响应散点图

调用栈

查看有关应用程序的其他详细信息,例如CPU使用率,内存/垃圾收集,TPS和JVM参数

整个pinpoint架构分为3部分:pinpoint-collector、pinpoint-agent、pinpoint-webUI。

pinpoint-agent:用来收集单个应用的信息,并将收集好的应用信息发送到pinpoint-collector中
pinpoint-collector:用来处理pinpoint-agent发送过来的信息,并将信息收集好之后存储到HBase中
pinpoint-webUI:查找出HBase中的数据并展示

所以我这里需要准备两台机器:

10.200.201.xxx:用于安装pinpoint-collector、pinpoint-webUI、HBase
10.200.201.yyy:用于安装pinpoint-agent,负责收集应用的信息

环境安装

安装jdk

我这里用的是rpm包直接安装的:rpm -ivh jdk-8u171-linux-x64.rpm

安装好后配置一下JAVA_HOME:

使用vim配置一下环境变量:

vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_45
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

然后加载一些profile文件:

source /etc/profile

安装HBase

这里有个对照图:

由上面我们可以看到HBase我们需要安装1.2.x版本的

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

我这里下载的是1.2.12版本的。

将Hbse放到指定目录

cd /app/install
tar -zxvf hbase-1.2.12-bin.tar.gz

修改配置信息

修改hbase-env.sh

vim /app/install/hbase-1.2.12/conf/hbase-env.sh

#加入JAVA_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_45

修改hbase-site.xml

vim /app/install/hbase-1.2.12/conf/hbase-site.xml

<configuration>
  <property>
   <name>hbase.rootdir</name>
   <value>file:///app/data/hbase</value>
  </property>
  <property>
   <name>hbase.zookeeper.property.dataDir</name>
   <value>/app/data/zookeeper</value>
  </property>
  <property>
   <name>hbase.zookeeper.property.clientPort</name>
   <value>2181</value>
   <description>Property from ZooKeeper'sconfig zoo.cfg. The port at which the clients will connect.
   </description>
  </property>
  <!-- false是单机模式,true是分布式模式 -->
  <property>
   <name>hbase.cluster.distributed</name>
   <value>false</value>
  </property>
</configuration>

启动HBase

cd /app/install/hbase-1.2.12/bin
./start-hbase.sh

# 查看Hbase是否启动成功,如果启动成功的会看到"HMaster"的进程
[root@localhost bin]# jps
12075 Jps
11784 HMaster

初始化pinpoint库

下载脚本:https://github.com/naver/pinpoint/blob/master/hbase/scripts/hbase-create.hbase

#进入到hbase的bin目录中
cd /app/install/hbase-1.2.12/bin
#执行脚本
./bin/hbase shell /app/install/pinpoint/hbase/scripts/hbase-create.hbase

# 执行完了以后,进入Hbase
./hbase shell

#进入后可以看到Hbase的版本,还有一些相关的信息
2019-10-12 16:18:28,074 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.12, r91d5ec4c4dcd10ceec984c6e663ea82acf353995, Sat Apr 6 15:27:28 CDT 2019

# 输入"status 'detailed'"可以查看刚才初始化的表,是否存在
hbase(main):002:0> status 'detailed'

也可以登录web,来查看HBase的数据是否初始化成功

http://10.200.201.xxx:16010/master-status

安装pinpoint-collector

制作一个tomcat容器,端口号为8081

#将pinpoint-collector的war包丢到Tomcat的webapps目录下
cp pinpoint-collector-1.8.5.war ../apache-tomcat-8081/webapps/
#将war包名字改一下
mv pinpoint-web-1.8.5.war pp-collector.war
#启动tomcat
./bin/startup.sh
# 查看日志,是否成功启动
tail -f ../logs/catalina.out
#如果hbase安装在别的机器下需要修改一下配置
cd /app/install/apache-tomcat-8081
vim webapps/pp-collector/WEB-INF/classes/hbase.properties
#修改hbase的ip和hbase所对应的端口号
hbase.client.host=10.200.201.xxx
hbase.client.port=2181

安装pinpoint-web

解压一个tomcat容器,端口号为8080

#将pinpoint-web放到tomcat的webapps容器中
cp pinpoint-web-1.8.5.war ../apache-tomcat-8080/webapps/
#修改一下war包名
mv pinpoint-web-1.8.5.war pp-web.war
#启动tomcat
./bin/startup.sh
# 查看日志,是否成功启动
tail -f ../logs/catalina.out
#如果hbase安装在别的机器下需要修改一下配置
cd /app/install/apache-tomcat-8080
vim webapps/pp-web/WEB-INF/classes/hbase.properties
#修改hbase的ip和hbase所对应的端口号
hbase.client.host=10.200.201.xxx
hbase.client.port=2181

然后可以在浏览器中:http://10.200.201.xxx:8080/pp-web/

部署pinpoint-agent采集监控数据

传入pinpoint-agent包

首先将pinpoint-agent-1.8.5.tar.gz传入到服务器10.200.201.yyy的/app/install/pinpoint-agent/中

然后执行tar -zxvf pinpoint-agent-1.8.5.tar.gz解压

配置pp-agent采集器

cd /app/install/pinpoint-agent
vim pinpoint.config
# 主要修改IP,只需要指定到安装pp-col的IP就行了,安装pp-col启动后,自动就开启了9994,9995,9996的端口了。这里就不需要操心了,如果有端口需求,要去pp-col的配置文件("pp-collector/webapps/ROOT/WEB-INF/classes/pinpoint-collector.properties")中,修改这些端口
profiler.collector.ip=10.200.201.xxx
如果监控的是tomcat
# 修改测试项目下的tomcat启动文件"catalina.sh",修改这个只要是为了监控测试环境的Tomcat,增加探针
vi catalina.sh
# 第一行是pp-agent的jar包位置
# 第二行是agent的ID,这个ID是唯一的,我是用pp + 今天的日期命名的,只要与其他的项目的ID不重复就好了
# 第三行是采集项目的名字,这个名字可以随便取,只要各个项目不重复就好了
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=$AGENT_ID"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
# 配置好了。就可以开始监控了,我们启动测试用的Tomcat的服务器
cd /data/pp-test/bin/
./startup.sh
# 查看启动日志,确实Tomcat启动
tail -f ../logs/catalina.out

springboot包部署

如果是jar包部署,直接在启动命令加启动参数:

nohup java -javaagent:/app/install/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=$AGENT_ID -Dpinpoint.applicationName=$APPLICATION_NAME

功能设置

设置监控

如果按照上面的方法安装完了之后在进行监控设置的或者用户设置的时候会报错的:

所以需要配置一下mysql:

首先需要跑两个sql脚本:

https://github.com/naver/pinpoint/blob/master/web/src/main/resources/sql/CreateTableStatement-mysql.sql
https://github.com/naver/pinpoint/blob/master/web/src/main/resources/sql/SpringBatchJobRepositorySchema-mysql.sql

然后进入到pinpoint-web的war所在的tomcat的容器中,修改配置文件:WEB-INF/classes/jdbc.properties

并设值mysql的账号密码

jdbc.url=jdbc:mysql://localhost:13306/pinpoint?characterEncoding=UTF-8
jdbc.username=admin
jdbc.password=admin

我们可以在application里面给不同的应用设置不同的提醒规则,具体的提醒规则如下:

SLOW COUNT:发送到应用程序的慢速请求数超过配置的阈值时触发

SLOW RATE
   发送到应用程序的慢速请求的百分比(%)超过配置的阈值时触发

ERROR COUNT
   发送到应用程序的失败请求数超过配置的阈值时触发。

ERROR RATE
   发送到应用程序的失败请求的百分比(%)超过配置的阈值时触发。

TOTAL COUNT
   发送到应用程序的所有请求数超过配置的阈值时触发。

SLOW COUNT TO CALLEE
   当应用程序发送的慢速请求数超过配置的阈值时触发。 您必须在配置UI的“注释...”框中指定域或地址(IP,端口)   
     例如)www.naver.com,127.0.0.1:8080

SLOW RATE TO CALLEE
   当应用程序发送的慢速请求的百分比(%)超过配置的阈值时触发。 您必须在配置UI的“注释...”框中指定域或地址(IP,端口)
   ex) www.naver.com, 127.0.0.1:8080

ERROR COUNT TO CALLEE
   当应用程序发送的失败请求数超过配置的阈值时触发。 您必须在配置UI的“注释...”框中指定域或地址(IP,端口)
   ex) www.naver.com, 127.0.0.1:8080

ERROR RATE TO CALLEE
   当应用程序发送的失败请求的百分比(%)超过配置的阈值时触发。 您必须在配置UI的“注释...”框中指定域或地址(IP,端口)
   ex) www.naver.com, 127.0.0.1:8080

TOTAL COUNT TO CALLEE
   当应用程序发送的所有请求数超过配置的阈值时触发。 您必须在配置UI的“注释...”框中指定域或地址(IP,端口)
   ex) www.naver.com, 127.0.0.1:8080

HEAP USAGE RATE
   当应用程序的堆使用率(%)超过配置的阈值时触发。

JVM CPU USAGE RATE
   当应用程序的CPU使用率(%)超过配置的阈值时触发。

SYSTEM CPU USAGE RATE
   当应用程序的CPU使用率(%)超过配置的阈值时发送警报。

DATASOURCE CONNECTION USAGE RATE
   当应用程序的数据源连接使用率(%)超过配置的阈值时触发。
  
FILE DESCRIPTOR COUNT
   当打开的文件描述符的数量超过配置的阈值时,发送警报。
然后需要在webapps/pp-web/WEB-INF/classes/batch.properties里面配置一下邮件服务器的信息:

pinpoint.url= #pinpoint-web server url
alarm.mail.server.url= #smtp server address
alarm.mail.server.port= #smtp server port
alarm.mail.server.username= #username for smtp server authentication
alarm.mail.server.password= #password for smtp server authentication
alarm.mail.sender.address= #sender's email address

#例如
pinpoint.url=http://pinpoint.com
alarm.mail.server.url=stmp.server.com
alarm.mail.server.port=583
alarm.mail.server.username=pinpoint
alarm.mail.server.password=pinpoint
alarm.mail.sender.address=pinpoint_operator@pinpoint.com

总结

以上所述是小编给大家介绍的pinpoint1.8.5安装及使用指南,希望对大家有所帮助!

(0)

相关推荐

  • Docker构建pinpoint部署的方法

    Pinpoint 1. Install pinpoint-server 下载镜像 docker pull yous/pinpoint 查看镜像 docker images 启动容器 docker run -d --name=pinpoint -p 28080-28082:28080-28082 --cap-add SYS_PTRACE yous/pinpoint docker run -i -t --name=pinpoint -p 28080-28082:28080-28082 --cap-a

  • 详解Java中的pinpoint1.8.5安装及使用指南

    pinpoint1.8.5安装及使用指南 简介 pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控.它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的. 各大APM工具,几乎都是根据google这篇经典的Dapper论文而来,一定要读一读.这里是它的源文地址:https://research.google.com/pubs/pub36356.html,感谢这位同学的翻译:http://bigbully.github.i

  • 详解Java中@Override的作用

    详解Java中@Override的作用 @Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读: 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法. 举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性. @Overr

  • 详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口的LayerInitTask类,ThreadException类,线程安全的Vector 3.思路: 向LayerInitTask中传入Vector,记录异常情况,外部遍历,判断,抛出异常. 4.代码: package step5.exception; import java.util.Vector

  • 详解java 中Spring jsonp 跨域请求的实例

    详解java 中Spring jsonp 跨域请求的实例 jsonp介绍 JSONP(JSON with Padding)是JSON的一种"使用模式",可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSO

  • 详解Java 中的嵌套类与内部类

    详解Java 中的嵌套类与内部类 在Java中,可以在一个类内部定义另一个类,这种类称为嵌套类(nested class).嵌套类有两种类型:静态嵌套类和非静态嵌套类.静态嵌套类较少使用,非静态嵌套类使用较多,也就是常说的内部类.其中内部类又分为三种类型: 1.在外部类中直接定义的内部类. 2.在函数中定义的内部类. 3.匿名内部类. 对于这几种类型的访问规则, 示例程序如下: package lxg; //定义外部类 public class OuterClass { //外部类静态成员变量

  • 详解Java中Collections.sort排序

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

  • 详解Java中HashSet和TreeSet的区别

    详解Java中HashSet和TreeSet的区别 1. HashSet HashSet有以下特点: 不能保证元素的排列顺序,顺序有可能发生变化 不是同步的 集合元素可以是null,但只能放入一个null 当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置. 简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个

  • 详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. getClass()是java中Object类的一个方法,其原型为: public final Class<?> getClass() 返回值为 当前运行时类的Class对象. 所以写了一段代码来说明: getClass()不受this和super影响,而是有当前的运行类决定的. 代码如下: 父类

  • 详解Java中Checked Exception与Runtime Exception 的区别

    详解Java中Checked Exception与Runtime Exception 的区别 Java里有个很重要的特色是Exception ,也就是说允许程序产生例外状况.而在学Java 的时候,我们也只知道Exception 的写法,却未必真能了解不同种类的Exception 的区别. 首先,您应该知道的是Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked

  • 详解JAVA中implement和extends的区别

    详解JAVA中implement和extends的区别 extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,Java中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了比如class A extends B implements C,D,E implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法. 还有几点需要注意: (1

随机推荐