寫在前面
部分圖片因?yàn)橹暗膱D床掛了所以丟失…近期目測沒有時(shí)間重新搞了…
APM監(jiān)控工具之Pinpoint初探
簡介
Pinpoint 是一個(gè)開源的APM監(jiān)控工具,我們可以通過pinpoint實(shí)時(shí)跟蹤應(yīng)用之間的調(diào)用、程序的響應(yīng)時(shí)間以及服務(wù)器資源使用狀態(tài),可以在分布式環(huán)境中為沒個(gè)調(diào)用生成代碼級別的可視圖并定位瓶頸點(diǎn)和失敗點(diǎn)。
Pinpoint參考的是Google的Dapper,參考文檔:http://bigbully.github.io/Dapper-translation/
-
Pinpoint目前支持的模塊:
JDK 6+ Tomcat 6/7/8, Jetty 8/9, JBoss EAP 6, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5 Spring, Spring Boot (Embedded Tomcat, Jetty) Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER ActiveMQ, RabbitMQ MySQL, Oracle, MSSQL, CUBRID,POSTGRESQL, MARIA Arcus, Memcached, Redis, CASSANDRA iBATIS, MyBatis DBCP, DBCP2, HIKARICP gson, Jackson, Json Lib log4j, Logback?
安裝及部署
安裝pinpoint需要:
0、JAVA環(huán)境
1、Hbase
2、pinpoint-collector、pinpoint-web、pinpoint-agent
3、mysql
就現(xiàn)有環(huán)境來說,從安裝Hbase開始操作
安裝Hbase
1、下載Hbase
2、解壓tar包
3、修改配置文件
hbase-env.sh
#使用Hbase自帶的zookeeper,如使用外置zookeeper需置為false
export HBASE_MANAGES_ZK=true
#配置JAVA環(huán)境變量
export JAVA_HOME=/usr/java/jdk1.8.0_121
hbase-site.xml
#添加以下配置
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
4、啟動(dòng)Hbase
./start-hbase.sh
5、初始化Hbase表
這個(gè)步驟需要pinpoint源碼中的hbase-create.hbase腳本。
下載源碼后,在Hbase的bin目錄下運(yùn)行:
./hbase shell /home/liang/pinpoint/pp-src/hbase/scripts/hbase-create.hbase
理想的情況是運(yùn)行成功,可以在hbase shell中通過status 'detailed'查看已建立的表的情況。
配置pinpoint-collector
將pinpoint-collector解壓后放入web容器中,本次實(shí)驗(yàn)中使用的是tomcat。
進(jìn)入配置文件目錄/home/liang/pinpoint/collector-pinpoint/webapps/pinpoint-collector-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:
#Hbase所在的主機(jī)名
hbase.client.host=k8s-slave3
hbase.client.port=2181
修改tomcat啟動(dòng)端口,以免發(fā)生端口沖突事件。
啟動(dòng)tomcat。
配置pinpoint-web
將pinpoint-web解壓后放入web容器中,本次實(shí)驗(yàn)中使用的是tomcat。
進(jìn)入配置文件目錄/home/liang/pinpoint/web-pinpoint/webapps/pinpoint-web-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:
#Hbase所在的主機(jī)名
hbase.client.host=k8s-slave3
hbase.client.port=2181
修改tomcat啟動(dòng)端口,以免發(fā)生端口沖突事件。
啟動(dòng)tomcat。
部署pinpoint-agent
將pinpoint-agent copy至需要監(jiān)控的程序所在服務(wù)器中,修改程序的啟動(dòng)腳本。
-
Tomcat的情況,在
catalina.sh中添加以下幾行:CATALINA_OPTS="$CATALINA_OPTS -javaagent:/home/liuhy/pinpoint/pinpoint-bootstrap-1.7.2-SNAPSHOT.jar" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=0000001" CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=10.10.30.63_emp" -
Springboot啟動(dòng),在啟動(dòng)腳本中添加:
-javaagent:/home/liuhy/pinpoint/pinpoint-bootstrap-1.7.2-SNAPSHOT.jar -Dpinpoint.agentId=0000002 -Dpinpoint.applicationName=10.10.30.63_mdmDpinpoint.agentId為該程序在pinpoint中的編號,唯一且不可重復(fù),一個(gè)agentId對應(yīng)一個(gè)JVM。Dpinpoint.applicationName相同應(yīng)用的applicationName相同,agentId不同。如mdm有多個(gè)實(shí)例,則多個(gè)實(shí)例的applicationName都是mdm,但agentId需不同。?
修改pinpoint-agent中的pinpoint.config配置文件:
5 ###########################################################
6 # Collector server #
7 ###########################################################
8 #設(shè)置collector所在服務(wù)器的ip,本次實(shí)驗(yàn)中collector的ip為10.10.30.64
9 profiler.collector.ip=10.10.30.64
修改啟動(dòng)腳本后重啟服務(wù),即可在pinpoint-web中看到該服務(wù)的當(dāng)前狀態(tài)和性能指標(biāo),如下圖:
[圖片上傳失敗...(image-35dd2a-1524043174545)]
在多個(gè)服務(wù)中部署pinpoint:
[圖片上傳失敗...(image-cad3e-1524043174545)]
查看系統(tǒng)資源使用情況
查看單個(gè)agent的實(shí)時(shí)情況
打開Inspector,選擇要查看的應(yīng)用的agentId,即可查看該應(yīng)用的JVM參數(shù)及所在服務(wù)器資源使用情況:
[圖片上傳失敗...(image-22b636-1524043174545)]
P.S: Application Inspector需要進(jìn)一步搭建、配置Flink環(huán)境,待考。
定位系統(tǒng)異常
在本次實(shí)驗(yàn)中,EMM portal報(bào)出一個(gè)異常,通過框選異常區(qū)域可以查看該時(shí)間段所有的請求及詳細(xì)信息,由此可快速定位問題。
[圖片上傳失敗...(image-5a2e04-1524043174545)]
[圖片上傳失敗...(image-4c58c3-1524043174545)]
告警監(jiān)控
在Pinpoint中可以設(shè)定告警規(guī)則,實(shí)時(shí)對程序進(jìn)行監(jiān)控,如觸發(fā)告警則發(fā)送郵件。
該功能需要實(shí)現(xiàn)額外邏輯,待考。
About Alarm:http://naver.github.io/pinpoint/alarm.html
[圖片上傳失敗...(image-e62d5-1524043174545)]
Pinpoint With Docker
Pinpoint-collector和Pinpoint-web均可做成docker鏡像
參考:
- https://blog.csdn.net/jinzhencs/article/details/54346299
- https://yous.be/2015/05/05/using-pinpoint-with-docker/
- [https://github.com/yous/pinpoint-docker
Application Inspector部署
Application Inspector在我的理解看來就是如果一個(gè)application是集群的,可以通過inspector查看相同application name的應(yīng)用的所有資源使用情況。
經(jīng)過幾天的煎熬,終于把Application Inspector弄出來了!
編譯pinpoint-flink-job.jar
從編譯開始就遭遇了這樣那樣的困難 _(:з」∠),一定要下pinpoint源碼才行。
編譯之前要修改pp-src中的配置文件:
-
pinpoint-flink.properties,路徑在pp-src/flink/src/main/resourcesflink.cluster.enable=true #zookeeper在本機(jī) flink.cluster.zookeeper.address=k8s-slave3 flink.cluster.zookeeper.sessiontimeout=3000 flink.cluster.zookeeper.retry.interval=5000 flink.cluster.tcp.port=19994 flink.StreamExecutionEnvironment=server flink.sourceFunction.Parallel=1
-
hbase.properties,路徑同上#hbase在本機(jī) hbase.client.host=k8s-slave3 hbase.client.port=2181?
然后就開始痛苦的編譯!在pp-src路徑下./mvnw install -Dmaven.test.skip=true
在maven setting.xml中加入repository路徑之后拒絕連接的問題得以改善,但是仍然重復(fù)編譯了四五次才最終success!好幾天電腦都沒關(guān)_(:з」∠)
[圖片上傳失敗...(image-e1eea9-1524043174545)]
[圖片上傳失敗...(image-57b14e-1524043174545)]
最后終于編譯成功了!
[圖片上傳失敗...(image-ec2c84-1524043174545)]
編譯pinpoint必須要配置JAVA6、JAVA7和JAVA8的環(huán)境變量嗯。
從編譯之后一步一步來,每個(gè)步驟也都是遇到了很多坑。
Hbase和Zookeeper
因?yàn)镕link也要用到zookeeper,所以就打算自己搭一個(gè)zookeeper,讓hbase也用這個(gè)外置的zookeeper。然后就改了hbase的配置文件hbase-env.sh:
export HBASE_MANAGES_ZK=false
重啟hbase時(shí)仍然報(bào)錯(cuò),各種查了之后,修改hbase.site.xml如下:
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>
</configuration>
同時(shí)對zookeeper的配置文件也做了一些修改:
復(fù)制zoo_sample.cfg并命名為zoo.cfg:
dataDir=/usr/hadoop/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181
然后在zookeeper根目錄下創(chuàng)建data文件夾,cat 1>myid。這一步驟以后再補(bǔ)充。
然后啟動(dòng)hbase就可以啦ovo
Flink版本問題與部署
一開始抱著什么都用最新的的想法使用了flink-1.4,后來看pinpoint github上的問答,1.4未經(jīng)過驗(yàn)證且存在問題,推薦使用1.3.1版本,于是下了1.3.1版本。
配置文件并沒有改動(dòng)很大,修改了flink-conf.yaml:
# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 3
默認(rèn)值是1,后來測試的時(shí)候發(fā)現(xiàn)slot數(shù)為1時(shí)會(huì)抱slot不夠用的問題,于是改成了3。
啟動(dòng)后可打開http://10.10.30.64:8081查看到flink dashboard,其中10.10.30.64為flink所在服務(wù)器ip。
執(zhí)行pinpoint-flink-job
在flink目錄下執(zhí)行已經(jīng)編譯好的jar包:
./flink run /home/liang/pinpoint/pp-src/flink/target/pinpoint-flink-job-1.8.0-SNAPSHOT.jar
正確啟動(dòng)后可以在flink dashboard中查看到這個(gè)job,運(yùn)行狀態(tài)為running:
[圖片上傳失敗...(image-2259f3-1524043174545)]
修改pinpoint collector配置文件
如official-guide所說,修改了幾處配置文件,實(shí)際上有些出入。
修改pinpoint-collector.properties:
flink.cluster.enable=true
flink.cluster.zookeeper.address=k8s-slave3
flink.cluster.zookeeper.sessiontimeout=3000
重啟collector后報(bào)出TcpDataSender is null問題,于是在配置文件中啟用tcp receiver
修改pinpoint-collector.properties:
collector.receiver.stat.tcp=true
collector.receiver.stat.tcp.ip=0.0.0.0
collector.receiver.stat.tcp.port=9995
collector.receiver.span.tcp=true
collector.receiver.span.tcp.ip=0.0.0.0
collector.receiver.span.tcp.port=9996
重啟后不再報(bào)錯(cuò)。猜測應(yīng)該可以設(shè)置成udp的,待考。
修改pinpoint web配置文件
如official-guide所說,修改了幾處配置文件。
修改pinpoint-web.properties:
config.show.applicationStat=true
修改batch.properties:
#flink server所在服務(wù)器
batch.flink.server=k8s-slave3
修改applicationContext-batch-schedule.xml,可設(shè)置各job的執(zhí)行頻率:
<task:scheduled-tasks scheduler="scheduler">
...
<task:scheduled ref="batchJobLauncher" method="flinkCheckJob" cron="0 0/10 * * * *" />
</task:scheduled-tasks>
現(xiàn)在打開pinpoint web,選擇一個(gè)application,點(diǎn)擊Inspector就可查看Inspector了
圖片上傳總失敗…我也沒招了…gitpage上的圖片可以看http://laciagin.me/2018/04/10/APM%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%E4%B9%8BPinpoint/
總結(jié)
Pinpoint可以對分布式系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控,也可以用作性能測試輔助。
在Pinpoint上還存在很多可能性,待考,待更新。
當(dāng)前一個(gè)可用的pinpoint console:http://10.10.30.64:28080/pinpoint-web-1.7.2-SNAPSHOT,User Group部分還存在一些問題,推測與Mysql環(huán)境有關(guān),待解決。