APM监控工具之Pinpoint初探

写在前面

部分图片因为之前的图床挂了所以丢失…近期目测没有时间重新搞了…

APM监控工具之Pinpoint初探

简介

  • Pinpoint 是一个开源的APM监控工具,我们可以通过pinpoint实时跟踪应用之间的调用、程序的响应时间以及服务器资源使用状态,可以在分布式环境中为没个调用生成代码级别的可视图并定位瓶颈点和失败点。

  • 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环境

1、Hbase

2、pinpoint-collector、pinpoint-web、pinpoint-agent

3、mysql

就现有环境来说,从安装Hbase开始操作

安装Hbase

1、下载Hbase

2、解压tar包

3、修改配置文件

hbase-env.sh

#使用Hbase自带的zookeeper,如使用外置zookeeper需置为false
export HBASE_MANAGES_ZK=true
#配置JAVA环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_121

hbase-site.xml

#添加以下配置
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>

4、启动Hbase

./start-hbase.sh

5、初始化Hbase表

这个步骤需要pinpoint源码中的hbase-create.hbase脚本。

下载源码后,在Hbase的bin目录下运行:

./hbase shell /home/liang/pinpoint/pp-src/hbase/scripts/hbase-create.hbase

理想的情况是运行成功,可以在hbase shell中通过status 'detailed'查看已建立的表的情况。

配置pinpoint-collector

将pinpoint-collector解压后放入web容器中,本次实验中使用的是tomcat。

进入配置文件目录/home/liang/pinpoint/collector-pinpoint/webapps/pinpoint-collector-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:

#Hbase所在的主机名
hbase.client.host=k8s-slave3
hbase.client.port=2181

修改tomcat启动端口,以免发生端口冲突事件。

启动tomcat。

配置pinpoint-web

将pinpoint-web解压后放入web容器中,本次实验中使用的是tomcat。

进入配置文件目录/home/liang/pinpoint/web-pinpoint/webapps/pinpoint-web-1.7.2-SNAPSHOT/WEB-INF/classes,修改hbase.properties文件:

#Hbase所在的主机名
hbase.client.host=k8s-slave3
hbase.client.port=2181

修改tomcat启动端口,以免发生端口冲突事件。

启动tomcat。

部署pinpoint-agent

将pinpoint-agent copy至需要监控的程序所在服务器中,修改程序的启动脚本。

  1. 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"    
    
  2. Springboot启动,在启动脚本中添加:

    -javaagent:/home/liuhy/pinpoint/pinpoint-bootstrap-1.7.2-SNAPSHOT.jar 
    -Dpinpoint.agentId=0000002 
    -Dpinpoint.applicationName=10.10.30.63_mdm
    

    Dpinpoint.agentId为该程序在pinpoint中的编号,唯一且不可重复,一个agentId对应一个JVM。

    Dpinpoint.applicationName相同应用的applicationName相同,agentId不同。如mdm有多个实例,则多个实例的applicationName都是mdm,但agentId需不同。

修改pinpoint-agent中的pinpoint.config配置文件:

  5 ###########################################################
  6 # Collector server                                        # 
  7 ###########################################################
  8 #设置collector所在服务器的ip,本次实验中collector的ip为10.10.30.64
  9 profiler.collector.ip=10.10.30.64

修改启动脚本后重启服务,即可在pinpoint-web中看到该服务的当前状态和性能指标,如下图:

[图片上传失败...(image-35dd2a-1524043174545)]

在多个服务中部署pinpoint:

[图片上传失败...(image-cad3e-1524043174545)]

查看系统资源使用情况

查看单个agent的实时情况

打开Inspector,选择要查看的应用的agentId,即可查看该应用的JVM参数及所在服务器资源使用情况:

[图片上传失败...(image-22b636-1524043174545)]

P.S: Application Inspector需要进一步搭建、配置Flink环境,待考。

定位系统异常

在本次实验中,EMM portal报出一个异常,通过框选异常区域可以查看该时间段所有的请求及详细信息,由此可快速定位问题。

[图片上传失败...(image-5a2e04-1524043174545)]

[图片上传失败...(image-4c58c3-1524043174545)]

告警监控

在Pinpoint中可以设定告警规则,实时对程序进行监控,如触发告警则发送邮件。

该功能需要实现额外逻辑,待考。

About Alarm:http://naver.github.io/pinpoint/alarm.html

[图片上传失败...(image-e62d5-1524043174545)]

Pinpoint With Docker

Pinpoint-collector和Pinpoint-web均可做成docker镜像

参考

Application Inspector部署

Application Inspector在我的理解看来就是如果一个application是集群的,可以通过inspector查看相同application name的应用的所有资源使用情况。

经过几天的煎熬,终于把Application Inspector弄出来了!

编译pinpoint-flink-job.jar

从编译开始就遭遇了这样那样的困难 _(:з」∠),一定要下pinpoint源码才行。

编译之前要修改pp-src中的配置文件:

  • pinpoint-flink.properties,路径在pp-src/flink/src/main/resources

        flink.cluster.enable=true
        #zookeeper在本机
        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在本机
        hbase.client.host=k8s-slave3
        hbase.client.port=2181
    

然后就开始痛苦的编译!在pp-src路径下./mvnw install -Dmaven.test.skip=true

在maven setting.xml中加入repository路径之后拒绝连接的问题得以改善,但是仍然重复编译了四五次才最终success!好几天电脑都没关_(:з」∠)

[图片上传失败...(image-e1eea9-1524043174545)]

[图片上传失败...(image-57b14e-1524043174545)]

最后终于编译成功了!

[图片上传失败...(image-ec2c84-1524043174545)]

编译pinpoint必须要配置JAVA6、JAVA7和JAVA8的环境变量嗯。

从编译之后一步一步来,每个步骤也都是遇到了很多坑。

Hbase和Zookeeper

因为Flink也要用到zookeeper,所以就打算自己搭一个zookeeper,让hbase也用这个外置的zookeeper。然后就改了hbase的配置文件hbase-env.sh:

export HBASE_MANAGES_ZK=false

重启hbase时仍然报错,各种查了之后,修改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>

同时对zookeeper的配置文件也做了一些修改:

复制zoo_sample.cfg并命名为zoo.cfg:

dataDir=/usr/hadoop/zookeeper-3.4.6/data
# the port at which the clients will connect
clientPort=2181

然后在zookeeper根目录下创建data文件夹,cat 1>myid。这一步骤以后再补充。

然后启动hbase就可以啦ovo

Flink版本问题与部署

一开始抱着什么都用最新的的想法使用了flink-1.4,后来看pinpoint github上的问答,1.4未经过验证且存在问题,推荐使用1.3.1版本,于是下了1.3.1版本。

配置文件并没有改动很大,修改了flink-conf.yaml

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 3

默认值是1,后来测试的时候发现slot数为1时会抱slot不够用的问题,于是改成了3。

启动后可打开http://10.10.30.64:8081查看到flink dashboard,其中10.10.30.64为flink所在服务器ip。

执行pinpoint-flink-job

在flink目录下执行已经编译好的jar包:

./flink run /home/liang/pinpoint/pp-src/flink/target/pinpoint-flink-job-1.8.0-SNAPSHOT.jar

正确启动后可以在flink dashboard中查看到这个job,运行状态为running:

[图片上传失败...(image-2259f3-1524043174545)]

修改pinpoint collector配置文件

official-guide所说,修改了几处配置文件,实际上有些出入。

修改pinpoint-collector.properties

    flink.cluster.enable=true
    flink.cluster.zookeeper.address=k8s-slave3
    flink.cluster.zookeeper.sessiontimeout=3000

重启collector后报出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

重启后不再报错。猜测应该可以设置成udp的,待考。

修改pinpoint web配置文件

official-guide所说,修改了几处配置文件。

修改pinpoint-web.properties

config.show.applicationStat=true

修改batch.properties

#flink server所在服务器
batch.flink.server=k8s-slave3

修改applicationContext-batch-schedule.xml,可设置各job的执行频率:

<task:scheduled-tasks scheduler="scheduler">
    ...
    <task:scheduled ref="batchJobLauncher" method="flinkCheckJob" cron="0 0/10 * * * *" />
</task:scheduled-tasks>

现在打开pinpoint web,选择一个application,点击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/

总结

Pinpoint可以对分布式系统进行实时监控,也可以用作性能测试辅助。

在Pinpoint上还存在很多可能性,待考,待更新。

当前一个可用的pinpoint console:http://10.10.30.64:28080/pinpoint-web-1.7.2-SNAPSHOT,User Group部分还存在一些问题,推测与Mysql环境有关,待解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容