APM监控工具之Pinpoint初探

写在前面

为了更好的阅读体验,请转到http://laciagin.me/2018/04/10/APM%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%E4%B9%8BPinpoint/

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环境有关,待解决。

    原文作者:Lacia
    原文地址: https://www.jianshu.com/p/6d1738db962c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞