APM,全称:Application Performance Management (应用程序性能管理)。 在应用服务各节点相互调用的时候,从中记录并传递一个应用级别的标记,这个标记可以用来关联各个服务节点之间的关系。比如两个应用服务节点之间使用 HTTP 作为传输协议的话,那么这些标记就会被加入到 HTTP 头中。这样就可以更加精细化的分析应用性能,也就是计量应用程序在执行不同区域的代码已经完成事务过程找那个所消耗的具体时长,耗费资源情况。
商用软件:OneAPM,听云,透视宝,Oracle的EMCC等
开源软件:Pinpoint,SkyWalking,Zipkin,CAT等
Pinpoint是开源在github(项目地址:https://github.com/naver/pinpoint )上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的,只需要在被测试的Tomcat中加上3行内容,添加探针,就可以监控整套程序了。
软件环境
官方给的快速安装教程,是使用git clone代码,然后build编译安装,这样时间比较慢,而且容易出错,不方便排查,所以我们这里直接从https://github.com/naver/pinpoint/releases/ 下载war包,进行部署!
ps:如果hbase和pinpoint-collector、pinpoint-web部署在同一台机器,不用单独部署zookeeper;如果是下载war包部署,也不用安装maven
ps:不要使用hbase2.0,否则首页server map不显示
组件 | 版本 | 功能 | 下载路径 |
---|---|---|---|
zookeeper | 3.4.12 | 应用程序协调 | http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz |
hbase | 1.2.9 | 存储收集的数据 | http://mirror.bit.edu.cn/apache/hbase/hbase-1.2.9/hbase-1.2.9-bin.tar.gz |
pinpoint-collector | 1.8.1 | 收集各种性能数据 | https://github.com/naver/pinpoint/releases/download/1.8.1/pinpoint-collector-1.8.1.war |
pinpoint-web | 1.8.1 | 数据WEB网页展示 | https://github.com/naver/pinpoint/releases/download/1.8.1/pinpoint-web-1.8.1.war |
pinpoint-agent | 1.8.1 | 应用关联探针 | https://github.com/naver/pinpoint/releases/download/1.8.1/pinpoint-agent-1.8.1.tar.gz |
Oracle JDK | 1.8 | JAVA运行环境 | https://www.oracle.com/technetwork/java/archive-139210.html |
apache-tomcat | 8.5.37 | web容器 | http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz |
apache-maven | 3.3.9 | 编译环境 | http://apache.mirrors.lucidnetworks.net/maven/maven-3/ |
架构
支持的模块
- JDK 6+
- Tomcat 6/7/8/9, Jetty 8/9, JBoss EAP 6/7, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5, Weblogic 10/11g/12c, Undertow
- Spring, Spring Boot (Embedded Tomcat, Jetty), Spring asynchronous communication
- Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient, Akka-http, Apache CXF
- Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER, GRPC
- ActiveMQ, RabbitMQ, Kafka
- MySQL, Oracle, MSSQL(jtds), CUBRID, POSTGRESQL, MARIA
- Arcus, Memcached, Redis(Jedis, Lettuce), CASSANDRA, MongoDB, Hbase
- iBATIS, MyBatis
- DBCP, DBCP2, HIKARICP, DRUID
- gson, Jackson, Json Lib, Fastjson
- log4j, Logback
组件兼容性
准备工作
查看主机名
cat /etc/hostname
1 | pinpoint_server |
添加主机名解析
cat /etc/hosts
1 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 |
准备所需的软件包
1 | [root@pinpoint_server ~]# cd /usr/local/src/pinpoint |
安装JDK
tar xf jdk-8u112-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
1 | export HISTSIZE=10000 |
source /etc/profile
安装hbase
解压软件包
tar xf hbase-1.2.9-bin.tar.gz -C /usr/local/
cd /usr/local/hbase-1.2.9/conf/
修改配置文件
vim hbase-env.sh
1 | #在27行左右配置JAVA_HOME |
vim hbase-site.xml
1 | <configuration> |
新建数据目录
mkdir -p /data/pinpoint/hbase
mkdir -p /data/pinpoint/zookeeper
启动hbase服务
cd /usr/local/hbase-1.2.9/bin
./start-hbase.sh
查看启动日志tailf /usr/local/hbase-1.2.9/bin/../logs/hbase-root-master-pinpoint_server.log
也可以通过web控制台 http://192.168.6.140:16010/ 来访问hbase
导入hbase数据
下载这个hbase数据 https://github.com/naver/pinpoint/tree/master/hbase/scripts/hbase-create.hbase
$HBASE_HOME/bin/hbase shell $PATH_TO_SCRIPTS/hbase-create.hbase/usr/local/hbase-1.2.9/bin/hbase shell /usr/local/src/pinpoint/hbase-create.hbase
1 | 2019-01-09 09:20:19,016 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable |
./hbase shell
1 | 2019-01-09 10:55:54,792 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable |
当然也可以通过web控制台查看数据初始化是否成功!
安装pinpoint-collector
部署过程很简单,起一个web容器(tomcat),把下载的war包扔进去就可以了
解压tomcat
tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.5.32/ tomcat_pinpoint-collector
cd tomcat_pinpoint-collector/
删除默认的应用
rm -fr webapps/*
部署 pinpoint-collector-1.8.1.war
拷贝pinpoint-collector-1.8.1.war到webapps目录下,重命名为ROOT.war,改名只是为了访问的时候不用加上下文对象名称,就是懒~~~cp /usr/local/src/pinpoint/pinpoint-collector-1.8.1.war webapps/ROOT.war
启动tomcat服务
bin/startup.sh
安装pinpoint-web
解压tomcat
tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.5.32 tomcat_pinpoint-web
修改tomcat端口
由于已经有一个tomcat把默认的端口都占用了,我们这里修改一下tomcat使用到的端口cd tomcat_pinpoint-web/conf
sed -i 's/port="8005"/port="18005"/g' server.xml
sed -i 's/port="8080"/port="18080"/g' server.xml
sed -i 's/port="8443"/port="18443"/g' server.xml
sed -i 's/port="8009"/port="18009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="18443"/g' server.xml
sed -i "s/localhost/192.168.6.140/g" server.xml
删除默认的应用
rm -fr ../webapps/*
cp /usr/local/src/pinpoint/pinpoint-web-1.8.1.war /usr/local/tomcat_pinpoint-web/webapps/ROOT.war
bin/startup.sh
访问web控制台http://192.168.6.140:18080
安装pinpoint-agent
部署探针也很简单,就是在tomcat的启动配置文件中添加以下三行内容即可
添加linux探针
mkdir -p /usr/local/pinpoint-agent
tar xf pinpoint-agent-1.8.1.tar.gz -C /usr/local/pinpoint-agent
/usr/local/pinpoint-agent
vim pinpoint.config
1 | profiler.collector.ip=192.168.6.140 |
检测一下agent和服务端的通信情况
如果有问题,大部分情况下是pinpoint和hbase之间的连通性问题sh script/networktest.sh
tar xf apache-tomcat-8.5.32.tar.gz -C /usr/local/
mv apache-tomcat-8.5.32/ tomcat_test
cd tomcat_test/conf/
和之前一样,因为本机的tomcat端口被占用,我们修改一下相关端口sed -i 's/port="8005"/port="28005"/g' server.xml
sed -i 's/port="8080"/port="28080"/g' server.xml
sed -i 's/port="8443"/port="28443"/g' server.xml
sed -i 's/port="8009"/port="28009"/g' server.xml
sed -i 's/redirectPort="8443"/redirectPort="28443"/g' server.xml
sed -i "s/localhost/192.168.6.140/g" server.xml
vim catalina.sh
1 | # for pinpoint agent |
bin/startup.sh
添加windows探针
由于我这边目前大部分项目都是在windows跑的,我们添加两个windows探针看一下真实的效果
解压pinpoint-agent-1.8.1.tar.gz到D:/pinpoint-agent/
修改配置文件pinpoint.config
1 | profiler.collector.ip=192.168.6.140 |
修改D:\apache-tomcat-8082\bin\catalina.bat文件,添加到最前边即可
1 | set CATALINA_OPTS=%CATALINA_OPTS% -javaagent:D:/pinpoint-agent/pinpoint-bootstrap-1.8.1.jar |
修改D:\apache-tomcat-ou\bin\catalina.bat文件,添加到最前边即可
1 | set CATALINA_OPTS=%CATALINA_OPTS% -javaagent:D:/pinpoint-agent/pinpoint-bootstrap-1.8.1.jar |
启动tomcat后,我们打开pinpoint-web控制台
微服务springboot添加pinpoint探针
1 | /usr/local/jdk1.8.0_202/bin/java -jar -javaagent:/usr/local/ths/pinpoint-agent/pinpoint-bootstrap-1.8.4.jar -Dpinpoint.agentId=monitor-china-server -Dpinpoint.applicationName=chinaserver /usr/local/ths/monitor-china-server.jar |
web控制台简单应用
通过这个图,我们就能看到项目应用直接的依赖关系
删除应用
如果有调试时产生已经废弃的应用,我们可以使用管理员api调用删除,可以使用应用名称( /admin/removeApplicationName.pinpoint?applicationName=$APPLICATION_NAME&password=$PASSWORD
)或者客户端id(/admin/removeAgentId.pinpoint?applicationName=$APPLICATION_NAME&agentId=$AGENT_ID&password=$PASSWORD
)两种方法删除;$PASSWORD为pinpoint-web.properties
文件中的admin.password
配置项值。
1 | #示例 |
参考链接;
https://www.infoq.cn/article/apm-Pinpoint-practice
https://www.cnblogs.com/yyhh/p/6106472.html
https://github.com/naver/pinpoint/releases
https://blog.csdn.net/wh211212/article/details/80437696